1. esp8266 MQTT固件烧录
在先前如果使用Arduino开发过后的esp8266可能已经无法使用AT指令,或者出厂固件不支持全部的MQTT功能,这里我们首先对esp8266进行MQTT固件烧录,如果平时一直在使用原厂固件开发,可跳过第一步,若AT指令无效再按第一步操作。
1)官网下载烧录工具和固件
烧录工具链接:
https://docs.ai-thinker.com/tools
固件链接:
https://docs.ai-thinker.com/%E5%9B%BA%E4%BB%B6%E6%B1%87%E6%80%BB
大家根据自己需要选择相应的版本,我使用的是esp01s,下载的是1471号
2)下载并打开固件烧录工具
https://docs.ai-thinker.com/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B72
3)进入烧录模式
连接usb转ttl模块,点击START,然后保持esp01s的IO0拉低后重新上电
4)按下图设置开始烧录
5)出现下图表示完成烧录
6)AT测试
打开串口助手,按下复位,输入命令”AT”,注意要取消勾选十六进制发送,勾选发送新行,然后检查串口打印工作状况,下图表示正常:
7)AT命令手册
接下来可能要用到的AT指令可以从官方手册中查看详细信息:
https://docs.espressif.com/projects/esp-at/zh_CN/latest/esp32/AT_Command_Set/MQTT_AT_Commands.html
2. 串口测试
1) 设置模块为STA模式
AT+CWMODE=1
2) 连接WiFi
AT+CWJAP="填写wifi名称","填写WiFi密码"
需略微等待片刻,等显示连接后再进行下面的操作
3) 设置MQTT的登陆用户名与密码
AT+MQTTUSERCFG=0,1,"NULL","填写用户名","填写密码",0,0,""
4) 设置MQTT的ClientID
用户名与密码为华为云MQTT三元组的相关信息,可以在下面的网站生成:
https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/
AT+MQTTCLIENTID=0,"填写ClientID"
华为云MQTT三元组的相关信息在上一步骤中获取的三元组中查看
5)设置MQTT接入地址
华为云物联网平台的地址,比如iot-mqtts.cn-north-4.myhuaweicloud.com,具体参考控制台首页的平台接入地址
AT+MQTTCONN=0,"填写MQTT接入的地址",1883,1
6)订阅主题
AT+MQTTSUB=0,"订阅的主题tpoic",1
完成属性上报的话需要先订阅设备属性上报的主题,此处topic可填写为:
$oc/devices/填写设备ID/sys/properties/report
7)上报数据
AT+MQTTPUB=0," 订阅的主题tpoic ","上报的json数据",0,0
订阅的主题:
$oc/devices/填写设备ID/sys/properties/report
上报的json数据:
{\"services\":[{\"service_id\":\"填写服务ID\"\,\"properties\":{\"填写设备属性\": 填写属性数据值}}]}
建议大家完成这步时,先使用MQTT.fx进行设备属性上报测试,确保数据无误正常上传,因为具体参数因个人的配置而异。
在完成上面的每一步时,系统都会打印一个OK,且连接wifi并接入华为云完成数据上报,记录如下:
此时我们可以查看华为云物联网平台的设备属性以及消息记录:
8)订阅平台下发命令的主题
AT+MQTTSUB=0,"订阅的主题topic ",1
此时我们在这填写的是平台下发命令的主题:
$oc/devices/填写设备ID/sys/commands/#
9)命令下发
进入华为云物联网平台的->监控运维->在线调试,选择在线的设备,填写命令参数,完成命令下发,此时设备会接收到下发的命令:
接收到命令后我们需要对命令进行响应,特别注意的是下面两步的操作时间建议接收到命令后的20s以内,超时后平台会认定为同步命令设备响应异常!
10)订阅设备响应的主题
AT+MQTTSUB=0,"$oc/devices/填写设备ID /sys/commands/response/request_id=填写接收到的request_id ",1
订阅设备响应平台命令主题,其中接收到的request_id在上图接收到的数据中,我们需要把它拿出来放到新订阅的tpoic的对应位置里
11)上报命令的响应
AT+MQTTPUB=0,"填写上面订阅的含request_id的完整主题","填写响应值,可以为空",0,0
例如:
AT+MQTTPUB=0,"$oc/devices/填写设备id/sys/commands/response/request_id=填写request_id ","",0,0
完成上面的这些操作后,我们可以看到华为云物联网平台已经完成了命令的接收与响应,接下来我们就可以通过使用其他MCU通过串口来实现华为云的相关操作了。