资讯详情

【ESP32扫描连接(串口屏)】

ESP32 UARTHMI屏幕扫描WiFi并连接

  • mircopython
  • python
  • ESP32的python
  • 串口屏
  • 串口屏程序
  • arduino*不可用*

mircopython

python

  1. 原因 我精通C语言,但是乐信官网ESP-IDF安装复杂,arduino但是安装相对简单arduino语言与C 语言更相似,以至于鄙视String、const char*字符串处理稍有欠缺。通过arduino虽然编译程序已经通过,但在实际操作中显示内存溢出。最后,我不得不放弃arduino选择了micropython。

  2. 安装

    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,"");

}

标签: 32h连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台