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

}

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐