前言

8.1.1 物联网平台搭建

8.2.1 LinkDevelop平台使用

8.2.2 iotkit-embedded


前言

传统的物联网项目,需要嵌入式硬件、云平台。对于我们做嵌入式的来说,从零开始搭建一个物联网云平台几乎是不现实的。

这里涉及到许多前后端的知识。

通过阿里云物联网平台,我们可以在不懂前后端开发的基础上,半个小时候左右就可以搭建一个智慧农业的物联网云平台框架。

效果如下:

大数据面板:

设备管理:

设备地图分布:

支持视频监控:

 

 

多个组件图标功能:

 

8.1.1 物联网平台搭建

物联网平台搭建的话,我放在了bilibili这里:

https://www.bilibili.com/video/bv1DK4y1s7Pc 

 

8.2.1 LinkDevelop平台使用

1.注册

打开LinkDevelop官网:https://iot.aliyun.com/products/linkdevelop。单击“立即使用”按钮,如图8.3所示。

图8.3 LinkDevelop官网

2.新建项目

单击左侧的“项目管理”按钮,随后再单击“新建项目”按钮,进入新建项目界面,如图8.4所示。

图8.4 项目管理界面

随后在弹出来的新建项目界面上,单击“新建空白项目”按钮,如图8.5所示。

图8.5 新建项目界面

弹出新建空白项目界面后,在“项目名称”中输入test,在“描述”中输入这是一个测试项目,单击“确认”按钮,如图8.6所示。

图8.6 新建空白项目界面

3.创建产品

单击左侧的“产品”按钮,在弹出的界面中,单击“创建产品”按钮,如图8.7所示。

图8.7 产品界面

在“产品名称”中输入“sensor”,如图8.8所示。

图8.8 创建产品

单击“请选择标准品类”下拉框,弹出“选择品类”选择框,阿里云物联网平台预置了许多产品类型,读者可以根据自己的需求选择对应,本书选择“地磁检测器”,如图8.9所示。

图8.9 选择产品种类

其他选项按默认值即可,单击“保存”按钮,如图8.10所示。

图8.10 创建产品

4.创建设备

页面左上角有个三角形下拉框,可以选择项目,选择我们刚才创建的test项目,再单击“设备”按钮,最后单击“新增设备”按钮,如图8.11所示。

图8.11 设备界面

在“产品”选择下拉框中,选择我们刚才创建的产品sensor,单击“提交”按钮,如图8.12所示。

图8.12 新增设备

在弹出的新界面中,单击“下载激活凭证”按钮,下载sheet.xlsx文件,如图8.13所示。保存sheet.xlsx文件,里面的内容后续会用到

图8.13 下载激活凭证

 

8.2.2 iotkit-embedded

iotkit-embedded是阿里云物联网平台提供的一套C语言编写的SDK包。通过该SDK包,我们可以使我们的嵌入式设备接入到阿里云物联网平台。

SDK使用MQTT/HTTP连接物联网平台,因此要求设备支持TCP/IP协议栈;对于Zigbee、ZWave之类的不支持TCP/IP协议栈的设备,需要通过网关接入物联网平台,这种情况下网关需要集成SDK。

iotkit-embedded下载地址:https://github.com/aliyun/iotkit-embedded 。

SDK提供了API供设备厂商调用,用于实现与阿里云IoT平台通信以及一些其他的辅助功能,例如WiFi配网、本地控制等。

另外,C语言版本的SDK被设计为可以在不同的操作系统上运行,例如Linux、FreeRTOS、Windows,因此SDK需要OS或者硬件支持的操作被定义为一些HAL函数,在使用SDK开发产品时需要将这些HAL函数进行实现。

产品的业务逻辑、SDK、HAL的关系如图8.15所示。

 

图8.15 SDK 框架

表8.1列出了SDK包的相关功能:

功能模块

功能点

设备连云

MQTT连云,设备可通过MQTT与阿里云IoT物联网平台通信。
CoAP连云,设备可通过CoAP与阿里云IoT物联网平台通信,用于设备主动上报信息的场景。
HTTPS连云,设备可通过HTTPS与阿里云IoT物联网平台通信,用于设备主动上报信息的场景。

设备身份认证

一机一密。
一型一密。

物模型

使用属性、服务、事件对设备进行描述以及实现,包括:
属性上报、设置。
服务调用。
事件上报。

OTA

设备固件升级。

远程配置

设备配置文件获取。

子设备管理

用于让网关设备添加、删除子设备,以及对子设备进行控制。

WiFi配网

将WiFi热点的SSID/密码传输给WiFi设备,包括:
一键配网。
手机热点配网。
设备热点配网。
零配。

设备本地控制

局域网内,通过CoAP协议对设备进行控制,包括:ALCS Server,被控端实现ALCS Client,控制端实现,通常被希望通过本地控制设备的网关使用。

设备绑定支持

设备绑定token维护,设备通过WiFI、以太网接入,并且通过阿里云开放智能生活平台管理时使用。

设备影子

在云端存储设备指定信息供APP查询,避免总是从设备获取信息引入的延时。

Reset支持

当设备执行Factory Reset时,通知云端清除记录。例如清除设备与用户的绑定关系,清除网关与子设备的关联关系等。

时间获取

从阿里云物联网平台获取当前最新的时间。

文件上传

通过HTTP2上传文件。

8.2.3 ali-iotkit

1.简介

ali-iotkit是 RT-Thread 移植的用于连接阿里云 IoT 平台的软件包。基础 SDK是阿里提供的iotkit-embedded。

iotkit SDK 为了方便设备上云封装了丰富的连接协议,如 MQTT、CoAP、HTTP、TLS,并且对硬件平台进行了抽象,使其不受具体的硬件平台限制而更加灵活。在代码架构方面,iotkit SDK 分为三层,如图8.16所示:

 

图8.16 iotkit SDK框架

硬件平台抽象层:也简称HAL层(Hardware Abstract Layer),抽象不同的嵌入式目标板上,操作系统对SDK的支撑函数,包括网络收发、 TLS/DTLS 通道建立和读写, 内存申请是否和互斥量加锁解锁等。

中间层称为SDK内核实现层(IoT SDK Core Implements):物联网平台 C-SDK 的核心实现部分, 它基于 HAL 层接口完成了 MQTT/CoAP 通道等的功能封装, 包括 MQTT 的连接建立、 报文收发、CoAP 的连接建立、报文收发、 OTA 的固件状态查询和 OTA 的固件下载等。中间层的封装,使得用户无需关心内部实现逻辑,可以不经修改地应用。

最上层称为SDK接口声明层(IoT SDK Interface Layer):最上层是为应用提供 API 的,用户使用该层的 API 完成具体的业务逻辑。

2.配置

RT-Thread已经为我们集成了ali-iotkit软件,通过简单的menuconfig配置即可使用。配置项位于:RT-Thread online packages→ IoT - internet of things→ IoT Cloud,如图8.17所示。

图8.17 Ali-iotkit配置项

按空格键选中“Ali-iotkit”后,再按回车键进入详细配置项。

(1)version选择v2.0.3。

(2)Config Product Key (NEW)填写我们之前下载的激活凭证sheet.xlsx文件中的Productkey项的内容。

(3)Config Device Name (NEW)填写sheet.xlsx文件中的DeviceName项的内容。

(4)Config Device Secret (NEW)填写sheet.xlsx文件中的DeviceName项的内容。

其他配置项如图8.18所示。

图8.18 Ali-iotkit详细配置

阿里 TLS 认证过程中数据包较大,这里需要增加 TLS 帧大小,OTA 的时候至少需要 8K 大小,修改menuconfig配置项:RT-Thread online packages→security packages →mbedtls: An portable and flexible SSL/TLS library,把Maxium fragment length in bytes的数值改成8192,如图8.19所示。

图8.19 mbedtls配置

退出menuconfig,输入pkgs --update更新下载ali-iotkit软件包,下载软件包后,输入scons --target=mdk5重新生成工程文件。

需要注意的是,ali-iotkit自带mqtt相关功能,如果之前代码配置选择了Paho MQTT,需要把Paho MQTT软件包去掉,否则编译报错。

软件包位于Chapter8\rt-thread\bsp\stm32\stm32f407-atk-explorer\packages\ali-iotkit-v2.0.3软件包目录如图8.20所示。

图8.20 ali-iotkit软件包目录

其中各文件说明如下:

docs:软件包说明文档。

iotkit-embedded:阿里云物联网平台提供的SDK包。

ports:RT-Thread相关移植文件。

samples:RT-Thread提供的一个简单测试程序。

8.2.4 实验

1.上传消息到云端

(1)打开Chapter8\rt-thread\bsp\stm32\stm32f407-atk-explorer\ project.uvprojx工程文件,其中SDK包相关的代码文件包含在ali-iotkit文件夹下,如图8.21所示。

图8.21 项目工程

(2)编译并下载程序到开发板,先确保开发板能ping通阿里云服务器。输入ping iot.aliyun.com并发送回车,有看到如下打印信息则代表网络正常。

msh />ping iot.aliyun.com

60 bytes from 42.120.219.14 icmp_seq=0 ttl=230 time=42 ms

60 bytes from 42.120.219.14 icmp_seq=1 ttl=230 time=41 ms

60 bytes from 42.120.219.14 icmp_seq=2 ttl=230 time=41 ms

60 bytes from 42.120.219.14 icmp_seq=3 ttl=230 time=41 ms

(3)打开LinkDevelop的设备管理界面,可以看到之前创建的设备的状态是“未激活”,如图8.22所示。

图8.22 设备列表

(4)打开串口工具,发送ali_mqtt_test start命令给开发板,可以看到开发板有如下打印信息:

msh />ali_mqtt_test start

[inf] iotx_device_info_init(40): device_info created successfully!

[dbg] iotx_device_info_set(50): start to set device info!

[dbg] iotx_device_info_set(64): device_info set successfully!

[dbg] guider_print_dev_guider_info(271): ....................................................

[dbg] guider_print_dev_guider_info(272):           ProductKey : a1wUxrR2Xd4

[dbg] guider_print_dev_guider_info(273):           DeviceName : 3mX9eDe8wt0FDt2hIRxf

[dbg] guider_print_dev_guider_info(274):             DeviceID : a1wUxrR2Xd4.3mX9eDe8wt0FDt2hIRxf

host: a1wuxrr2xd4.iot-as-mqtt.cn-shanghai.aliyuncs.com

[inf] iotx_mc_init(1703): MQTT init success!

[inf] _ssl_client_init(175): Loading the CA root certificate ...

 [inf] iotx_mc_connect(2035): mqtt connect success!

[dbg] iotx_mc_report_mid(2259): MID Report: started in MQTT

[dbg] iotx_mc_report_mid(2276): MID Report: json data = '{"id":"a1wUxrR2Xd4_3mX9eDe8wt0FDt2hIRxf_mid","params":{"_sys_device_mid":"example.demo.module-id","_sys_device_pid":"example.demo.partner-id"}}'

(5)有看到[inf] iotx_mc_connect(2035): mqtt connect success!则表示成功连接上LinkDevelop。重新查看LinkDevelop的设备管理界面,可以看到之前创建的设备的状态是“在线”,说明设备和LinkDevelop通信正常,如图8.23所示。

图8.23 设备列表

(6)输入ali_mqtt_test pub open并发送回车,开发板将会推送数据到云端,串口打印信息显示code值为200,则表示推送数据成功。

_demo_message_arrive|203 :: Payload: '{"code":200,"data":{"LightSwitch":"tsl parse: params not exist","RGBColor":"tsl parse: params not exist"},"id":"1","\0

(7)在设备列表中单击“查看”按钮,如图8.24所示:

图8.24设备列表

(8)在弹出来的设备详情页中,单击“日志服务”按钮,再单击“上行消息分析”按钮,可以看到开发板总共发送了2条消息,其中时间较早的消息是开发板登录时发送的,最新的信息是刚才的ali_mqtt_test pub open命令所发送得到消息。

图8.25 设备详情

(9)单击对应消息的MessageID,可以查看消息的具体内容,如图8.26所示。

图8.26 消息内容

2.云端发布消息

(1)单击左上角的小三角形,选择 test,然后单击“产品”按钮,单击“sensor”对应的“查看”按钮,如图8.27所示。

图8.27 产品列表

(3)单击“功能定义”按钮,随后单击“自定义功能”按钮,最后单击“添加自定义功能”按钮,如图8.28所示。

图8.28 功能定义

(4)功能名称选择“测试001”,其他选型默认即可,单击“确认”,如图8.29所示。

图8.29 自定义功能

(5)单击右上角的“发布”按钮,发布新功能,如图8.30所示。

图8.30 发布功能

(6)再弹出来的界面中,把所有的“请确认”按钮后面的

都选上,单击“发布”按钮,如图8.31所示。

图8.31 确认发布

(7)回到刚才的设备详情页,单击“在线调试”按钮,单击“调试真实设备” 按钮,单击“属性调试”按钮,调试功能选择“测试001(Test001)”,方法选择“设置”,如图8.32所示。

图8.32 在线调试

修改调试信息的内容为{ "Test001": "1"},如图8.33所示,单击“发送指令”按钮。

图8.33 发送指令

(8)可以看到开发板有如下打印信息:

'/sys/a1NegcqX690/AwpDLCcqeb7TSbNevNAr/thing/service/property/set' (Length: 64)

_demo_message_arrive|203 :: Payload: '{"method":"thing.service.property.set","id":"1302514310","params":{"Test001":"1"},"version":"1.0.0"}' (Length: 100)

_demo_message_arrive|207 :: ----

可以看到接收到LinkDevelop发送的{"Test001": "1"}消息,通信成功。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐