陈拓 2021/12/08-2021/12/08
1. 简介
- 官方文档
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/protocols/mqtt.html
- 官方例程
https://gitee.com/EspressifSystems/esp-idf/tree/master/examples/protocols/mqtt/tcp
ESP-MQTT sample application
此示例连接到使用idf.py menuconfig(使用mqtt tcp transport)选择的代理URI,并作为一个示例,订阅/取消订阅并发送有关特定主题的消息。
它使用实现MQTT客户端的ESP-MQTT库连接到MQTT代理。
作为测试例程中使用了公共代理:
https://mqtt.eclipseprojects.io/
- 连接私有MQTT服务器
在官方例程的基础上我们修改程序连接到我们自己的MQTT服务器。
MQTT服务器的搭建见《树莓派+Ubuntu 20.04安装Mosquitto MQTT服务》
https://zhuanlan.zhihu.com/p/442570279
https://blog.csdn.net/chentuo2000/article/details/121785191
2. 开发环境
《Win10启用Linux子系统安装Ubuntu》
https://blog.csdn.net/chentuo2000/article/details/112131624
《用乐鑫国内Gitee镜像搭建ESP32开发环境》
https://blog.csdn.net/chentuo2000/article/details/113424934
3. 构建项目
- 复制官方例程
将官方例子项目复制到ESP-IDF开发工具之外,更名为esp32_mqtt_tcp:
cp -r ~/esp/esp-idf/examples/protocols/mqtt/tcp ~/esp/esp32_mqtt_tcp
cd ~/esp/esp32_mqtt_tcp
- 项目树
- 刷新esp-idf环境
get_idf
- 配置项目
idf.py menuconfig
在Example Connection Configuration菜单下配置WiFi或以太网。
在这里输入WiFi的SSID和密码:
保存,退出。
- 编译项目
idf.py build
- 烧写项目
连接设备时我PC将USB-SERIAL识别为COM3。
idf.py -p /dev/ttyS3 -b 115200 flash
- 查看串口信息
按一下开发板上的RST按钮:
发布和订阅都成功了。
这里使用的是用于测试的公共代理,下面我们使用自己的代理。
4. 连接到我们自己的MQTT服务器
在《树莓派+Ubuntu 20.04安装Mosquitto MQTT服务》
https://zhuanlan.zhihu.com/p/442570279
https://blog.csdn.net/chentuo2000/article/details/121785191
一文中我们已经搭建好了自己的MQTT服务器。下面我们就连接它。
- 修改代码
找到下面这句代码:
esp_mqtt_client_config_t mqtt_cfg = {
.uri = CONFIG_BROKER_URL,
};
修改成:
esp_mqtt_client_config_t mqtt_cfg = {
//.uri = CONFIG_BROKER_URL, // CONFIG_BROKER_URL "mqtt://mqtt.eclipseprojects.io"
.uri = "mqtt://192.168.0.8", // 可以在这里直接写,会覆盖在make menuconfig中的配置
//.host = "192.168.137.3", // MQTT服务器IP,uri或者host选用一个即可
.port=1883, // MQTT服务器端口
.username = "ct", // MQTT用户名
.password = "xxxxxxxx", // MQTT密码
};
- 编译、烧写
- 测试
在树莓派上查看MQTT服务日志:
在串口查看ESP32的信息: