软件准备:upycraft,EMQ(MQTT服务器)
ps:看了很多文章,在Linux下使用mosqitto来充当Broker,实测无跨平台实现与ESP32通信。若君已实现,烦请赐教。
一:MQTT简简简介
采用MQTT通讯时必须包含三个部分:服务器,发布端,订阅端。
发布端发布带topic的消息给服务器,服务器将消息转发给订阅了此topic的终端,三者可以在一台机器上实现。
二:EMQ下载,安装,查看
下载:(仅仅在测试使用时推荐Windows端,后期建议部署在Linux服务器上)链接:https://www.emqx.io/downloads
安装:
解压完成后,将生成的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按键)。
