本文章 来自原创专栏《ESP32教学专栏 (基于ESP-IDF)》,讲解如何使用 ESP-IDF 构建 ESP32 程序,发布文章并会持续为已发布文章添加新内容! 每篇文章都经过了精打细磨!
↓↓↓通过下方对话框进入专栏目录页↓↓↓
优快云 请求进入目录 _ O x
是否进入ESP32教学导航(基于ESP-IDF)?
确定
一、MQTT简介
MQTT协议(消息队列遥测传输协议),是一种基于publish/subscribe(即发布与订阅)模式的轻量通讯协议。此协议基于TCP/IP。
MQTT是一种低开销、低带宽占用的即时通讯协议。轻量、简单、开放和易于实现的。其最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。使其在物联网、小型设备、移动应用等方面有较广泛的应用。如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。
二、ESP-MQTT介绍
1、简介
ESP-MQTT
是MQTT
协议的一个实现
特性:
- 支持基于
TCP
、SSL
(使用mbedtls
)、Websocket
、Websocket Secure
的MQTT实现。 - 配置方便,代码极少
- 面向对象设计,多实例
- 功能齐全的客户端实现。支持订阅、发布、认证、遗嘱、保持ping和3个QoS级别
2、配置
① URI
目前支持的协议:
协议 | URI schemes |
---|---|
TCP | mqtt |
SSL | mqtts |
Websocket | ws |
Websocket Secure | wss |
URI示例
① mqtt://mqtt.eclipseprojects.io
:基于TCP协议的MQTT,端口号为默认1883
② mqtt://mqtt.eclipseprojects.io:1884
:同上,端口号自定义为1884
③ mqtt://用户名:密码@mqtt.eclipseprojects.io:1884
:同上,再加上用户名和密码
④ mqtts://mqtt.eclipseprojects.io
:基于SSL,端口默认8883,也可以自定义端口号如上
⑤ ws://mqtt.eclipseprojects.io:80/mqtt
:基于WebSocket
⑥ wss://mqtt.eclipseprojects.io:443/mqtt
:基于Websocket Secure
一个简单的示例:
// 创建MQTT配置,最简单的配置只需要填写URI
const esp_mqtt_client_config_t mqtt_cfg = {
.uri = "mqtt://mqtt.eclipseprojects.io",
};
// 传递配置,创建一个MQTT客户端
esp_mqtt_client_handle_t client = esp_mqtt_client_init(&mqtt_cfg);
// 注册事件
// 注:每个mqtt客户端都携带一个自己的事件循环,esp-mqtt并没有使用默认事件循环
esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID, EventHandle函数, client);
// 启动mqtt客户端
esp_mqtt_client_start(client);
② SSL
待续
③ 遗嘱
MQTT允许在客户非正常断开连接时,通过遗嘱(LWT)消息通知其他客户。
配置在esp_mqtt_client_config_t
结构体中lwt_
开头的配置:
lwt_topic
: 遗嘱topic。lwt_msg
: 遗嘱内容。lwt_msg_len
:遗嘱内容长度。
如果遗嘱字符串不是标准C字符串(以’\0’结尾),则此项必填。lwt_qos
: 遗嘱的消息服务质量lwt_retain
: 消息保留标志。
④ 其余配置
其余配置请查看官方文档中对于esp_mqtt_client_config_t
的说明&#