ESP32快速开发之MQTT协议

软件准备:upycraft,EMQ(MQTT服务器)

ps:看了很多文章,在Linux下使用mosqitto来充当Broker,实测无跨平台实现与ESP32通信。若君已实现,烦请赐教。

一:MQTT简简简介

采用MQTT通讯时必须包含三个部分:服务器,发布端,订阅端。

发布端发布带topic的消息给服务器,服务器将消息转发给订阅了此topic的终端,三者可以在一台机器上实现。

二:EMQ下载,安装,查看

下载:(仅仅在测试使用时推荐Windows端,后期建议部署在Linux服务器上)链接:https://www.emqx.io/downloadsESP32快速开发之MQTT协议_第1张图片

安装:

解压完成后,将生成的lisence放进etc文件夹,再通过cmd命令进入解压出来的“bin”文件夹中,输入emqx start。

登录管理窗口(浏览器输入:http://127.0.0.1:18083/)账号:admin,密码:public。查看连接情况!

注意每次通信之前先启动,为了方便写成脚本,可参照修改路径:

D:
cd \installdir\EQM\emqx\bin
emqx start
echo "emqx start ok!"
pause

 

三:发布端和订阅端代码

代码主要分为三个部分:1.连接wifi,2.发布端,3订阅端

参考:ESP32 micropython 开发手册

1.连接wifi:

#sta.py
def do_connect():
    import network
    wifi = network.WLAN(network.STA_IF)
    wifi.active(True)
    if not wifi.isconnected():
        print('connecting to network...')
        wifi.connect('Phd_2.4G', '15957445992')
        while not wifi.isconnected():
            pass
    print('network config:', wifi.ifconfig())
#do_connect()

2.发布端:

#publisher.py
from umqtt.simple import MQTTClient
import time
import sta
import simple

sta.do_connect()
SERVER = '192.168.0.107'
CLIENT_ID = 'pub'
TOPIC = b'h9'
def mqtt_callback(topic, msg):
    print('topic: {}'.format(topic))
    print('msg: {}'.format(msg))
    
client = MQTTClient(CLIENT_ID, SERVER)
client.connect()

i = 0
while True:
    client.publish(TOPIC, 'helloworld')
    print ("publishing[%d]......" % (i))
    i = i+1
    time.sleep(1)










3.订阅端

#subscriber.py
from umqtt.simple import MQTTClient
import time
import sta
import simple

sta.do_connect()
SERVER = '192.168.0.107'
CLIENT_ID = 'sub'
TOPIC = b'h9'
def mqtt_callback(topic, msg):
    print('topic: {}'.format(topic),end= ' ')
    print('msg: {}'.format(msg),end = ' ')
    
client = MQTTClient(CLIENT_ID, SERVER)
client.set_callback(mqtt_callback)
client.connect()
client.subscribe(TOPIC)
i = 0
while True:
    # 查看是否有数据传入
    # 有的话就执行 mqtt_callback
    print("\nsublishing[%d]:......"%(i),end= ' ')
    i = i+1
    client.check_msg()
    time.sleep(1)

将sta.py分别保存在两块ESP32中,先运行订阅端,再运行发布端。注意修改服务器ip。

 

 

 

PS:在使用ESP32时经常发生"reflush tree false"等错误,甚至无法连接上板子,建议在开发时将文件save as到其他文件夹中(默认保存在板子上),再擦除flash,重新烧写固件(按住板子boot按键)。

你可能感兴趣的:(ESP32,ESP32,mosquitto,MQTT,物联网,MQTT)