MQTT与ESP32上的MicroPython
MicroPython在ESP32上可以直接收发MQTT,这个功能非常方便。
在ESP32上安装MQTT库¶
首先,我们需要在ESP32上面安装mqtt的库。(MQTT客户端在ESP32上面的实现)
首先确认ESP32-MicroPython已经连接上了热点!!!, 通过REPL控制ESP32。
引入upip
包管理器:
>>> import upip >>> upip.install('micropython-umqtt.simple') Installing to: /lib/ Installing micropython-umqtt.simple 1.3.4 from https://files.pythonhosted.org/packages/bd/cf/697e3418b2f44222b3e848078b1e33ee76aedca9b6c2430ca1b1aec1ce1d/micropython-umqtt.simple-1.3.4.tar.gz
这样umqtt.simple这个包就安装好了。
查看Server的IP地址¶
查看PC当前的IP, 在Ubuntu(作为Server)的命令行里面执行指令:
ifconfig ➜ 下载 ifconfig enp3s0 Link encap:以太网 硬件地址 5c:f9:dd:49:4b:ad UP BROADCAST MULTICAST MTU:1500 跃点数:1 接收数据包:0 错误:0 丢弃:0 过载:0 帧数:0 发送数据包:0 错误:0 丢弃:0 过载:0 载波:0 碰撞:0 发送队列长度:1000 接收字节:0 (0.0 B) 发送字节:0 (0.0 B) 中断:16 lo Link encap:本地环回 inet 地址:127.0.0.1 掩码:255.0.0.0 inet6 地址: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 跃点数:1 接收数据包:256668 错误:0 丢弃:0 过载:0 帧数:0 发送数据包:256668 错误:0 丢弃:0 过载:0 载波:0 碰撞:0 发送队列长度:1000 接收字节:138568580 (138.5 MB) 发送字节:138568580 (138.5 MB) wlp2s0 Link encap:以太网 硬件地址 68:5d:43:ec:d3:58 inet 地址:192.168.43.16 广播:192.168.43.255 掩码:255.255.255.0 inet6 地址: fe80::47ef:2ce1:f8e9:b0c2/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:1 接收数据包:146459 错误:0 丢弃:0 过载:0 帧数:0 发送数据包:137348 错误:0 丢弃:0 过载:0 载波:0 碰撞:0 发送队列长度:1000 接收字节:147948142 (147.9 MB) 发送字节:20083083 (20.0 MB)
192.168.43.16 当前PC在局域网的IP地址为
使用umqtt实现接收者
esp32/subscriber.py from umqtt.simple import MQTTClient import time SERVER = '192.168.43.16' CLIENT_ID = 'PYESPCAR_A0' TOPIC = b'pyespcar_basic_control' def mqtt_callback(topic, msg): print('topic: {}'.format(topic)) print('msg: {}'.format(msg)) client = MQTTClient(CLIENT_ID, SERVER) client.set_callback(mqtt_callback) client.connect() client.subscribe(TOPIC) while True: # 查看是否有数据传入 # 有的话就执行 mqtt_callback client.check_msg() time.sleep(1)
使用umqtt实现发送者
esp32/publisher.py from umqtt.simple import MQTTClient import time SERVER = '192.168.43.16' CLIENT_ID = 'PYESPCAR_A0' # 客户端的ID TOPIC = b'pyespcar_basic_control' # TOPIC的ID client = MQTTClient(CLIENT_ID, SERVER) client.connect() while True: client.publish(TOPIC, 'helloworld') time.sleep(1)
注意在Esp32里面TOPIC
需要是bytes
类型。
综合实验
你可以结合paho-mqtt里面的发送者与esp32里面的接收者进行测试。
也可以使用paho-mqtt里面的接收者与esp32里面的发送者进行测试。