本次内容包括树莓派4的介绍和体验的分享、阿里云物联网云平台介绍、基于树莓派4的设备端开发演示。专题的形式是以物联网平台为中心,对于接入相关的功能进行介绍,在讲解功能的同时会在树莓派4上使用设备端C语言进行同步的演示。
想看精彩直播回放,请点击这里。
以下为精彩视频内容整理:
如上图所示,在实际操作中需要用到的主体分为三个方面,分别为阿里云物联网平台、设备端C语言及树莓派4。物联网平台作为设备连接的平台,提供安全可靠的连接通讯能力、海量设备的连接能力、支撑设备数据上云的能力。以及提供云端API,是指通过API调用并下发指令,同时实现设备的远程控制。另外还包括规则引擎、数据分析、边缘计算等增值的服务。
本专题第一个主体主要讲解设备的接入,包括4个功能点,分别为:
- 设备接入:设备如何连接物联网平台,如何在设备与平台之间建立安全的设备通路。
- 设备通信:设备连接之后,如何与平台提供的服务相互进行通信。
- 设备管理:如何管理设备、标识设备、控制设备、查看设备上报的数据。以及平台的交互协议。
- 规则引擎转发数据:设备数据上云之后,如何在云端获取和使用。
第二个主体为设备端C语言SDK,目前,在设备端以及提供多种语言的SDK,但C语言的SDK使用率是最高的。本专题以C语言的SDK中的kit为例从以下三点进行讲解:
- 介绍SDK的功能以及介绍API
- 如何与物联网平台配合使用
- 针对嵌入式平台如何适配
第三个主体以树莓派4作为硬件,演示怎样使用C语言SDK连接物联网平台以及与平台的交互。此外,包括透传数据和固件升级。
一、设备接入
设备接入介绍的C语言SDK为一个闭源版本的kit,仅包含上云的核心功能,追求应用性、资源开设的最小化以及免配置。
Linkkit Core说明文档:https://www.yuque.com/aliyun_iot/product/c-sdk.git
Linkkit Core仓库地址:https://code.aliyun.com/linkkit/AiotCore-C-SDK.git
对接方式:将支持主流平台,其他平台如有需要,可发送邮件至如下邮箱咨询: yusheng.yx@alibaba-inc.com
TLS Demo:https://code.aliyun.com/edward.yangx/public-docs/raw/master/progs/AiotCore-C-SDK-raspberry-tls.zip
C语言客户端SDK
包含以下功能点:
- 以MQTT协议连接阿里云,建立消息上下行双向通道
- 以MQTT协议+HTTP协议从阿里云获取固件升级
- WiFi配网(从手机App向设备传递WiFi密码)
- 设备绑定(建立设备与人的对应关系,是从手机监控设备的基础)
SDK下载地址:
https://code.aliyun.com/linkkit/AiotCore-C-SDK/repository/archive.zip?ref=master
SDK被下载解压后,系统接入平台后,生成3个目录,分别为demo、include、lib。demo主要放置demo的所有演示程序,include包含头文件的目录,lib为各种工具链定义的静态库。如果没有所需的文件,可以发邮件到yusheng.ys@alibaba-inc.com进行联系。
使用步骤
第一步 获取SDK
从上文链接下载压缩包后,内部的lib目录下有各种目标设备架构的SDK
- 如果运行SDK的目标设备已编译,可直接使用,如ia32-ubuntu-gcc-5.5.0是IntelCPU32位程序可用
- 如果运行SDK的目标设备未编译,可联系阿里云IoT团队,将工具链同步给阿里编译后获得
第二步 编写系统对接函数
C-SDK可运行在Linux/FreeRTOS/uCOS/Threadx等多种嵌入式操作系统上,调用系统对接函数完成对OS资源的申请释放和具体使用,这些资源包括socket、内存、互斥锁、线程等。系统需要对接的函数包括系统时间戳函数(在SDK里没有时间线程)、针对不同平台的网络相关的对接函数、随机buffer获取函数、日志打印函数以及互斥锁函数(保证线程的安全)。
在树莓派上直接使用对接好的Linux平台的系统函数,然后进行编译运行。已有实现https://code.aliyun.com/linkkit/AiotCore-C-SDK/blob/master/demo/linux_sys.c。
需要链接的语言文件有两个,每个demo上都有主程序,针对不同情况的功能进行demo,首先使用AiotCore,在这个demo里仅包含上云和维持运行,不包含其他多余的工作。
第三步 使用MQTT上云
系统对接函数实现后,将它与libiot_sdk.a编译到一起,即可尝试建立设备与云平台之间的通道,熟悉云端控制台
二、设备通信
目前,使用最广泛的为MQTT协议,C-SDK支持MQTT协议,支持的版本为3.1.1。协议地址:http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html
MQTT协议是基于发布和订阅的应用层消息协议。在协议中主要关注两个方面,包括消息的类型和消息的主要内容,其中消费者视为设备。消费者和生产者既可以视为设备,也可以是移动端甚至是云端。
如上图所示,消费者视为树莓派4,可以向物联网平台订阅消息和发布消息,其他是设备端或者移动端就会收到消费者发布的消息,协议规定了QoS0 ~ QoS2的三种服务质量,分别表示消息最多送达一次、最少送达一次、有且仅送达一次。物联网平台目前支持QoS0和QoS1。
三、设备管理
本章主要讲解通过将demo连接到物联网平台后,平台如何标识设备以及消息格式遵循的规则。
如上图所示,设备管理主要介绍四组概念,包括产品与设备、三元组、物模型及Alink协议。至于控制平台是开发人员与物联网平台的交互界面。
产品:某一类具有相同功能的设备的集合。物联网平台会为创建的每个产品颁发全局唯一的ProductKey。
设备:归属于某个产品下的具体设备。物联网平台会为每个设备颁发产品内唯一的DeviceName。
上图为一个具体的例子,在帮助文档:https://help.aliyun.com/document_detail/73705.html
中会有所体现。
三元组:指设备在阿里云物联网平台的唯一身份标识,由三部分组成:
- ProductKey:标识设备所属产品,创建产品时产生,全局唯一
- DeviceName:标识设备,创建设备时产生,产品内唯一
- DeviceSecret:物联网平台为设备颁发的设备密钥,创建设备时产生,全局唯一
用demo在连接物联网平台时,demo里内置了一组三元组,进行健全和连接物联网平台。
物模型:将物理空间中的实体数字化,并在云端构建该实体的数据模型。通过定义物模型来定义产品功能,描述设备自身具有的能力,它能做什么,能对外提供哪些服务。定义物模型,也就是定义产品的属性、事件和服务。目的是使设备的数据能够上云。
由上图所示,为定义产品的属性、事件和服务之间的区别。属性是从平台进行对数据属性的设置,属性改变时可以上报给云平台。事件只能做单纯的上报工作。服务相当于设备侧提供的服务,在平台进行调用,根据具体服务的定义,有时有响应,有时没有响应。属性、事件和服务都是按照功能定义,按照业务分类,使用时可按需求选用。
在树莓派4上进行演示的过程:从创建产品和设备开始,首先登入物联网平台的控制台创建产品,所选类型为自定义品类,其中物模型视为空状态。产品创建成功后生成平台唯一的PK,在设备管理页面创建新的设备,设备创建成功之后生成三元组,作为设备唯一上云的凭证。在树莓派4的SDK程序中打开刚刚运行的demo,设置参数完成后与物联网平台连接。参数包括域名,不同域包括不同的站点。换置三元组之后回到树莓派4,再次运行显示为已连接物联网平台。
设备管理 Alink协议:设备端与物联网平台的交互协议,基于MQTT设计,JSON格式
规范设备端与云端之间的业务数据交互。物模型在使用上体现为Alink协议的一部分。
Alink协议物模型topic可在物联网平台自动订阅。
协议是双向的,是指从设备主动向云端请求,或者云端向设备请求,格式为上图所示。定义协议的帮助文档:https://help.aliyun.com/document_detail/68702.html 演示部分请看视频回顾。
设备管理 二进制数据与Alink协议
- 存量设备切换:使用二进制协议的存量设备
- 新设备希望使用二进制协议
在平台上提供脚本解析引擎时需要JS的脚本将二进制数据与JSON格式进行转换。演示部分请看视频回顾。
四、规则引擎
当所有的设备数据信息到达物联网平台之后,如何被自己的服务器获取可以通过规则引擎进行转发,转发到各种各样的云产品上,然后在云产品上获取。如上图所示包括两种形式,一种是规则引擎到各种各样的云产品再到ECS,第二种是在自己的ECS上使用服务端订阅,由于服务端订阅是免费的,所以所能用的流量是有限的。如果有大量的数据需要转发时,可以使用规则引擎到云产品,再到ECS使用云端SDK进行数据的搜索和获取。
扫描下方二维码,加入物联网钉钉交流群,查看更多精彩内容。