一、前言随着物联网(IoT)技术的快速发展,智能家居成为现代生活的一大亮点。通过将智能设备接入云平台,用户可以实现对设备的远程控制和管理,提高生活质量。而华为云作为领先的云服务平台,提供了功能强大的IoT设备接入与管理服务——IoTDA(IoT Device Access),为开发者和企业提供了便捷的物联网解决方案。本教程将带领大家手把手体验华为云的IoTDA服务,介绍如何通过华为云IoT平台完成智能家居设备的接入与管理。整个过程不需要真实的硬件设备,将通过MQTT客户端软件模拟设备,帮助初学者快速理解设备接入的流程。将一步步演示如何注册产品、创建设备、实现设备的接入、数据上传以及云端属性修改等操作,让你在最短的时间内掌握IoT平台的基本使用方法。无论你是物联网开发的新手,还是希望快速上手华为云IoT平台的用户,这篇教程都将为你提供清晰易懂的步骤和操作指南,让你轻松实现智能家居设备的上云。二、MQTT客户端软件整个过程需要用到的软件工具只有一个MQTT客户端。 这个软件将在本文章的附件里上传,方便大家下载。 二、上手实操华为云官网: cid:link_15打开官网,搜索物联网,就能快速找到 设备接入IoTDA。 3.1 物联网平台介绍华为云物联网平台(IoT 设备接入云服务)提供海量设备的接入和管理能力,将物理设备联接到云,支撑设备数据采集上云和云端下发命令给设备进行远程控制,配合华为云其他产品,帮助我们快速构筑物联网解决方案。使用物联网平台构建一个完整的物联网解决方案主要包括3部分:物联网平台、业务应用和设备。物联网平台作为连接业务应用和设备的中间层,屏蔽了各种复杂的设备接口,实现设备的快速接入;同时提供强大的开放能力,支撑行业用户构建各种物联网解决方案。设备可以通过固网、2G/3G/WIIF/5G、NB-IoT、Wifi等多种网络接入物联网平台,并使用LWM2M/CoAP、MQTT、HTTPS协议将业务数据上报到平台,平台也可以将控制命令下发给设备。业务应用通过调用物联网平台提供的API,实现设备数据采集、命令下发、设备管理等业务场景。 3.2 开通物联网服务地址: cid:link_12 开通免费单元。 点击 立即创建。 正在创建标准版实例,需要等待片刻。 创建完成之后,点击详情。 可以看到标准版实例的设备接入端口和地址。下面框起来的就是`端口号`和`域名` 点击实例名称,可以查看当前免费单元的配置情况。 开通之后,点击`接入信息`,也能查看接入信息。 我们当前设备准备采用MQTT协议接入华为云平台,这里可以看到MQTT协议的地址和端口号等信息。 总结:端口号: MQTT (1883)| MQTTS (8883) 接入地址: dab1a1f2c6.st1.iotda-device.cn-north-4.myhuaweicloud.com根据域名地址得到IP地址信息:打开Windows电脑的命令行控制台终端,使用ping 命令。ping一下即可。Microsoft Windows [版本 10.0.19045.5011](c) Microsoft Corporation。保留所有权利。C:\Users\Lenovo>ping dab1a1f2c6.st1.iotda-device.cn-north-4.myhuaweicloud.com正在 Ping dab1a1f2c6.st1.iotda-device.cn-north-4.myhuaweicloud.com [117.78.5.125] 具有 32 字节的数据:来自 117.78.5.125 的回复: 字节=32 时间=37ms TTL=44来自 117.78.5.125 的回复: 字节=32 时间=37ms TTL=44来自 117.78.5.125 的回复: 字节=32 时间=37ms TTL=44来自 117.78.5.125 的回复: 字节=32 时间=37ms TTL=44117.78.5.125 的 Ping 统计信息: 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),往返行程的估计时间(以毫秒为单位): 最短 = 37ms,最长 = 37ms,平均 = 37msC:\Users\Lenovo>MQTT协议接入端口号有两个,1883是非加密端口,8883是证书加密端口,单片机无法加载证书,所以使用1883端口合适。 3.3 创建产品链接:cid:link_0(1)创建产品 (2)填写产品信息根据自己产品名字填写,下面的设备类型选择自定义类型。 (3)产品创建成功 创建完成之后点击查看详情。 (4)添加自定义模型产品创建完成之后,点击进入产品详情页面,翻到最下面可以看到模型定义。模型简单来说: 就是存放设备上传到云平台的数据。当前设备需要与云平台交互的属性如下: 接下来就按照下面的属性创建 华为云平台的模型。上传到华为云服务器的属性:LED1 卧室灯 布尔类型LED2 客厅灯 布尔类型BH1750 环境光检测 浮点数SW1 风扇开关 布尔类型SW2 空调开关 布尔类型SW3 窗帘开关 布尔类型SW4 电视开关 布尔类型SHT30_T 环境温度 浮点数SHT30_H 环境湿度 浮点数 MQ2 烟雾检测 浮点数BEEP 蜂鸣器 布尔类型FLAME 火焰监测 布尔类型 先点击自定义模型。 【1】创建服务ID名字设置为: stm32然后点击新增属性。【2】LED1 卧室灯 布尔类型 【3】LED2 客厅灯 布尔类型【4】BH1750 环境光检测 浮点数 【5】SW1 风扇开关 布尔类型 【6】SW2 空调开关 布尔类型 【7】SW3 窗帘开关 布尔类型 【8】SW4 电视开关 布尔类型 【9】SHT30_T 环境温度 浮点数 【10】SHT30_H 环境湿度 浮点数 【11】MQ2 烟雾检测 浮点数 【12】BEEP 蜂鸣器 布尔类型 【13】FLAME 火焰监测 布尔类型 (5)创建完成 3.4 添加设备产品是属于上层的抽象模型,接下来在产品模型下添加实际的设备。添加的设备最终需要与真实的设备关联在一起,完成数据交互。(1)注册设备 (2)根据自己的设备填写 (3)保存设备信息创建完毕之后,点击保存并关闭,得到创建的设备密匙信息。该信息在后续生成MQTT三元组的时候需要使用。 内容信息。{ "device_id": "674b1361ef99673c8ad15dee_dev1", "secret": "12345678"} (4)设备创建完成 (5)设备详情点击详情。 下面是详情说明: 3.5 MQTT协议主题订阅与发布(1)MQTT协议介绍当前的设备是采用MQTT协议与华为云平台进行通信。MQTT是一个物联网传输协议,它被设计用于轻量级的发布/订阅式消息传输,旨在为低带宽和不稳定的网络环境中的物联网设备提供可靠的网络服务。MQTT是专门针对物联网开发的轻量级传输协议。MQTT协议针对低带宽网络,低计算能力的设备,做了特殊的优化,使得其能适应各种物联网应用场景。目前MQTT拥有各种平台和设备上的客户端,已经形成了初步的生态系统。MQTT是一种消息队列协议,使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合,相对于其他协议,开发更简单;MQTT协议是工作在TCP/IP协议上;由TCP/IP协议提供稳定的网络连接;所以,只要具备TCP协议栈的网络设备都可以使用MQTT协议。 本次设备采用的ESP8266就具备TCP协议栈,能够建立TCP连接,所以,配合STM32代码里封装的MQTT协议,就可以与华为云平台完成通信。 华为云的MQTT协议接入帮助文档在这里: cid:link_10 业务流程:(2)华为云平台MQTT协议使用限制描述限制支持的MQTT协议版本3.1.1与标准MQTT协议的区别支持Qos 0和Qos 1支持Topic自定义不支持QoS2不支持will、retain msgMQTTS支持的安全等级采用TCP通道基础 + TLS协议(最高TLSv1.3版本)单帐号每秒最大MQTT连接请求数无限制单个设备每分钟支持的最大MQTT连接数1单个MQTT连接每秒的吞吐量,即带宽,包含直连设备和网关3KB/sMQTT单个发布消息最大长度,超过此大小的发布请求将被直接拒绝1MBMQTT连接心跳时间建议值心跳时间限定为30至1200秒,推荐设置为120秒产品是否支持自定义Topic支持消息发布与订阅设备只能对自己的Topic进行消息发布与订阅每个订阅请求的最大订阅数无限制 (3)主题订阅格式帮助文档地址:cid:link_10对于设备而言,一般会订阅平台下发消息给设备 这个主题。设备想接收平台下发的消息,就需要订阅平台下发消息给设备 的主题,订阅后,平台下发消息给设备,设备就会收到消息。如果设备想要知道平台下发的消息,需要订阅上面图片里标注的主题。以当前设备为例,最终订阅主题的格式如下:$oc/devices/{device_id}/sys/messages/down 最终的格式:$oc/devices/674b1361ef99673c8ad15dee_dev1/sys/messages/down (4)主题发布格式对于设备来说,主题发布表示向云平台上传数据,将最新的传感器数据,设备状态上传到云平台。这个操作称为:属性上报。帮助文档地址:cid:link_6 根据帮助文档的介绍, 当前设备发布主题,上报属性的格式总结如下:发布的主题格式:$oc/devices/{device_id}/sys/properties/report 最终的格式:$oc/devices/674b1361ef99673c8ad15dee_dev1/sys/properties/report发布主题时,需要上传数据,这个数据格式是JSON格式。上传的JSON数据格式如下:{ "services": [ { "service_id": <填服务ID>, "properties": { "<填属性名称1>": <填属性值>, "<填属性名称2>": <填属性值>, .......... } } ]}根据JSON格式,一次可以上传多个属性字段。 这个JSON格式里的,服务ID,属性字段名称,属性值类型,在前面创建产品的时候就已经介绍了,不记得可以翻到前面去查看。比如:根据这个格式,组合一次上传的属性数据:{"services": [{"service_id": "stm32","properties":{"LED1":0,"LED2":0,"BH1750":24.5,"SW1":0,"SW2":0,"SW3":0,"SW4":0,"SHT30_T":30.2,"SHT30_H":24.5,"MQ2":10.1,"BEEP":0,"FLAME":0}}]} 3.6 MQTT三元组MQTT协议登录需要填用户ID,设备ID,设备密码等信息,就像我们平时登录QQ,微信一样要输入账号密码才能登录。MQTT协议登录的这3个参数,一般称为MQTT三元组。 接下来介绍,华为云平台的MQTT三元组参数如何得到。 (1)MQTT服务器地址要登录MQTT服务器,首先记得先知道服务器的地址是多少,端口是多少。帮助文档地址:cid:link_1 MQTT协议的端口支持1883和8883,它们的区别是:8883 是加密端口更加安全。但是单片机上使用比较困难,所以当前的设备是采用1883端口进连接的。根据上面的域名和端口号,得到下面的IP地址和端口号信息: 如果设备支持填写域名可以直接填域名,不支持就直接填写IP地址。 (IP地址就是域名解析得到的)华为云的MQTT服务器地址:117.78.5.125华为云的MQTT端口号:1883 如何得到IP地址?如何域名转IP? 打开Windows的命令行输入以下命令。ping ad635970a1.st1.iotda-device.cn-north-4.myhuaweicloud.com (2)生成MQTT三元组华为云提供了一个在线工具,用来生成MQTT鉴权三元组: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com打开这个工具,填入设备的信息(也就是刚才创建完设备之后保存的信息),点击生成,就可以得到MQTT的登录信息了。下面是打开的页面: 填入设备的信息: (上面两行就是设备创建完成之后保存得到的)直接得到三元组信息。 得到三元组之后,设备端通过MQTT协议登录鉴权的时候,填入参数即可。ClientId 674b1361ef99673c8ad15dee_dev1_0_0_2024113013Username 674b1361ef99673c8ad15dee_dev1Password 8e22b61b0e6bf9f3911782b0e1e1cdcea2ab0952b7af6b34aa0d707732ec2f7a 3.7 模拟设备登录测试经过上面的步骤介绍,已经创建了产品,设备,数据模型,得到MQTT登录信息。 接下来就用MQTT客户端软件模拟真实的设备来登录平台。测试与服务器通信是否正常。 (1)填入登录信息打开MQTT客户端软件,对号填入相关信息(就是上面的文本介绍)。然后,点击登录,订阅主题,发布主题。 点击之后的效果: (2)打开网页查看完成上面的操作之后,打开华为云网页后台,可以看到设备已经在线了。 点击详情页面,可以看到上传的数据: 到此,云平台的部署已经完成,设备已经可以正常上传数据了。 (3)MQTT登录测试参数总结MQTT服务器: 117.78.5.125MQTT端口号: 1883//物联网服务器的设备信息#define MQTT_ClientID "674b1361ef99673c8ad15dee_dev1_0_0_2024113013"#define MQTT_UserName "674b1361ef99673c8ad15dee_dev1"#define MQTT_PassWord "8e22b61b0e6bf9f3911782b0e1e1cdcea2ab0952b7af6b34aa0d707732ec2f7a"//订阅与发布的主题#define SET_TOPIC "$oc/devices/674b1361ef99673c8ad15dee_dev1/sys/messages/down" //订阅#define POST_TOPIC "$oc/devices/674b1361ef99673c8ad15dee_dev1/sys/properties/report" //发布发布的数据:{"services": [{"service_id": "stm32","properties":{"LED1":0,"LED2":0,"BH1750":24.5,"SW1":0,"SW2":0,"SW3":0,"SW4":0,"SHT30_T":30.2,"SHT30_H":24.5,"MQ2":10.1,"BEEP":0,"FLAME":0}}]} 3.8 项目凭证接下来开发上位机,需要使用云平台的API接口,这些接口都需要token进行鉴权,需要使用项目凭证 这个参数。【1】获取项目凭证 点击左上角用户名,选择下拉菜单里的我的凭证项目凭证:ff981a50957a403cb68d906e0d424eed 3.9 创建IAM账户创建一个IAM账户,因为接下来开发上位机,需要使用云平台的API接口,这些接口都需要token进行鉴权。简单来说,就是身份的认证。 调用接口获取Token时,就需要填写IAM账号信息。所以,接下来演示一下过程。地址: cid:link_5 鼠标放在左上角头像上,在下拉菜单里选择统一身份认证。 点击右上角创建用户。 填写用户名和密码信息: 继续点击下一步: 然后点击创建用户。 创建成功: 创建完成 用户信息如下:主用户名 xiao_ping_pingIAM用户 ds_abc密码 DS12345678 3.10 获取影子数据帮助文档:cid:link_7设备影子介绍:设备影子是一个用于存储和检索设备当前状态信息的JSON文档。每个设备有且只有一个设备影子,由设备ID唯一标识设备影子仅保存最近一次设备的上报数据和预期数据无论该设备是否在线,都可以通过该影子获取和设置设备的属性简单来说:设备影子就是保存,设备最新上传的一次数据。我们设计的软件里,如果想要获取设备的最新状态信息,就采用设备影子接口。 如果对接口不熟悉,可以先进行在线调试:https://apiexplorer.developer.huaweicloud.com/apiexplorer/doc?product=IoTDA&api=ShowDeviceShadow 在线调试接口,可以请求影子接口,了解请求,与返回的数据格式。 调试完成看右下角的响应体,就是返回的影子数据。 这里的工程ID要选择正确: 点击调试之后: 设备影子接口返回的数据如下:{ "device_id": "674b1361ef99673c8ad15dee_dev1", "shadow": [ { "service_id": "stm32", "desired": { "properties": null, "event_time": null }, "reported": { "properties": { "LED1": 18.1, "LED2": 16.2, "BH1750": 34.5, "SW1": 1, "SW2": 1, "SW3": 1, "SW4": 1, "SHT30_T": 20.2, "SHT30_H": 34.5, "MQ2": 10.1, "BEEP": 1, "FLAME": 1 }, "event_time": "20241130T134755Z" }, "version": 7 } ]} 调试成功之后,可以得到访问影子数据的真实链接,接下来的代码开发中,就采用Qt写代码访问此链接,获取影子数据,完成上位机开发。 链接如下:https://5a00dd0860.st1.iotda-app.cn-north-4.myhuaweicloud.com:443/v5/iot/ff981a50957a403cb68d906e0d424eed/devices/674b1361ef99673c8ad15dee_dev1/shadow 3.11 修改设备属性地址: cid:link_8接口说明设备的产品模型中定义了物联网平台可向设备下发的属性,应用服务器可调用此接口向指定设备下发属性。平台负责将属性以同步方式发送给设备,并将设备执行属性结果同步返回。修改设备属性的接口,可以让服务器给设备下发指令,如果需要控制设备。在线调试地址:https://apiexplorer.developer.huaweicloud.com/apiexplorer/doc?product=IoTDA&api=UpdateProperties 修改设备属性是属于同步命令,需要设备在线才可以进行调试,先使用MQTT客户端登录服务器,模拟设备上线。然后进行调试,测试数据远程下发给设备。 【1】利用MQTT客户端先登录设备 (这是同步命令,必须在线才能调试) 【2】点击调试 填入的测试数据:{"services":{"SW1":1}} 点击调试之后。 【4】可以看到,MQTT客户端软件上已经收到了服务器下发的消息 调试成功之后,可以得到修改设备属性的真实链接,接下来的代码开发中,就采用Qt写代码访问此链接,向设备发送控制命令,完成上位机开发。 https://5a00dd0860.st1.iotda-app.cn-north-4.myhuaweicloud.com:443/v5/iot/ff981a50957a403cb68d906e0d424eed/devices/674b1361ef99673c8ad15dee_dev1/properties 由于是同步命令,服务器必须要收到设备的响应才能顺利完成一个流程(当然,设备不回应也没影响),设备响应了服务器才能确定数据下发成功。MQTT设备端如何响应呢?设备响应格式说明:cid:link_9 三、视频教程也可以看视频学习华为云IOT平台的使用过程:华为云物联网平台视频1:cid:link_13华为云物联网平台视频2:cid:link_14 我正在参加【案例共创】第1期 书写云产品应用构建开发最佳实践/评测,共创官方文档:cid:link_4
DS小龙哥
发表于2025-01-23 16:39:47
2025-01-23 16:39:47
最后回复
97