涂鸦云
一、涂鸦云物联网平台介绍
涂鸦开发者平台 致力于打造互联互通的物联网开发标准,连接品牌、OEM 厂商、开发者、零售商和各行业的智能化需求。基于全球化部署的公有云,涂鸦开发者平台实现了智慧场景和智能设备的互联互通,承载着每日数以亿计的设备请求交互。平台服务涵盖硬件开发工具、App 开发工具、物联网云服务和智慧行业开发,为开发者提供从技术到营销渠道的全面赋能。
该平台不仅提供了客户实现各环节所需的线上自助工具,还在标准流程、协同分工、线上交易、技术支持等各方面都提供了完善的服务产品。
通过此链接你可以更好的了解到涂鸦开发者平台:涂鸦开发者平台-涂鸦开发者平台-涂鸦开发者
二、演示功能概述
本文将演示如何使用 Air201模组和涂鸦云物联网平台实现物联网设备的连接与管理。通过以下步骤,我们将展示如何将 Air201模组连接到涂鸦云物联网平台,实现设备数据的远程上传和云端下发消息的功能。
1. 准备硬件环境:
- Air201模组:本文将以 Air201模组为例进行演示。
- SIM 卡:在中国大陆环境下,使用移动、电信、联通的物联网卡或手机卡均可。
- PC 电脑:推荐使用 Windows 10 及以上版本。
- 数据通信线:USB 转 Type-C 数据线。
2. 配置软件环境:
- Luatools 下载调试工具:由合宙推出,支持固件获取、固件打包、trace 打印及单机烧录等功能。
- 涂鸦云物联网平台:涂鸦云物联网平台提供设备连接、设备管理、数据处理、消息交互、自动化规则、安全与认证等能力。
- 源码及固件:下载 Air201模组所需的底层 core 文件和脚本代码,并烧录到 Air201模组中。
3. 连接涂鸦云物联网平台:
- 在涂鸦云物联网平台上创建产品,配置认证方式等。
- 在 Air201模组上编写代码,实现与涂鸦云物联网平台的连接。
4. 数据上传和接收:
- 在 Air201模组上编写代码,实现每隔一定时间向涂鸦云物联网平台上传数据。
- 在涂鸦云物联网平台上创建消息主题,用于接收 Air201模组发送的数据。
5. 云端下发消息:
- 在涂鸦云物联网平台上创建消息主题,用于向 Air201模组下发消息。
- 在 Air201模组上编写代码,实现订阅云端下发的消息。
6. 运行结果展示:
- 通过 Luatools 工具查看 Air201模组上的日志,验证数据的上传和接收。
- 在涂鸦云物联网平台上查看数据接收和下发消息的效果。
通过以上步骤,我们将展示如何使用 Air201模组和涂鸦云物联网平台实现物联网设备的连接与管理。
三、演示硬件环境
3.1 开发板
本文以 Air201模组 为例,如下图所示:
点击链接购买:合宙Air201模组淘宝购买链接 ;
此模组的详细使用说明参考:Air201 产品手册 。
3.2 SIM 卡
在中国大陆环境下,使用移动,电信,联通的物联网卡或者手机卡都可以。
3.3 PC 电脑
WIN10以及以上版本的WINDOWS系统。
3.4 数据通信线
1. USB 转 Type-C 数据线
它的一端是 USB 接口,另一端是 Type-C 接口。
四、演示软件环境
4.1 Luatools 下载调试工具
Luatools 工具由合宙推出,支持最新固件获取、固件打包、trace 打印及单机烧录等功能。
工具使用说明参考:Luatools 下载和详细使用
4.2 涂鸦云物联网平台
平台官网:涂鸦开发者平台
4.3 源码及固件
1. 官网下载,底层 core 下载地址:LuatOS 底层 core 注:本 demo 使用如图所示固件
2. demo 位置
本 demo 为诸多云平台的集合型 demo,适用于如阿里云、百度云、OneNet 等诸多云平台,大家只需修改对应云平台的参数即可。
demo位置:https://gitee.com/openLuat/LuatOS-Air201/tree/master/demo/iotcloud
3. 源码及固件已打包压缩,如下所示
压缩包中 core 文件夹存放的是固件,code 文件夹存放的是脚本代码。 大家在使用脚本代码时一定要记得修改参数,至于修改什么参数,后面演示时会告诉大家。
五、软硬件资料
5.1 IOT_CLOUD 介绍
众所周知,市面上有很多云平台,阿里云、腾讯云、中移 onenet、华为云、百度云、Tlink 云等等......并且每家都有自己的协议,工程师要移植不同的 SDK 代码或基于各家的手册文档对接不同的协议,看着都头大!!!
所以 iotcloud 应运而生!iotcloud 是合宙专门为了合并 iot 平台而制作的库,意在使用统一且极简的代码接入各个云平台,轻松实现云功能。用户无需为那么多云平台的接入而头疼,只需要极简的通用 API 即可轻松上云!并且因为通用,所以云平台之间的迁移也十分方便。
5.1.1 iotcloud 库介绍
iotcloud 库本质就是上层设计一套通用的 API,通过该库进行每个平台功能的对接。目前已经实现了各个平台的所有注册方式,其中自动注册会将相关验证信息保存 kv,随后使用此验证信息进行连接,通知针对每个平台添加了特有系统实现,比如设备上线通知,设备版本号上传,OTA 功能等,用户无需管理这些只需要注意相关下发消息做应用逻辑即可。
注意:涂鸦云支持一机一密,一型一密,X.509 证书三种认证方式,但涂鸦云只对外开放一机一密认证方式,另两种方式请自行联系涂鸦云。
5.1.2 API 接口介绍
本教程所使用 API 接口参考:iotcloud API 接口介绍 - LuatOS 文档
5.2 Air201模组烧录说明
5.2.1 选择固件和脚本
1. 打开 Luatools 工具
2. 点击 项目管理测试
3. 根据图示操作
注意,大家只需要跟着做到第四步即可,第五步跟着后面的操作再做。
5.2.2 烧录
1. 将 Air201模组通过 USB 数据线连接至电脑,如下图所示:
2. 根据下方操作进行烧录
Air201进入boot下载模式,烧录固件和程序,需要将预留的测试点(Air201板子 B面图) 的BOOT 上拉到vdd_ext(A面USB旁边),之后上电开机,即可进入下载模式,下载完程序后将boot脚悬空。
Air201板子 A面图
Air201板子 B面图
5.2.3 烧录模式下的端口显示
判断是否进入 BOOT 模式:模块上电,此时在电脑的设备管理器中,查看串口设备, 会出现一个端口表示进入了 BOOT 下载模式,如下图所示:
六、功能验证
6.1 云平台准备
6.1.1 创建产品
1. 进入 账号注册页面,根据页面提示,注册一个开发者账号。
2. 登录 涂鸦云平台
3. 单击 创建产品
4. 选择品类,例如在 标准类目 --> 其他 下选择产品品类,如 自定义品类 ,单击图标即可。
注意:选择的产品类别非常重要,将影响到后续产品功能及 App 界面的推荐。
5. 选择智能化方式,此时我们需要选择 生态设备接入 方式。
6. 单击 生态设备接入 后,默认会选择自定义方案。
7. 在 完善产品信息 区域,填写 产品名称 和 产品型号,选择 通讯协议 和 功耗类型,然后单击 创建产品。
6.1.2 设置产品功能
功能 是指产品具有的功能抽象,是一个产品最重要的属性。功能通过不同数据类型进行表示(Data point,简称 DP)。例如,最简单的设备 开关,具备的功能为 开启、关闭。您可以将开关抽象为一个布尔型 DP,0
表示关闭,1
表示开启。更多详情,请参考 产品功能。
1. 前往智能产品的开发页面,进入 功能定义 步骤。
2. 根据页面提示,选择标准功能。
添加之前的效果:
添加标准功能:
本文选择的这个功能 发布/订阅 都可以实现。
添加之后的效果:
3. 如果您希望开发的产品功能不在标准功能范围内,您可以在 自定义功能 处单击 添加功能,或者开启所需的 高级功能,添加更多功能。
本示例所选择的产品不包括 高级功能
6.1.3 注册设备
设备注册是获取 涂鸦开发者平台 设备凭证的必要操作。注册前,您需要先购买设备接入授权码。购买完成后,您可以自定义填写对应的注册信息(注册 ID、备注)用于获得设备凭证(ProductId
、DeviceId
和 DeviceSecret
)。
目前,涂鸦云支持 单个注册 、批量注册 和 批量上传 功能。我们本次使用 单个注册 方式。
1. 界面操作
目前 TuyaLink 接入的产品只支持在中国区应用。
2. 注册设备
注册前,需要查看该产品下剩余授权码数量是否充足,每个产品可以免费领取两个授权码,领取位置请看上个图,如果不足可前往授权码管理分配或购买。
3. 注册完成后,可点击下图中箭头位置,查看设备详情。
6.2 一机一密注册方式
一机一密认证是预先为每个设备烧录其唯一的设备证书(即 ProductID
、DeviceID
和 DeviceSecret
)。当设备与云平台建立连接时,云平台对其携带的设备证书信息进行加密计算,最后使用 username/password
的方式认证。
6.2.1 获取参数
你只需要准备好自己的
DeviceID
和DeviceSecret
即可,其余参数在代码中已经写好。
6.2.2 代码使用说明
1. 设备注册并连接云平台
记得修改参数
sys.taskInit(function()
-- 等待联网
local ret, device_id = sys.waitUntil("net_ready")
-------- 以下接入方式根据自己需要修改,相关参数修改为自己的 ---------
-- -- 涂鸦云
iotcloudc = iotcloud.new(iotcloud.TUYA,{device_name = "xxx",device_secret = "xxx"})
if iotcloudc then
iotcloudc:connect()
else
log.error("iotcloud", "创建失败, 请检查参数")
end
end)
2. 发送数据
关于数据格式问题,请先了解 数据解析-涂鸦开发者平台-涂鸦开发者 关于主题(Topic)问题,请先了解 MQTT 主题概览-涂鸦开发者平台-涂鸦开发者
-- ${deviceId} 修改为自己的 , device_status 修改为自己的功能标识符 ,
iotcloudc : publish("tylink/${deviceId}/thing/property/report" , '{"data":{"device_status":"999"}}' , 1) -- 上报信息
3. 订阅主题,用于云平台下发消息
此行代码放置位置,只要在云平台连接成功之后即可,可参考 4.接收数据
-- ${deviceId} 修改为自己的
iotcloudc : subscribe("tylink/${deviceId}/thing/property/set") -- 订阅信息
4. 接收数据
接收统一使用了
"iotcloud"
消息进行通知,所以我们只需要订阅此系统消息即可
sys.subscribe("iotcloud", function(cloudc,event,data,payload)
-- 注意,此处不是协程内,复杂操作发消息给协程内进行处理
if event == iotcloud.CONNECT then -- 云平台联上了
print("iotcloud","CONNECT", "云平台连接成功")
iotcloudc : subscribe("tylink/${deviceId}/thing/property/set") -- 订阅信息
iotcloudc : publish("tylink/${deviceId}/thing/property/report" , '{"data":{"imei_imsi":"999"}}' , 1) -- 上报信息
elseif event == iotcloud.RECEIVE then
print("iotcloud","topic", data, "payload", payload)
-- 用户处理代码
elseif event == iotcloud.OTA then
if data then
rtos.reboot()
end
elseif event == iotcloud.DISCONNECT then -- 云平台断开了
-- 用户处理代码
end
end)
5. 完整代码
记得修改参数!!!
-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "tuyayun_demo"
VERSION = "1.0.0"
-- sys库是标配
_G.sys = require("sys")
--[[特别注意, 使用mqtt库需要下列语句]]
_G.sysplus = require("sysplus")
local iotcloud = require("iotcloud")
-- 统一联网函数
sys.taskInit(function()
local device_id = mcu.unique_id():toHex()
-----------------------------
-- 统一联网函数, 可自行删减
----------------------------
if mobile then
device_id = mobile.imei()
elseif socket or mqtt then
-- 适配的socket库也OK
-- 没有其他操作, 单纯给个注释说明
else
-- 其他不认识的bsp, 循环提示一下吧
while 1 do
sys.wait(1000)
log.info("bsp", "本bsp可能未适配网络层, 请查证")
end
end
-- 默认都等到联网成功
sys.waitUntil("IP_READY")
sys.publish("net_ready", device_id)
end)
sys.taskInit(function()
-- 等待联网
local ret, device_id = sys.waitUntil("net_ready")
-------- 以下接入方式根据自己需要修改,相关参数修改为自己的 ---------
-- -- 涂鸦云
iotcloudc = iotcloud.new(iotcloud.TUYA,{device_name = "xxx",device_secret = "xxx"})
if iotcloudc then
iotcloudc:connect()
else
log.error("iotcloud", "创建失败, 请检查参数")
end
end)
sys.subscribe("iotcloud", function(cloudc,event,data,payload)
-- 注意,此处不是协程内,复杂操作发消息给协程内进行处理
if event == iotcloud.CONNECT then -- 云平台联上了
print("iotcloud","CONNECT", "云平台连接成功")
iotcloudc : subscribe("tylink/${deviceId}/thing/property/set") -- 订阅信息
iotcloudc : publish("tylink/${deviceId}/thing/property/report" , '{"data":{"device_status":"999"}}' , 1) -- 上报信息
elseif event == iotcloud.RECEIVE then
print("iotcloud","topic", data, "payload", payload)
-- 用户处理代码
elseif event == iotcloud.OTA then
if data then
rtos.reboot()
end
elseif event == iotcloud.DISCONNECT then -- 云平台断开了
-- 用户处理代码
end
end)
-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!
6.2.3 运行结果展示
1. 设备日志
2. 云平台效果
3. 上行数据效果
设备日志位置:左侧栏 产品 --> 设备 --> 设备日志
4. 下发数据效果
下发数据操作位置:产品界面 --> 在线调试 设备日志位置:左侧栏 产品 --> 设备 --> 设备日志 通过 Luatools 工具 查看日志消息
发布消息:
接收消息:
七、总结
本文详细介绍了如何使用 Air201模组和涂鸦云物联网平台实现物联网设备的连接与管理。首先,我们准备了必要的硬件环境,包括Air201模组、SIM 卡、PC 电脑和数据通信线。接着,我们配置了软件环境,包括 Luatools 下载调试工具和涂鸦云物联网平台。
在连接涂鸦云物联网平台的过程中,我们创建了产品,配置了认证方式,并在 Air201模组上编写了代码以实现与涂鸦云物联网平台的连接。我们展示了如何通过编写代码,使Air201模组向涂鸦云物联网平台上传数据,并在平台上创建消息主题以接收 Air201模组发送的数据。
我们还展示了如何创建消息主题以向 Air201模组下发消息,并实现订阅云端下发的消息。通过 Luatools 工具和涂鸦云物联网平台,我们验证了数据的上传和接收,以及下发消息的效果。
通过本文的学习,大家可以掌握如何使用 Air201模组和涂鸦云物联网平台实现物联网设备的连接与管理。
八、扩展
8.1 MQTT 通信协议 QoS 介绍
MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,它设计用于低带宽和不稳定的网络环境。MQTT 协议专注于设备连接的稳定性和网络的优化使用,特别适合于物联网(IoT)场景。
在 MQTT 中,消息的传输质量是通过 QoS(Quality of Service,服务质量)等级来定义的。QoS 定义了消息的传递可靠性,共有三个等级:
1. QoS 0(最多传递一次):
-
最多传递一次:消息可能会丢失。
-
适用于非关键数据,或者允许数据丢失的场景。
2. QoS 1(至少传递一次):
-
至少传递一次:确保消息至少从发布者传输到服务器,并且至少传递给每个订阅者一次。
-
如果传输过程中出现错误,客户端会重新发送消息。
-
适用于需要确认数据已传输但可以容忍一定程度数据丢失的场景。
3. QoS 2(确保传递一次):
-
确保传递一次:确保消息从发布者传输到服务器,并且只传递给每个订阅者一次,而且在传输过程中不会被重复传递。
-
客户端会在消息确认之后才能接收到下一个消息。
-
适用于对数据可靠性要求极高的场景,如关键数据传输。
选择适当的 QoS 级别取决于应用场景对数据可靠性和网络资源利用的要求。在设计物联网应用时,通常需要根据设备的能力、网络条件以及应用的容忍度来选择合适的 QoS 设置。
九、常见问题
1. 如何实现数据的上传和接收?
数据的上传和接收是通过订阅和发布消息实现的。在代码中,需要调用
iotcloudc:publish()
和iotcloudc:subscribe()
方法,分别用于发布和订阅消息。