探究ESP32S【第五天】——初试mqtt(3)

昨天貌似是完成了连接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

这几篇也算是为我解惑了吧。

猜你喜欢

转载自blog.csdn.net/zhangyufeikk/article/details/93465644
今日推荐