华为云
一、华为云概述
华为云物联网平台设备接入云服务(IoTDA)提供海量设备的接入和管理能力,将物理设备联接到云,支撑设备数据采集上云和云端下发命令给设备进行远程控制,配合华为云其他产品,帮助您快速构筑物联网解决方案。
官网地址:设备接入-控制台 (huaweicloud.com)
注意:华为的账号分为华为账号 华为云账号,IAM 账号,注意区别
二、演示功能概述
接下来为大家介绍 Air780EP 如何接入华为云,并且会介绍如何进行华为云的上下行交互处理。
1. 模块端每隔 2 秒发布一次 qos 为 1 的消息到平台端 2. 平台端下发消息,控制模块端灯的亮灭
三、准备硬件环境
参考:硬件环境清单第二章节内容,准备以及组装好硬件环境。。
四、软件环境
“凡事预则立,不预则废。”在详细阐述本功能示例之前,我们需先精心筹备好以下软件环境。
1. Luatools工具;
2. 内核固件文件(底层core固件文件):LuatOS-SoC_V2002_Air780EP;参考项目使用的内核固件;
3. luatos需要的脚本和资源文件右键点我,另存为,下载完整压缩文件包
lib脚本文件:使用Luatools烧录时,勾选 添加默认lib 选项,使用默认lib脚本文件;
准备好软件环境之后,接下来查看如何烧录项目文件到Air780EP核心板,将本篇文章中演示使用的项目文件烧录到Air780EP核心板中。
五、华为云软硬件资料
5.1 iotcloud 库介绍
众所周知,市面上有很多云平台,阿里云、腾讯云、中移 onenet、华为云、百度云、Tlink 云等等......并且每家都有自己的协议,工程师要移植不同的 sdk 代码或基于各家的手册文档对接不同的协议,看着都头大!!!
所以 iotcloud 应运而生!iotcloud 是合宙专门为了合并 iot 平台而制作的库,意在使用统一且极简的代码接入各个云平台,轻松实现云功能。用户无需为那么多云平台的接入而头疼,只需要极简的通用 API 即可轻松上云!并且因为通用,所以云平台之间的迁移也十分方便。
iotcloud 库本质就是上层设计一套通用的 API 库来进行每个平台功能的对接。目前已经实现了各个平台的所有注册方式,其中自动注册会将相关验证信息保存 kv,随后使用此验证信息进行连接,通知针对每个平台添加了特有系统实现,比如设备上线通知,设备版本号上传,ota 功能等,用户无需管理这些只需要注意相关下发消息做应用逻辑即可。
5.2 API 接口介绍
本教程使用 api 接口为:iotcloud - iotcloud 云平台库 (已支持: 腾讯云 阿里云 onenet 华为云 涂鸦云 百度云 Tlink 云 其他也会支持,有用到的提 issue 会加速支持) - LuatOS 文档
六、云平台配置与效果展示
6.1 云平台配置
6.1.1 登录并开通 IoTDA 实例
登录官网设备接入-控制台 (huaweicloud.com)注册华为云账号开通物联网平台,填写实例名称,标签、实例描述可根据需要选填,完成之后点击立即创建。
注:华为云首页若找不到该入口,在搜索框输入 "设备接入 IoTDA” 关键字进入。
开通实例后点击详情,如下图所示:
接入地址中.iotda 前的数据为 endpoint,即下图中红框处,此信息需要记录下来,供后续使用,如果忘了记录也没有关系,后续可以再重新点开实例详情查看。
6.1.2 创建产品
产品---> 创建产品---> 填写信息---> 确定
注意:下图中创建产品的各类信息为本教程需要,可根据实际情况自行选择。
创建产品后的产品 ID 要记录下来,后面会用到
到此为止,创建产品工作已经完成,同时需要注意将 endpoint 和产品 ID 记录下来,后续会根据不同注册方式来进行实例讲解。
6.2 设备注册
华为云动态注册即自动注册相当于管理员用操作 api 强制注册,华为云本身并没有直接的自动注册 api,故不建议此方式,本文也不再介绍该注册方式,仅介绍密钥校验(手动注册)方式。
6.2.1 密钥校验(手动注册)
1. 创建设备并获取参数
此注册方式采用一机一密,需要手动创建设备预注册
点击所有设备---> 注册设备---> 填写信息(设备标识码可以填开发板的 IMEI 号)---> 设备认证类型选择密钥
![](image/NuuUb57SAoMldBx30nJcm66bn4g.png)
设备创建成功后将密钥复制并记录下来,后面会用到
![](image/CUfsbtrXpoe6VSxelPkcG421nbb.png)
接下来我们再来看下代码具体怎么用:
```lua
-- 密钥校验(手动注册)
iotcloudc = iotcloud.new(iotcloud.HUAWEI,{produt_id = "670be456fc8d5a4ea71c4ff1",endpoint = "5341624af8.st1",device_name = "869329069169988",device_secret = "xxx"})
```
第一个参数表示我们使用的是华为云,
第二个参数我们将上面得到的产品 ID 填入 produt_id 、endpoint 填入 endpoint 、设备名(即设备标识符码)填入 device_name,设备密钥填入 device_secret ,非常简单~
6.3 效果展示
本例采用密钥校验(手动注册)的方式进行注册并连接云平台。
1. 设备日志
可以看到我们的设备打印了连接成功,证明手动注册 + 连接流程已经完成。
2. 云平台效果
![](image/ZiUxbBACSoJ95TxML5vcD5bgnug.png)
设备已经自动注册并且在线,
至此,云平台已经连接成功,剩下的就是要根据自己的产品需求,自己的物模型上报/下发数据就可以了。
七、代码示例说明及功能验证
本例我们通过密钥校验(手动注册)方式连接华为云平台,实现模块端的上发消息和平台端的下发消息,控制 Air780EP 的 NET_STATUS 网络灯亮和灭。
7.1 硬件连接
演示使用的是 Air780EP 核心板的网络灯,也可以自己外接 led 灯进行控制,根据下图可知控制 NET_STATUS 网络灯的是 gpio27。
7.2 代码使用说明
1. 设备注册并连接云平台
```lua
sys.taskInit(function()
-- 等待联网
local ret, device_id = sys.waitUntil("net_ready")
-- -- 华为云
-- 手动注册 (预注册) ,需要密钥校验
iotcloudc = iotcloud.new(iotcloud.HUAWEI,{produt_id = "670be456fc8d5a4ea71c4ff1",endpoint = "5341624af8.st1",device_name = "869329069169988",device_secret = "bce7ee37da51ac52c040"})
log.info("main", "iotcloudc", iotcloudc)
if iotcloudc then
iotcloudc:connect()
end
end)
```
2. 模块端每隔 2 秒发布一次 qos 为 1 的消息到平台端
本文
iotcloudc:publish()
中的第一个参数订阅的是一个自定义 topic,该自定义 topic 在产品详情内的 Topic 管理中进行自定义。
![](image/Z5Byb9wwNo7Cl6xCjvMc08YPnmb.png)
代码使用如下:
```lua
-- 每隔2秒发布一次qos为1的消息到云平台
sys.taskInit(function()
while 1 do
sys.wait(2000)
if iotcloudc then
iotcloudc:publish("$oc/devices/869329069169988/user/up", "hello world!", 1)
end
end
end)
```
此时云平台在监控运维---> 消息跟踪---> 选择设备,即可看到设备上报的消息,如下图所示:
![](image/FPBDbSTieoUgWzxmSD4c6H8hnng.png)
3. 模块端订阅主题,用于平台端通过该主题向模块端下发消息
此行代码放置位置,只要在云平台连接成功之后即可 本文
iotcloudc:subscribe()
中的第一个参数订阅的仍然是一个自定义 topic
```lua
iotcloudc:subscribe("/huawei/down/869329069169988") -- 可以自由订阅主题等
```
4. 模块端接收数据并解析
> 接收统一使用了 `"iotcloud"` 消息进行通知,所以我们只需要订阅此系统消息即可,收到消息后通过json.decode(payload)解析
>字符串,再通过`.content.switch`获取到其中的`switch`值,这个值表示要开关LED的状态,下面代码逻辑中,输入1表示开灯,输入
>0表示关灯。
代码如下所示:
```lua
sys.subscribe("iotcloud", function(cloudc,event,data,payload)
-- 注意,此处不是协程内,复杂操作发消息给协程内进行处理
if event == iotcloud.CONNECT then -- 云平台联上了
print("iotcloud","CONNECT", "云平台连接成功")
iotcloudc:subscribe("/huawei/down/869329069169988") -- 可以自由订阅主题等
elseif event == iotcloud.RECEIVE then
print("iotcloud","topic", data, "payload", payload)
local test_value = json.decode(payload).content.switch
print("test value:", test_value)
if test_value == 1 then
LED(1)
elseif test_value == 0 then
LED(0)
end
-- 用户处理代码
elseif event == iotcloud.OTA then
if data then
rtos.reboot()
end
elseif event == iotcloud.DISCONNECT then -- 云平台断开了
-- 用户处理代码
print("iotcloud","DISCONNECT", "云平台连接断开")
end
end)
```
此时将代码烧录进开发板,即可在华为云平台控制开发板网络灯的亮灭,如何配置华为云平台下发指令,请看下面介绍:
进入设备,点击调试,再点击前往新版(本示例使用华为云新版本在线调试工具)。
![](image/FAVwb9Lj4oF2eox6hWcccXnnnqh.png)
![](image/IwvIb87LkoHr1Lxk9guc3MXCnHd.png)
在线调试工具选择自定义 topic,消息内容采用 json 格式,方便代码解析
![](image/BsBKbomDwohnu6xqVF5czWU2nB1.png)
7.3 运行结果展示
消息内容选择{"switch":1}发送,即可控制开灯;{"switch":0}即可控制关灯,如视频中绿灯所示。
八、总结
本教程介绍了华为云的两种注册接入方法,并通过一个示例进行合宙 Air780EP 开发板和华为云平台之间通信的演示,复杂的接口已封装在底层,而我们只需要根据上面的 API 接口即可实现两者的通信,继而开发出我们自己想要的产品,更多玩法还在等待你的探索!
扩展
常见问题
1. 华为云接入失败,怎么排查?
先检查设备配置,确保设备的 ID,名称,密钥等配置信息正确无误;同时也要检查下网络连接,确保 SIM 卡是正常入网状态,若还是不行,请再仔细看下教程,看是否有哪个步骤有疏漏。
给读者的话
本篇文章由
王世豪
开发;本篇文章描述的内容,如果有错误、细节缺失、细节不清晰或者其他任何问题,总之就是无法解决您遇到的问题;
请登录合宙技术交流论坛,点击文档找错赢奖金-Air780EP-LuatOS-软件指南-网络应用-华为云 用截图标注+文字描述的方式跟帖回复,记录清楚您发现的问题;
我们会迅速核实并且修改文档;
同时也会为您累计找错积分,您还可能赢取月度找错奖金!