跳转至

涂鸦云

一、涂鸦云物联网平台介绍

涂鸦开发者平台 致力于打造互联互通的物联网开发标准,连接品牌、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、备注)用于获得设备凭证(ProductIdDeviceIdDeviceSecret)。

目前,涂鸦云支持 单个注册 批量注册 批量上传 功能。我们本次使用 单个注册 方式。

1. 界面操作

目前 TuyaLink 接入的产品只支持在中国区应用。

2. 注册设备

注册前,需要查看该产品下剩余授权码数量是否充足,每个产品可以免费领取两个授权码,领取位置请看上个图,如果不足可前往授权码管理分配或购买。

3. 注册完成后,可点击下图中箭头位置,查看设备详情。

6.2 一机一密注册方式

一机一密认证是预先为每个设备烧录其唯一的设备证书(即 ProductIDDeviceIDDeviceSecret)。当设备与云平台建立连接时,云平台对其携带的设备证书信息进行加密计算,最后使用 username/password 的方式认证。

6.2.1 获取参数

你只需要准备好自己的 DeviceIDDeviceSecret 即可,其余参数在代码中已经写好。

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() 方法,分别用于发布和订阅消息。