跳转至

华为云

一、华为云概述

华为云物联网平台设备接入云服务(IoTDA)提供海量设备的接入和管理能力,将物理设备联接到云,支撑设备数据采集上云和云端下发命令给设备进行远程控制,配合华为云其他产品,帮助您快速构筑物联网解决方案。

官网地址:设备接入-控制台 (huaweicloud.com)

注意:华为的账号分为华为账号 华为云账号,IAM 账号,注意区别

二、演示功能概述

接下来为大家介绍 Air780E 如何接入华为云,并且会介绍如何进行华为云的上下行交互处理。

1. 模块端每隔 2 秒发布一次 qos 为 1 的消息到平台端

2. 平台端下发消息,控制模块端灯的亮灭

三、准备硬件环境

参考:硬件环境清单第二章节内容,准备以及组装好硬件环境。

四、软件环境

“凡事预则立,不预则废。”在详细阐述本功能示例之前,我们需先精心筹备好以下软件环境。

1.Luatools工具

2.内核固件文件(底层core固件文件):LuatOS-SoC_V1112_EC618_FULL.soc;参考项目使用的内核固件

3.luatos需要的脚本和资源文件右键点我,另存为,下载完整压缩文件包

lib脚本文件:使用Luatools烧录时,勾选 添加默认lib 选项,使用默认lib脚本文件;

准备好软件环境之后,接下来查看如何烧录项目文件到Air780E核心板,将本篇文章中演示使用的项目文件烧录到Air780E核心板中。

4. LuatOS 工程文件:huaweiiot_20250326.luatos

五、华为云软硬件资料

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 号)---> 设备认证类型选择密钥

    设备创建成功后将密钥复制并记录下来,后面会用到

    接下来我们再来看下代码具体怎么用:

    -- 密钥校验(手动注册)
    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. 云平台效果

    设备已经自动注册并且在线,

    至此,云平台已经连接成功,剩下的就是要根据自己的产品需求,自己的物模型上报/下发数据就可以了。

七、代码示例说明及功能验证

本例我们通过密钥校验(手动注册)方式连接华为云平台,实现模块端的上发消息和平台端的下发消息,控制 Air780E 的 NET_STATUS 网络灯亮和灭。

7.1 硬件连接

演示使用的是 Air780E 核心板的网络灯,也可以自己外接 led 灯进行控制,根据下图可知控制 NET_STATUS 网络灯的是 gpio27。

7.2 代码使用说明

  1. 设备注册并连接云平台

    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 管理中进行自定义。

    代码使用如下:

    -- 每隔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)
    

    此时云平台在监控运维---> 消息跟踪---> 选择设备,即可看到设备上报的消息,如下图所示:

  3. 模块端订阅主题,用于平台端通过该主题向模块端下发消息

    此行代码放置位置,只要在云平台连接成功之后即可 本文 iotcloudc:subscribe() 中的第一个参数订阅的仍然是一个自定义 topic

    iotcloudc:subscribe("/huawei/down/869329069169988") -- 可以自由订阅主题等
    
  4. 模块端接收数据并解析

    接收统一使用了 "iotcloud" 消息进行通知,所以我们只需要订阅此系统消息即可,收到消息后通过json.decode(payload)解析 字符串,再通过.content.switch获取到其中的switch值,这个值表示要开关LED的状态,下面代码逻辑中,输入1表示开灯,输入 0表示关灯。

    代码如下所示:

    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)
    

    此时将代码烧录进开发板,即可在华为云平台控制开发板网络灯的亮灭,如何配置华为云平台下发指令,请看下面介绍:

    进入设备,点击调试,再点击前往新版(本示例使用华为云新版本在线调试工具)。

    在线调试工具选择自定义 topic,消息内容采用 json 格式,方便代码解析

7.3 运行结果展示

消息内容选择{"switch":1}发送,即可控制开灯;{"switch":0}即可控制关灯,如视频中绿灯所示。

八、总结

本教程介绍了华为云的两种注册接入方法,并通过一个示例进行合宙 Air780E 开发板和华为云平台之间通信的演示,复杂的接口已封装在底层,而我们只需要根据上面的 API 接口即可实现两者的通信,继而开发出我们自己想要的产品,更多玩法还在等待你的探索!

常见问题

  1. 华为云接入失败,怎么排查?

    先检查设备配置,确保设备的 ID,名称,密钥等配置信息正确无误;同时也要检查下网络连接,确保 SIM 卡是正常入网状态,若还是不行,请再仔细看下教程,看是否有哪个步骤有疏漏。