ESP32使用MicroPython:MQTT

2022/03/13 19:59
阅读数 2.3K

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里面的发送者进行测试。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部