昨天貌似是完成了连接mqtt的服务器,如图是昨天的数组越界的问题答案,虽然不知道具体的原因
今天看看能不能订阅和发布消息。
进入这个网页http://www.hivemq.com/demos/websocket-client/ 进行mqtt的连接、发布、订阅操作。
但是,connect没反应是怎么回事?分析分析看看,使我哪个url不对么?
怕辽怕辽~对于js小白来说,有点难度。(已经用笨的方法,直接把数据填到app.js中,还是会报其他各种undefined)
仔细想想:http://www.hivemq.com/demos/websocket-client/这个client,其实它就是用网页打开的客户端,如果我自己用电脑上的python写个mqtt的客户端,一样也能publish和subscriber。试试看~
先按照第三天的步骤,给电脑上的python里添加另一个库:paho-mqtt:pip3 install paho-mqtt
然后直接搬砖,电脑上的代码:
mqtt_servo.py
import paho.mqtt.client as mqtt
import time
HOST_IP = 'broker.hivemq.com' # Server的IP地址
HOST_PORT = 1883 # mosquitto 默认打开端口
CLIENT_ID = 'test621'
TOPIC_ID = 'mrjiale' # TOPIC的ID
# 创建一个客户端
client = mqtt.Client(client_id=CLIENT_ID)
# 连接到服务器
client.connect(HOST_IP, HOST_PORT, 60)
startmsg = 'start'
stopmsg = 'stop'
while True:
client.publish(TOPIC_ID, startmsg)
time.sleep(2)
client.publish(TOPIC_ID, stopmsg)
time.sleep(2)
ESP32上的主要代码:
subcriber.py
from umqtt import MQTTClient
import time
import led
SERVER = 'broker.hivemq.com'
CLIENT_ID = 'test620'
TOPIC = b'mrjiale'
def serve_start():
led.led2_on()
def serve_stop():
led.led2_off()
def mqtt_callback(topic, msg):
global TOPIC
print('topic: {}'.format(topic))
print('msg: {}'.format(msg))
if msg == b"start":
serve_start()
if msg == b"stop":
serve_stop()
def mqtt_connect():
client = MQTTClient(CLIENT_ID, SERVER, port=1883)
client.set_callback(mqtt_callback)
client.connect()
print("mqtt connect success")
client.subscribe(TOPIC)
while True:
client.check_msg()
time.sleep(1)
print("wait ...")
其实昨晚之后才发现,client_id需要不相同才可以,只需要订阅或发布同一条topic即可完成一次通讯。当电脑上的id和ESP32上的id产生冲突时,ESP32上的会自动掉线报错。—_—||
虽然会用了,但是也是稀里糊涂的,尤其是mqtt里的那些属性,还是找几篇帖子学习一下吧。
mqtt入门及介绍:https://www.cnblogs.com/hayasi/p/7708962.html
mqtt详细介绍:https://www.jianshu.com/p/ecde412d2eeb
mqtt特殊属性:https://blog.csdn.net/deimon/article/details/88720028
这几篇也算是为我解惑了吧。