ESP8266+ArduinoIDE接入华为云物联网平台

ESP8266+ArduinoIDE接入华为云物联网平台

一、简介

esp8266系列作为低功耗高性价比的嵌入式无线网络控制模块,深受对嵌入式感兴趣的小伙伴的喜爱,是很多人理想的一款wifi模块的选择,不仅可以完成通信,还可以当单片机使用完成程序控制,可满足智能家居、远程控制、智慧医疗等物联网应用的需求,总结:功能强大,价格便宜;淘宝最便宜的ESP01s或12f系列五六块就可以搞定,对质量有要求的,在立创商城里也仅仅是十多块钱,玩法多样,本篇幅主要带大家讲解如何利用Arduino IDE+esp8266系列完成设备接入华为云物联网平台(IOTDA)并完成设备属性上报。

二、整体流程概述

1. 创建产品→注册设备→添加属性与命令

2.使用MQTT.fx进行测试

3.Arduino IDE+esp8266编程

三、具体操作步骤

1.创建产品→注册设备→添加属性

(1)登陆华为云物联网平台控制台:华为云物联网平台控制台(点击访问)

article01_DecToIOT_PNG_01

(2)创建产品

article01_DecToIOT_PNG_02
article01_DecToIOT_PNG_03
article01_DecToIOT_PNG_04

(3)注册设备

article01_DecToIOT_PNG_05
article01_DecToIOT_PNG_06
article01_DecToIOT_PNG_07
注意,此时获取了设备ID和密钥:
device_id: "61fb2d7fde9933029be5ff9e_esp8266_test01"
secret : "自己设定的密钥"
设备ID和密钥是生成MQTT三元组的关键,可以拿记事本保存一下,后续会用到

(4)添加属性与命令

(a)添加属性

article01_DecToIOT_PNG_08
article01_DecToIOT_PNG_09

(b)添加命令

18
19_2

2.使用MQTT.fx进行测试

(1)数据准备

在前面我们已经拿到了设备ID和密钥,我们通过下面的小工具来生成三元组:华为云设备接入提供的MQTT ClientId生成工具(点击访问)
article01_DecToIOT_PNG_10
此时我们获取到了MQTT三元组:
ClientId: 61fb2d7fde9933029be5ff9e_esp8266_test01_0_0_2022020310
Username:61fb2d7fde9933029be5ff9e_esp8266_test01
Password:xxxxxxxxxx计算出来的密钥xxxxxxxxxxxxxxxxxxxx
另外我们在控制台首页可以获取华为云MQTT平台的接入地址与端口:
20
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调测(点击访问)
21

3.进入MQTT.fx登陆MQTT客户端

填入上方我们拿到的信息后点击OK:
article01_DecToIOT_PNG_13
article01_DecToIOT_PNG_12
成功连接后右上角会出现一个绿灯,表示登陆成功,如果失败,请检查设备MQTT三元组或设备ID与密钥。

4.查看topic与数据格式

(1)常用的Topic:(参考官方文档:常用topic

22
这里我们需要的是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)设备上报属性

在官方手册中可以看到:华为云官方文档:设备属性上报
23
上述文档中滑到页尾可以看到数据格式示例,我们精简一下,只需要下面这些:

{"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)打开华为云物联网平台的在线调试功能

26

(b)MQTT.fx填入设备属性上报的topic与数据内容

27
然后点击"Publish"就完成上报了,在MQTT.fx软件上没有任何反馈提示,但是在华为云物联网平台出我们可以看到上报的数据。
28
29_2

6. 使用MQTT.fx模拟esp8266完成设备命令接收与响应

(1)填写命令接收的topic,然后点击“Subscribe”

30

(2)华为云物联网平台的在线调试中发送命令

31

(3)查看接收的命令数据

32
此时我们可以注意到接收的topic中包含"request_id"
33

(4)命令响应

类似设备属性上报的流程,我们在MQTT.fx填入设备命令响应的topic与数据内容
34
35
【注意】
平台在下发命令之后,只有很短的时间(约20s)留给设备来响应,如果上述操作不及时,平台会认为同步命令设备响应超时,如果超时,请大家需要重新发送命令并重新响应。

3.Arduino IDE+esp8266编程

(1) Arduino IDE源码

代码链接:Gitee/IOT趣制作/ArduinoIDE-ESP8266-01-HUAWEIIOT

esp8266-huawei-iot.PNG

(2) 运行结果

36

Licensed under CC BY-NC-SA 4.0