跳转至

华为云

一、华为云概述

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

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

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

二、演示功能概述

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

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

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

三、准备硬件环境

3.1 开发板准备

本次使用 Air8201模组,如下图所示:

点击链接购买:合宙Air8201模组淘宝购买链接

此模组的详细使用说明参考:Air8201 产品手册

3.2 数据通信线

USB 转 typeC 数据线一根。

3.3 PC 电脑

WIN10 以及以上版本的 WINDOWS 系统。

四、准备软件环境

4.1 下载调试工具

使用说明参考:Luatools 下载和详细使用

4.2 源码及固件

1. 官网下载,底层 core 下载地址:LuatOS 底层 core 注:本 demo 使用如图所示固件

2. 本教程使用的 demo:demo/iotcloud/huaweiyun

3. 源码和固件已打包,如下所示:

注:压缩包中 core 文件夹存放固件,code 文件夹存放 demo。

右键点我,另存为,下载完整压缩文件包

五、华为云软硬件资料

5.1 iotcloud 库介绍

众所周知,市面上有很多云平台,阿里云、腾讯云、中移 onenet、华为云、百度云、Tlink 云等等......并且每家都有自己的协议,工程师要移植不同的 sdk 代码或基于各家的手册文档对接不同的协议,看着都头大!!!

所以 iotcloud 应运而生!iotcloud 是合宙专门为了合并 iot 平台而制作的库,意在使用统一且极简的代码接入各个云平台,轻松实现云功能。用户无需为那么多云平台的接入而头疼,只需要极简的通用 API 即可轻松上云!并且因为通用,所以云平台之间的迁移也十分方便。

iotcloud 库本质就是上层设计一套通用的 API 库来进行每个平台功能的对接。目前已经实现了各个平台的所有注册方式,其中自动注册会将相关验证信息保存 kv,随后使用此验证信息进行连接,通知针对每个平台添加了特有系统实现,比如设备上线通知,设备版本号上传,ota 功能等,用户无需管理这些只需要注意相关下发消息做应用逻辑即可。

5.2 API 接口介绍

本教程使用 api 接口为:iotcloud 云平台库

5.3 Air8201烧录说明

将 Air8201 通过 usb 数据线连接电脑,如下图所示:

Air8201进入boot下载模式,烧录固件和程序,需要将预留的测试点(Air8201板子 B面图) 的BOOT 上拉到vdd_ext(A面USB旁边),之后上电开机,即可进入下载模式,下载完程序后将boot脚悬空。

Air8201板子 A面图

Air8201板子 B面图

判断是否进入 BOOT 模式:模块上电,此时在电脑的设备管理器中,查看串口设备, 会出现一个端口表示进入了 BOOT 下载模式,如下图所示:

六、云平台配置与效果展示

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 = "xxx",endpoint = "453c3cf2de.st1",device_name = "864536072621004",device_secret = "xxx"})
    

    第一个参数表示我们使用的是华为云,

    第二个参数我们将上面得到的产品 ID 填入 produt_id 、endpoint 填入 endpoint 、设备名(即设备标识符码)填入 device_name,设备密钥填入 device_secret ,非常简单~

6.3 效果展示

本例采用密钥校验(手动注册)的方式进行注册并连接云平台。

  1. 设备日志

    可以看到我们的设备打印了连接成功,证明手动注册 + 连接流程已经完成。

  2. 云平台效果

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

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

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

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

7.1 硬件连接

演示使用的是 Air8201的蓝色灯,也可以自己外接 led 灯进行控制,Air8201控制蓝色灯的是 gpio1。

7.2 代码使用说明

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

    sys.taskInit(function()
        -- 等待联网
        local ret, device_id = sys.waitUntil("net_ready")
        -- -- 华为云
        -- 手动注册 (预注册) ,需要密钥校验
        iotcloudc = iotcloud.new(iotcloud.HUAWEI,{produt_id = "XXX",endpoint = "453c3cf2de.st1",device_name = "864536072621004",device_secret = "XXX"})
    
        log.info("main", "iotcloudc", iotcloudc)
        if iotcloudc then
            iotcloudc:connect()
        end
    end)
    
  2. 模块端每隔 2 秒发布一次 qos 为 1 的消息到平台端

    本文 iotcloudc:publish() 中的第一个参数订阅的是一个自定义 topic,该自定义 topic 在产品详情内的 Topic 管理中进行自定义。

    代码使用如下:

    -- 每隔20秒发布一次qos为1的消息到云平台
    sys.taskInit(function()
        while 1 do
            sys.wait(20000)
            if iotcloudc then
                iotcloudc:publish("$oc/devices/864536072621004/user/up", "hello world!", 1)
            end
        end
    end)
    

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

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

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

    iotcloudc:subscribe("/huawei/down/864536072621004") -- 可以自由订阅主题等
    
  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/864536072621004") -- 可以自由订阅主题等
        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}即可控制关灯,对应log如下所示。

八、总结

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

扩展

常见问题

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

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