探究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中使用MQTT5时,如何配置CMakeLists.txt以包含mqtt_client.h所需的依赖模块。我需要结合之前的对话和用户提供的站内引用来给出准确的回答。首先,用户之前的问题是关于MQTT5在CMakeLists中的依赖模块,我之前的回答已经列出了必要的组件,比如mqtt、esp-tls等。现在用户再次询问,可能是在确认或者需要更详细的信息,特别是关于mqtt_client.h的具体依赖。用户提供的站内引用中,引用[1]提到了一个开源SDK的CMake配置,用户只需要添加子目录并链接库。引用[2]显示了一个CMakeLists中的COMPONENT_REQUIRES包含多个组件,如esp32-camera、nvs_flash等。这可能提示用户希望了解类似的结构,但需要针对MQTT5进行调整。 我需要确保回答中包含mqtt_client.h所需的模块,这可能包括mqtt组件,因为该头文件属于mqtt库。此外,之前的回答提到的esp-tls、esp_event、tcp_transport等仍然是基础依赖。用户可能还需要网络相关的组件,如wifi_provisioning和nvs_flash,特别是如果项目使用WiFi连接的话。另外,需要验证ESP-IDF的版本是否支持MQTT5,这在之前的回答中提到过,用户可能需要注意这一点。同时,确保代码中包含正确的头文件,比如#include"mqtt_client.h",而不仅仅是esp_mqtt.h,可能之前有误,需要修正。 用户可能还关心如何将这些依赖正确写入CMakeLists.txt,特别是如何设置REQUIRES部分。需要提供具体的示例,比如idf_component_register中的配置,并引用之前的回答和站内例子来支持。 最后,生成的相关问题需要与当前主题相关,比如SSL配置、消息长度、共享订阅等,这些都是MQTT5的常见问题,可以引导用户进一步探索。</think>### ESP32-S3中使用MQTT5的CMakeLists依赖配置 在ESP32-S3项目中引入`mqtt_client.h`并实现MQTT5协议时,CMakeLists需包含以下关键依赖模块: #### 核心依赖模块 1. **MQTT协议栈** ```cmake set(requires mqtt) # 提供MQTT5协议实现及mqtt_client.h头文件[^1] ``` 2. **网络传输层** ```cmake set(requires ${requires} tcp_transport) # TCP/UDP基础传输能力 set(requires ${requires} esp-tls) # TLS加密支持 ``` 3. **事件系统** ```cmake set(requires ${requires} esp_event) # 事件循环管理[^2] ``` #### 网络连接扩展 ```cmake if (USE_WIFI) set(requires ${requires} wifi_provisioning wpa_supplicant) endif() set(requires ${requires} nvs_flash) # 存储网络凭证 ``` #### 完整CMake配置示例 ```cmake # 组件声明 idf_component_register( SRC_DIRS "src" INCLUDE_DIRS "include" REQUIRES mqtt esp-tls esp_event tcp_transport nvs_flash ) ``` #### 代码验证要点 1. 在代码中正确包含头文件: ```c #include "mqtt_client.h" // MQTT5核心接口[^1] ``` 2. 确认ESP-IDF版本满足: $$ \text{IDF版本} \geq v4.4 $$ ### 依赖关系拓扑 $$ \begin{array}{ccc} \text{mqtt} & \rightarrow & \text{esp-tls} \\ \downarrow & & \downarrow \\ \text{tcp\_transport} & \leftarrow & \text{esp\_event} \\ \end{array} $$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值