ESP32_物联网那些事通过查阅资料,ESP32 是一款物联网模块,它支持 TCP/IP 协议,于是我们可以使用 socket 通讯,实现局域网通信,它也支持 MQTT 通讯,呵远程连接到阿里云。下面的链接有详细的使用说明。
Socket 通信
使用物联网第一步:烧录固件这里提到的固件是micropython官方出的固件,我在网上还看到了不少通过C语言写.bin固件的教程,可以写自己需要的固件刷入到ESP32中
可以参考这篇文章
ESP32_micropython固件烧录
如何连接到 WiFi?Micropython联网同步时间
ESP32 是可以使用 REPL 的,REPL 就像局域网下的 VSCode,可以在浏览器上编写程序,可惜他不能开机自启,于是就有人开发了一款叫做 EMP 的 IDE ,下面有链接。
EMP项目简介
我在执行原文提供的代码时发现set_boot_mode()
报错
原文提供的代码
1 2 3 4 5 6 7 8 9 10 11 12 >>> from emp_boot import set_boot_mode>>> set_boot_mode()>>> from emp_boot import set_boot_mode>>> set_boot_mode()[0 ] Boot with nothing attention: this option will clear up boot.py, careful! [1 ] Boot with wifi startup this mode will auto start wifi connect program. [2 ] Easy to develop this mode is for developers.In this mode you can develop much easier via EMP- IDE(emp.1 zlab.com) Please input your choice [0 -2 ]:
下面给出解决方案:
在 ESP32 的 boot.py 中所有代码替换成如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 from emp_wifi import Wififrom emp_webrepl import WebREPLfrom emp_utils import webrepl_passfrom emp_utils import post_ipfrom machine import Pin import timewifi_LED = Pin(12 , Pin.OUT, value=1 ) if __name__ == '__main__' : Wifi.connect() post_ip(Wifi.ifconfig()[0 ][0 ]) wifi_LED.value(0 ) time.sleep(0.5 ) wifi_LED.value(1 ) ''' 上面两行是调用emp_ide,取消注释就可以使用emp_ide, 这里注释掉的原因是想直接调用连接WiFi的函数不使用emp_ide '''
在按复位即可,终端中会提示连接网络并且输入密码,连接过的 WiFi 会被记住,下次连接自动连,非常方便
利用 ESP32 联网实现一些小功能我们可以通过 socket 通讯使得 PC 可以传输数据流到 ESP32 中,下面是代码,这里仿照的是Socket 通信 文末的代码,原文中代码只能传输字节,下面代码可以传输中文字符,通过定义 IO 口可以实现局域网点亮 LED,甚至舵机。
ESP32 TCP 服务端1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 from machine import Timer,Pin,RTC import socketfrom emp_wifi import Wifiimport networkwifi = network.WLAN(network.STA_IF) wifi.active(True ) def connect_to_phone (): try : ip = Wifi.ifconfig()[0 ][0 ] listenSocket = socket.socket() listenSocket.bind((ip, port)) listenSocket.listen(1 ) listenSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1 ) print ('tcp waiting...' ) while True : print ("accepting....." ) conn, addr = listenSocket.accept() print (addr, "connected" ) while True : data = conn.recv(1024 ) if (len (data) == 0 ): print ("close socket" ) conn.close() break code_utf8 = bytes .decode(data) print (code_utf8) ret = conn.send(data) if code_utf8 == "led1 open" : B.value(0 ) if code_utf8 == "led2 open" : C.value(0 ) if code_utf8 == "led1 down" : B.value(1 ) if code_utf8 == "led2 down" : C.value(1 ) except : if (listenSocket): listenSocket.close() wifi_connect()
PC 端1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import socket s = socket.socket() host = '192.168.2.231' port = 10000 s.connect((host, port)) if __name__ == '__main__' : while True : msg = raw_input('>>> ' ) s.send(msg)