跳转至

腾讯云

一、腾讯云概述

腾讯云物联网开发平台(IoT Explorer)是面向智慧生活与产业互联应用的物联网 PaaS 平台,为基于物联网的各行业设备制造商、方案商及应用开发商提供一站式设备智能化服务。平台提供海量设备连接与管理能力及基于腾讯的小程序应用开发能力,并打通腾讯云基础产品及 AI 能力,聚合腾讯生态内容能力。从而提升传统行业设备智能化的效率,降低用户的开发运维成本。

官网地址:物联网开发平台 - 控制台 (tencent.com

注意: 1、腾讯云物联网开发平台从 2024 年 06 月 20 日起,新注册物联网开发平台的用户需购买公共实例激活码才可使用公共实例,在此时间之前注册的用户并已开通公共实例的用户则不受影响。 2、腾讯新出了个 v2 版本开发平台,至笔者编写此文章为止,V2 较 V1 版本去掉了证书校验,去掉了自动注册中自动创建设备功能,并且已经和腾讯云确认此改动,是的,自动注册的自动创建设备改没了,自动注册要手动一个一个创建设备

二、演示功能概述

接下来为大家介绍 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 云平台配置

【注意】本教程采用 v2 版本开发平台,V2 较 V1 版本去掉了证书校验,去掉了动态注册中自动创建设备功能。

6.1.1 登录并新建公共实例

登录官网物联网开发平台 - 控制台 (tencent.com)注册腾讯云账号,开通物联网平台服务后,新建公共实例进行试用。(腾讯云物联网开发平台从 2024 年 06 月 20 日起注册的用户,需要购买公共实例激活码才可以使用公共实例,此为腾讯云平台限制。)

6.1.2 创建产品并添加设备

1. 物联网平台--公共示例--产品开发--新建产品,产品品类根据自己需要选择,产品信息通信方式选择 2G/3G/4G 2. 创建完成后,自动跳转新建设备界面,点击设备调试,再点击新建设备,设备名称我们可以直接填写模组的 imei 号,这样我们就创建好了设备,我们点进去看下设备信息!

可以看到我们需要的数据已经被贴心的加了一键复制,我们要记录下 设备名称、产品 ID、设备密钥 这三个数据,使用这三个数据我们就可以上云了!

到此为止,创建产品设备工作已经完成,后续会根据不同注册方式来进行实例讲解。

6.2 设备注册

腾讯云 v2 开发平台支持两种注册方式,分别为密钥校验(手动注册)和动态注册。

6.2.1 密钥校验(手动注册)

将上面记录的设备名称填入 demo 中的 device_name 中,产品 ID 填入 produt_id 中,设备密钥填入 device_secret 中 配置代码如下:

-- 密钥校验
iotcloudc = iotcloud.new(iotcloud.TENCENT,{produt_id = "xxx",device_name = "xxx",device_secret = "xxx"})

第一个参数 iotcloud.TENCENT 表示我们使用的是腾讯云, 第二个参数{produt_id = "xxx",device_name = "xxx",device_secret = "xxx"} ,我们将上面得到的三个参数填写到 table 中即可,so easy~

6.2.2 动态注册

开启动态注册后设备无需一一烧录设备证书/密钥,同一产品下的所有设备可烧录相同的产品密钥(Productld 和 ProductSevret),云端授权通过后下发设备证书/密钥,您可以根据业务需要选择是否开启。 注意: 动态注册需要在产品开发界面打开动态注册按钮, 随后会生成动态注册上方的产品密钥,我们复制产品 ID 和产品密钥即可

将上面记录的产品 ID 填入 produt_id 中,产品密钥填入 product_secret 中 配置代码如下:

-- 动态注册
iotcloudc = iotcloud.new(iotcloud.TENCENT,{produt_id = "xxx" ,product_secret = "xxx"})

第一个参数 iotcloud.TENCENT 表示我们使用的是腾讯云, 第二个参数{produt_id = "xxx" ,product_secret = "xxx"} ,我们将上面得到的两个参数填写到 table 中即可,so easy~

6.3 效果展示

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

1. 设备日志 通过下图Luatools工具打印的日志,可以看到我们的设备打印了云平台连接成功,证明手动注册 + 连接流程已经完成

2. 云平台效果

设备成功连接到云平台后,我们可以看到设备已经自动注册并且在线,如下图所示:

![](image/Q8cdblwVUoDt5TxjXPKc2BOEnab.png)

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

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

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

7.1 硬件连接

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

7.2 代码使用说明

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

记得修改 produt_id ,device_name 和 device_secret 三个参数为自己平台上的

```lua
sys.taskInit(function()
    -- 等待联网
    local ret, device_id = sys.waitUntil("net_ready")

    -- -- 腾讯云
    -- -- 动态注册
    -- iotcloudc = iotcloud.new(iotcloud.TENCENT,{produt_id = "ZAJCHA24SH" ,product_secret = "vGGwnSkyM4eD5ddbNrQoGJox"})
    -- -- 密钥校验
    iotcloudc = iotcloud.new(iotcloud.TENCENT,{produt_id = "ZAJCHA24SH",device_name = "869329069169988",device_secret = "xNWcxDX0qzSM74oFteehvw=="})

    if iotcloudc then
        iotcloudc:connect()
    end
end)

```

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

本文 iotcloudc:publish() 中的第一个参数订阅的是一个自定义topic(此topic在腾讯云平台获取,下面会介绍),在腾讯云物联网平台上可以看到。用户可以根据需求自行修改第一个参数。

```lua
-- 每隔2秒发布一次qos为1的消息到云平台
sys.taskInit(function()
    while 1 do
        sys.wait(2000)
        if iotcloudc then
            iotcloudc:publish("$thing/up/property/ZAJCHA24SH/869329069169988", "11111", 1) -- 上传数据
        end
    end
end)
```

打开腾讯云产品设备界面,点击设备云端日志,选择内容日志,日志类型选择属性,此时右边会生成两个 topic

> 一个是上行 topic \$thing/**up**/property/ZAJCHA24SH/869329069169988,即模块端向云平台发布消息;
> 一个是下行 topic \$thing/**down**/property/ZAJCHA24SH/869329069169988,即云平台向模块端下发消息;

![](image/NL0fbMDgQokHeZxLkUXcZAexnOc.png)

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

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

```lua
iotcloudc:subscribe("$thing/down/property/ZAJCHA24SH/869329069169988") -- 可以自由定阅主题等
```

4. 模块端接收数据并解析

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

代码如下所示:
```lua
-- 初始化gpio27
LED = gpio.setup(27, 0, gpio.PULLUP)
sys.subscribe("iotcloud", function(cloudc,event,data,payload)
    -- 注意,此处不是协程内,复杂操作发消息给协程内进行处理
    if event == iotcloud.CONNECT then -- 云平台联上了
        print("iotcloud","CONNECT", "云平台连接成功")
        iotcloudc:subscribe("$thing/down/property/ZAJCHA24SH/869329069169988") -- 可以自由定阅主题等
    elseif event == iotcloud.RECEIVE then
        print("iotcloud","topic", data, "payload", payload)
        local test_value = json.decode(payload).params.switch
        print("test value:", test_value)

        -- 获取到的switch是1,表示开灯;是0则表示关灯
        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/QBJJbBOdgosvK0xXX2Fcqv0Dnuf.png)

![](image/ZUgCba2zJoBj07xoOLjcOCclnBe.png)

> 保存之后点击设备调试,即可看到自定义的功能

![](image/YTE7be5rDofUIcxvUfRc0TqZnPe.png)

点击 LED(switch)按钮即可控制灯的亮灭

7.3 运行结果展示

点击 LED(switch)并发送便可以控制 Air780EP 核心板的网络灯,即下面视频中的绿灯。

八、总结

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

扩展

常见问题

1. 腾讯云接入失败,怎么排查?

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

给读者的话

本篇文章由王世豪开发;

本篇文章描述的内容,如果有错误、细节缺失、细节不清晰或者其他任何问题,总之就是无法解决您遇到的问题;

请登录合宙技术交流论坛,点击文档找错赢奖金-Air780EP-LuatOS-软件指南-网络应用-腾讯云

用截图标注+文字描述的方式跟帖回复,记录清楚您发现的问题;

我们会迅速核实并且修改文档;

同时也会为您累计找错积分,您还可能赢取月度找错奖金!