一、简介
esp8266系列作为低功耗高性价比的嵌入式无线网络控制模块,深受对嵌入式感兴趣的小伙伴的喜爱,是很多人理想的一款wifi模块的选择,不仅可以完成通信,还可以当单片机使用完成程序控制,可满足智能家居、远程控制、智慧医疗等物联网应用的需求,总结:功能强大,价格便宜;淘宝最便宜的ESP01s或12f系列五六块就可以搞定,对质量有要求的,在立创商城里也仅仅是十多块钱,玩法多样,本篇幅主要带大家讲解如何利用Arduino IDE+esp8266系列完成设备接入华为云物联网平台(IOTDA)并完成设备属性上报。
二、整体流程概述
1. 创建产品→注册设备→添加属性与命令
2.使用MQTT.fx进行测试
3.Arduino IDE+esp8266编程
三、具体操作步骤
1.创建产品→注册设备→添加属性
(1)登陆华为云物联网平台控制台:华为云物联网平台控制台(点击访问)
(2)创建产品
(3)注册设备
注意,此时获取了设备ID和密钥:
device_id: "61fb2d7fde9933029be5ff9e_esp8266_test01"
secret : "自己设定的密钥"
设备ID和密钥是生成MQTT三元组的关键,可以拿记事本保存一下,后续会用到
(4)添加属性与命令
(a)添加属性
(b)添加命令
2.使用MQTT.fx进行测试
(1)数据准备
在前面我们已经拿到了设备ID和密钥,我们通过下面的小工具来生成三元组:华为云设备接入提供的MQTT ClientId生成工具(点击访问)
此时我们获取到了MQTT三元组:
ClientId: 61fb2d7fde9933029be5ff9e_esp8266_test01_0_0_2022020310
Username:61fb2d7fde9933029be5ff9e_esp8266_test01
Password:xxxxxxxxxx计算出来的密钥xxxxxxxxxxxxxxxxxxxx
另外我们在控制台首页可以获取华为云MQTT平台的接入地址与端口:
MQTT_Address:iot-mqtts.cn-north-4.myhuaweicloud.com
MQTT_Port:1883
此时我们拿到的信息有:
ClientId: 61fb2d7fde9933029be5ff9e_esp8266_test01_0_0_2022020310
Username:61fb2d7fde9933029be5ff9e_esp8266_test01
Password:xxxxxxxxxx计算出来的密钥xxxxxxxxxxxxxxxxxxxx
MQTT_Address:iot-mqtts.cn-north-4.myhuaweicloud.com
MQTT_Port:1883
接下来我们就可使用MQTT.fx完成测试了。
2.下载并安装MQTT.fx
下载链接:华为云提供的MQTT.fx(点击访问)
更多使用信息可以参考华为云官方文档:使用MQTT.fx调测(点击访问)
3.进入MQTT.fx登陆MQTT客户端
填入上方我们拿到的信息后点击OK:
成功连接后右上角会出现一个绿灯,表示登陆成功,如果失败,请检查设备MQTT三元组或设备ID与密钥。
4.查看topic与数据格式
(1)常用的Topic:(参考官方文档:常用topic)
这里我们需要的是topic有
(a)设备上报属性:
$oc/devices/{device_id}/sys/properties/report(需将“{device_id}”替换为所需的设备id)
(b)平台下发命令:
$oc/devices/{device_id}/sys/commands/#(需将“{device_id}”替换为所需的设备id,“#”处原本为“request_id={request_id}”,我们在这里不做具体指定,用“#”代替,由系统自动生成一个request_id)
此处这个topic我们在应用端也会使用,完成对设备的命令下发,在后续文章做上位机开发时,如Android/C#/Java中会使用到,此处仅做了解。
(c)设备响应命令:
$oc/devices/{device_id}/sys/commands/response/request_id={request_id}
//此处的request_id={request_id}如果不需要可以替换为“#”,为了稳定与安全,我们此处保留,在设备端接收到命令后,解析出request_id,并以这个request_id进行上报
(2)数据格式
(a)设备上报属性
在官方手册中可以看到:华为云官方文档:设备属性上报
上述文档中滑到页尾可以看到数据格式示例,我们精简一下,只需要下面这些:
{"services":[{"service_id":"你的服务id","properties":{"你的属性名称": 设置的值}}]}
(b)平台下发命令
此时使用华为云物联网平台的在线调试,数据格式可以参考后续出的上位机开发教程,不在此处展开
(c)设备响应命令
{
"result_code": 0,
"response_name": "COMMAND_RESPONSE",
"paras": {
"result": "success"
}
}
//如果大家需求不高,可以直接上报一个空的数据
{
![article01_DecToIOT_PNG_05.png](/upload/article01_DecToIOT_PNG_05.png)
![07.png](/upload/07.png)
![06.png](/upload/06.png)
![05.png](/upload/05.png)
![04.png](/upload/04.png)
![03.png](/upload/03.png)
![02.png](/upload/02.png)
![01.png](/upload/01.png)
}
5. 使用MQTT.fx模拟esp8266完成设备属性上报
(a)打开华为云物联网平台的在线调试功能
(b)MQTT.fx填入设备属性上报的topic与数据内容
然后点击"Publish"就完成上报了,在MQTT.fx软件上没有任何反馈提示,但是在华为云物联网平台出我们可以看到上报的数据。
6. 使用MQTT.fx模拟esp8266完成设备命令接收与响应
(1)填写命令接收的topic,然后点击“Subscribe”
(2)华为云物联网平台的在线调试中发送命令
(3)查看接收的命令数据
此时我们可以注意到接收的topic中包含"request_id"
(4)命令响应
类似设备属性上报的流程,我们在MQTT.fx填入设备命令响应的topic与数据内容
【注意】
平台在下发命令之后,只有很短的时间(约20s)留给设备来响应,如果上述操作不及时,平台会认为同步命令设备响应超时,如果超时,请大家需要重新发送命令并重新响应。
3.Arduino IDE+esp8266编程
(1) Arduino IDE源码
代码链接:Gitee/IOT趣制作/ArduinoIDE-ESP8266-01-HUAWEIIOT