ESP32 UARTHMI屏幕扫描WiFi并连接
- mircopython
- python
- ESP32的python
- 串口屏
- 串口屏程序
- arduino*不可用*
mircopython
python
-
原因 我精通C语言,但是乐信官网ESP-IDF安装复杂,arduino但是安装相对简单arduino语言与C 语言更相似,以至于鄙视String、const char*字符串处理稍有欠缺。通过arduino虽然编译程序已经通过,但在实际操作中显示内存溢出。最后,我不得不放弃arduino选择了micropython。
-
安装
mircopython对python与C语言和用户相比,用户更友好C ,字符串的处理更简单,python对于C语言,C 或者对于其他语言的用户来说,只要有良好的写作习惯,就很难在缩进问题上犯错误。 下一年是我用的固件和编辑器,没用VScode是因为Thonny对ESP32内部文件操作更方便。烧录也可以使用Thonny,再也不详细了。 ESP32python固件 编辑器:thonny
ESP32的python
烧录固件后,打开Thonny,连接ESP32设备进入后python命令行可以通过指令进行ESP32进行控制。 也可以编辑main.py保存到ESP32之中,ESP32复位后直接运行main.py
串口屏
我不再对串口屏做太多描述,只需要住以取消串口屏的数据返回功能,因为无论是哪种固件,ESP32复位后会输出设备信息,一旦处理不当会导致设备信息ESP32接受的数据混乱。
#-*-coding:utf-8-*- import machine import network import esp32 import time import socket pin33 = machine.Pin(33, machine.Pin.OUT) pin33.value(0) essid="" password="" #print("ok") wlan = network.WLAN(network.STA_IF) wlan.active(True) print("",end=b"\xff\xff\xff") time.sleep(1) print("page ssid",end=b"\xff\xff\xff") while True: if wlan.status()==1010: print("",end=b"\xff\xff\xff") time.sleep(1)
print("page message",end=b"\xff\xff\xff")
time.sleep(1)
print("ip.txt=\""+wlan.ifconfig()[0]+"\"",end=b"\xff\xff\xff")
soc = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
soc.bind((wlan.ifconfig()[0], 9999))
while True:
data, addr = soc.recvfrom(1024)
print(data)
if wlan.status()!=1010&len(essid)!=0&len(password)!=0:
print('connecting to network...')
wlan.connect(essid, password)
recerve=input()
if recerve.find("scan")==0 :
wifiData=wlan.scan()
n=0
print("",end=b"\xff\xff\xff")
while n<len(wifiData):
print("t"+str(n)+".txt=\""+str(wifiData[n][0])[2:-1]+"\"",end=b"\xff\xff\xff")
n=n+1
if recerve.find("ssid")==0 :
essid=recerve[5:]
if recerve.find("pass")==0 :
password=recerve[5:]
wlan.connect(essid,password)
if recerve.find("disc")==0 :
wlan.disconnect();
print("page ssid",end=b"\xff\xff\xff")
这段代码有两个问题, 一:一旦连接wifi无法断开,只能复位。 二:不知道为什么,输入两次密码才能被判定连接成功与否 出现这两个问题的原因主要是input()函数无法设定超时,而使用串口函数或许能够解决该问题,或者有其他单线程解决此类问题方法可以共同探讨,留言评论,或者加我QQ:1719602121备注ESP即可 我也会附上arduino代码,希望各位能给予指导。
串口屏程序
串口屏程序在我的资源之中,串口屏
arduino不可用
#include <iostream>
#include <string.h>
#include<WiFi.h>
char *ssid="0 ";
char *password="0 ";
char *data="0 ";
char *str="0 ";
String sdata="0 ";
void setup()
{
Serial.begin(115200);
pinMode(33,OUTPUT);
Serial.println("ok");
Serial.print("\xff\xff\xff");
// WiFi.begin(ssid,password);
// while (WiFi.status()!= WL_CONNECTED) {
// delay(500);
// Serial.println("Connectingto WiFi..");
// }
// Serial.println("Connectedto the WiFi network");
digitalWrite(33,LOW);
}
void loop() {
while(Serial.available() > 0)
{
sdata =Serial.readString();
strcpy(data,sdata.c_str());
str=strtok(data,":");
}
if (strncmp(str,"scan",4)==0)
{
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
int n = WiFi.scanNetworks();
for (int i = 0; i < n; ++i)
{
Serial.print("t");
Serial.print(i);
Serial.print(".txt=\"");
Serial.print(WiFi.SSID(i));
Serial.print("\"");
Serial.print("\xff\xff\xff");
delay(10);
}
strcpy(data,"");
}
if (strncmp(str,"ssid",4)==0)
{
str=strtok(data,":");
strcpy(ssid, str);
strcpy(data,"");
}
if (strncmp(str,"pass",4)==0)
{
str=strtok(data,":");
strcpy(password, str);
WiFi.begin(ssid,password);
while (WiFi.status()!= WL_CONNECTED)
Serial.print("page message");
Serial.print("\xff\xff\xff");
Serial.print("ssid.txt=\"");
Serial.print(ssid);
Serial.print("\"");
Serial.print("\xff\xff\xff");
Serial.print("ip.txt=\"");
Serial.print(WiFi.softAPIP());
Serial.print("\"");
Serial.print("\xff\xff\xff");
strcpy(data,"");
}
strcpy(data,"");
}