探究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.youkuaiyun.com/deimon/article/details/88720028

 

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

 

 

<think>好的,我需要帮助用户找到关于ESP32-S3使用ESP-IDF框架实现MQTT5协议的示例讲解或教程。首先,我需要回顾用户的问题和之前的引用内容。用户提到了三个引用:[1]是关于Walter开发板的硬件信息,[2]列出了ESP-IDFv5.1.1的协议示例,其中提到了mqtt5目录,[3]是关于ESP32连接AWS MQTT的经验。用户现在特别询问MQTT5的示例。根据引用[2],在ESP-IDF v5.1.1的examples/protocols目录下有一个mqtt5的示例。这可能就是用户需要的。需要确认这个示例是否存在,并指导用户如何查找和使用它。此外,引用[3]提到连接AWS时需要注意client_id等参数,可能对用户配置MQTT5有帮助。用户可能需要具体的步骤来找到示例代码,并了解如何配置和修改参数以适应他们的项目。此外,可能还需要相关资源链接或文档参考,比如ESP-IDF的官方文档或博客教程。 需要确保回答结构清晰,分步骤说明,并引用正确的来源。同时生成相关问题,帮助用户深入理解。</think>关于ESP32-S3使用ESP-IDF框架实现MQTT5协议的开发,可参考以下资源和步骤: ### 一、官方示例代码定位 在ESP-IDF v5.1.1框架中,存在专为MQTT5设计的示例代码: 1. 进入ESP-IDF安装目录:`esp-idf-v5.1.1/examples/protocols/mqtt5` 2. 该示例包含MQTT5协议的核心实现,支持以下功能: - 支持MQTT 5.0规范的遗嘱消息(Will Message) - 用户属性(User Properties)配置 - 增强型认证机制 - 流量控制特性[^2] ### 二、关键代码结构解析 ```c // 初始化MQTT客户端配置 esp_mqtt5_client_config_t mqtt5_cfg = { .broker.address.uri = "mqtts://your_broker:8883", .credentials = { .authentication = { .certificate = global_cacert_pem } }, .network.disable_auto_reconnect = false, .session.protocol_ver = MQTT_PROTOCOL_V_5 }; esp_mqtt_client_handle_t client = esp_mqtt5_client_init(&mqtt5_cfg); ``` 注意:需配置`client_id`字段(AWS等云平台强制要求),官方示例中可能未显式包含此参数[^3] ### 三、开发板适配要点 1. 针对ESP32-S3-WROOM-1-N16R2模组: - 启用Quad-SPI模式访问PSRAM - 配置WiFi双模(Station/AP)确保网络稳定性 - 建议使用`esp_http_client`组件实现OTA升级功能[^1] ### 四、调试建议 1. 启用IDF监视器查看MQTT5协议交互细节: ```bash idf.py -p /dev/ttyUSB0 monitor ``` 2. 重点关注MQTT5新增特性日志: ```log I (1526) MQTT5_EXAMPLE: Received USER_PROPERTY: [key=platform, value=esp32-s3] ``` ### 五、扩展学习资源 1. ESP-IDF官方MQTT文档:https://docs.espressif.com/projects/esp-idf/en/v5.1.1/esp32/api-reference/protocols/mqtt5.html 2. MQTT5协议规范中文版:https://mqtt.org/mq5-specification/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值