一、ESP8266配置MQTT固件
1. ESP8266-01模块与USB-TTL模块的连接方法
ESP8266-01 | USB-TTL CH340 |
3V3(要求高,稳定,否则AT无反应等) | 3V3 |
RST | 悬空(不接) |
EN | 3V3(可以串个电阻) |
TX | RX |
RX | TX |
IO0 | GND(为了烧写固件) |
IO2 | 悬空(不接) |
GND | GND |
2.到官网下载固件包和烧写软件
(1)、 AT固件包:AT固件汇总 | 安信可科技 (ai-thinker.com)
根据需求自己选择,我选的AT包如下图:
(2)、AT固件包烧写软件:开发工具清单 | 安信可科技 (ai-thinker.com)
找到烧写软件,如下图:
3.烧写AT固件
(1)、打开烧写软件,找到AT固件,软件配置,下载。
在此之前,可能有的ESP8266的波特率不是115200,而是9600,但烧录软件最低就是115200。可以通过下面这条AT指令设置为115200。(注意有的固件他的命令可能不一样,找到自己对应的即可。本文大部分AT指令可以在乐鑫官网找到,AT 命令集 — ESP-AT 用户指南 文档 (readthedocs-hosted.com))
AT+CIOBAUD=115200
具体烧写操作如下图所示:
(2)、点击start开始下载,出现等待上电复位字样,此处将3V3电源进行拔插即可下载,如下图。
将电源拔掉又插上。
固件烧录完毕,这样就可以用AT固件中的MQTT指令连接阿里云了,不必在去考虑什么解析库、MQTT-API等等,使项目变得简单。一条AT命令就可以完成服务器的连接、消息的订阅、消息的发布等等(这是MQTT协议,举个栗子:客户端A订阅了“王者农药”这样的主题(topic),另一个客户端B发布了一条以“王者农药”为主题,内容为“国服关羽请战”的消息,那么服务器会将这条消息转发给客户端A) 。
二、配置阿里云平台
1.创建产品和设备
先说一下:产品和设备的关系。产品是设备的种类。例如小汽车与特斯啦汽车,小汽车就是产品,特斯啦汽车就是设备。一个产品可以有多个设备。
(1)、配置产品和设备
具体步骤如下图:
1.找到阿里云物联网平台。
2.点击管理控制台。
3.点击公共实例。
4.创建产品。
5.编辑产品详细信息。
6.添加设备。
7.点击完成。
8.产品与设备创建完成。
三、ESP8266-01利用AT指令连接该设备。
1.拔掉IO0,现在烧写完就不用了,3V3电源拔掉在接上,相当于重启,其他不要动。
2.AT命令连接手机热点(2.4GHz)。
AT+CWMODE=1 //设置ESP8266为station模式,用来连接热点
AT+CWJAP="tcy","1878127692" //“热点名”,“热点密码”
3.AT命令配置MQTT相关信息。
打开阿里云设备页面,点击查看。
再点击MQTT连接参数的查看。
4.AT命令配置ESP8266的MQTT的用户参数。
AT+MQTTUSERCFG=0,1,“NULL”,“username”,“passwd”,0,0,“”;这个用户名和密码来自上一步阿里云的MQTT连接参数中。NULL的位置用来写客户ID,但这个AT有长短限制,写不了,下一条AT指令解决这个问题。
AT+MQTTUSERCFG=0,1,"NULL","ESP8266&k0sk8St9rwZ","9ea7df469b808007366afcb398f253b85fa462cf7d94ae43989771b373497a12",0,0,"" //0,1,“NULL”,“username”,“passwd”,0,0,“”
AT+MQTTCLIENTID=0,"clientId" ;将客户ID配置上,客户ID来自上一步阿里云的MQTT连接参数中。(注意,其中的逗号要加反斜杠)。
AT+MQTTCLIENTID=0,"k0sk8St9rwZ.ESP8266|securemode=2\,signmethod=hmacsha256\,timestamp=1706516241727|"
总体效果如下:
出现OK即可,这样MQTT的用户信息(三元组)就配置好了 。
5.AT命令连接阿里云服务器
AT+MQTTCONN=0,"mqttHostUrl",1883,1;这个mqttHostUrl来自上上一步阿里云的MQTT连接参数中,1883是MQTT的端口号,来自上上一步阿里云的MQTT连接参数中。
AT+MQTTCONN=0,"iot-06z00fn96hud09a.mqtt.iothub.aliyuncs.com",1883,1
这一步执行成功后,就连接上设备了,阿里云会显示设备在线(之前是未激活)。
四、发布和订阅数据
1、阿里云发布数据到ESP8266
之前说过,发布需要主题(topic),这个主题的位置如下图:
点击产品,再点击查看。
找到发布主题(topic),如下图:
使用AT命令让ESP8266订阅该主题,这样阿里云发布的数据ESP8266就可以收到。
AT+MQTTSUB=0,"topic",0; //订阅主题(topic)。其中的topic : /k0sk8y5eJp1/${deviceName}/user/get 中的${deviceName}是你的设备名称。
AT+MQTTSUB=0,"/k0sk8y5eJp1/ESP8266_No.1/user/get",0
发送成功后,在阿里云设备 ESP8266_No.1处点击查看。
在点击topic列表,可以看到已经订阅的topic,如下图。
点击右边的发送消息,编辑好信息,发送即可,如下图所示。
ESP8266会收到信息,如下图所示。
2.ESP8266上传数据到阿里云
找到刚刚的topic位置,上面找过,这里不再找了,如下图所示。
这个是上传数据到阿里云的发布topic。
使用AT指令发布数据到阿里云。
AT+MQTTPUB=0,"topic","data",0,0 //发布信息。topic: /k0sk8y5eJp1/${deviceName}/user/update/error 中的${deviceName}是你的设备名称。data :要发的数据 ,例如 :粤嵌--帖工--123456789。
AT+MQTTPUB=0,"/k0sk8y5eJp1/ESP8266_No.1/user/update/error","粤嵌--帖工--123456789",0,0
在阿里云查看信息。
五、温湿度功能
1.添加功能,具体步骤如下图所示。
下图有个标识符“temperature”,后面会用到。功能类型是属性。
2.找到上传属性的topic,刚刚创建的功能属于属性行列。如下图所示。
3.利用AT指令上传温湿度到阿里云:
AT+MQTTPUB=0,"topic","报文",0,0//topic : /sys/k0sk8y5eJp1/${deviceName}/thing/event/property/post,其中的${deviceName}是你的设备名称 , 报文:{params:{\"temperature\":66.6}} ,其中的temperature是你刚刚创建功能中的标识符,66.6是温度。
AT+MQTTPUB=0,"/sys/k0sk8y5eJp1/ESP8266_No.1/thing/event/property/post","{params:{\"temperature\":66.6}}",0,0