搭建智慧农业物联网云平台——基于阿里云物联网平台构建_写一个农业云平台系统出来有多难-程序员宅基地

技术标签: 阿里云  智慧农业  物联网  物联网平台  文章杂谈  物联网云平台  

前言

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"}消息,通信成功。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/aa120515692/article/details/107288925

智能推荐

安全防御------防火墙_防火墙策略里local区域-程序员宅基地

文章浏览阅读563次。本章主要讲解了防火墙的相关知识,包括基本概念,技术类型,安全区域,状态检测等。还包含FTP协议的有关概念以及ASPF技术。_防火墙策略里local区域

openjudge1.3答案_openjudge题库答案1.3-程序员宅基地

该文章为程序代码,主要包括使用C++和C语言解决问题的代码片段。

短视频矩阵系统的发展趋势与未来展望-程序员宅基地

文章浏览阅读600次,点赞12次,收藏11次。随着移动互联网的普及和用户消费习惯的改变,越来越多的内容创作者和企业开始注重短视频矩阵系统的建设。短视频矩阵系统具有多平台、多账号、多内容的特点,能够实现多角度、多层次的内容覆盖,提高品牌曝光度和用户粘性。随着短视频市场的成熟,商业模式创新将成为短视频矩阵系统可持续发展的重要保障。未来,短视频平台将探索更多元化的盈利模式,如广告投放、付费观看、打赏等,实现创作者、平台和用户的共赢。本文将探讨短视频矩阵系统的发展趋势和未来展望,以期为相关行业的发展提供有益的参考。三、短视频矩阵系统的未来展望。

更便捷更高效地生产影像地图瓦片_瓦片数据库生产-程序员宅基地

文章浏览阅读1k次。针对海量影像地图,采用地理处理建模构建切片业务流程,并应用“基于金字塔算法生成瓦片”的方案实施更高效的影像地图瓦片生产。_瓦片数据库生产

00942 ora 表存在_"ORA-00942: 表或视图不存在" 的原因和解决方法-程序员宅基地

文章浏览阅读1.3w次。1、问题产生的原因Oracle 是大小写敏感的,我们创自己写Sql脚本创建表的时候Oracle会自动将我们的表名,字段名转成大写。2、问题分析但是 Oracle 同样支持"" 语法,将表名或字段名加上""后,Oracle不会将其转换成大写。如果加上了"",那么我们采用一般的SQL语句查询则会产生“ORA-00942: 表或视图不存在 ”,因此SQL脚本中需要将表名也加上""。例如:select*..._ora00942表或视图不存在,但明明存在

ES2007的tomcat报错的原因_tomcat报错esservicecontraller-程序员宅基地

文章浏览阅读392次。方正ES2007,在能成功连接数据库的前提下,如果tomcat报错,那么你就可以看看你的ip地址是否仍然是自动获取ip,如果是请更改过来,使用具体的ip地址(类似192.168.1.11....),再跑一遍就Ok了。_tomcat报错esservicecontraller

随便推点

用深度神经网络写一段股市预测代码-程序员宅基地

文章浏览阅读79次。根据历史数据建立模型,使用深度神经网络(DNN)训练模型,以预测股市走势:import numpy as npimport tensorflow as tf# 准备数据X = np.array([[1, 2, 3], [4, 5, 6]])y = np.array([7, 8])# 创建模型model = tf.keras.models.Sequential()model.add(tf...._深度学习股票预测代码

Linux updatedb命令教程:如何更新locate命令的文件名数据库(附实例详解和注意事项)-程序员宅基地

文章浏览阅读2k次,点赞60次,收藏42次。updatedb(update database)命令用于更新locate命令使用的文件名数据库。如果数据库已经存在,它的数据会被重用,以避免重新读取未改变的目录。updatedb通常由cron每日运行,以更新默认数据库。

[hadoop全分布部署]安装Hadoop、验证Hadoop①_查看相应的jvm验证hadoop是否启动成功-程序员宅基地

文章浏览阅读1.1w次,点赞198次,收藏195次。一、配置hadoop格式化二、查看 Java 进程三、查看 HDFS 的报告_查看相应的jvm验证hadoop是否启动成功

Docker学习总结(完)_docker 的学习心得-程序员宅基地

文章浏览阅读370次。Docker学习总结Docker简介Docker 使用客户端-服务器 (C/S) 架构模式,Docker的守护进程运行在主机上。通过Socket从客户端访问Docker为什么比虚拟机快Docker比虚拟机的抽象层更少Docker共享操作系统内核,每个VM都包含一整套操作系统新建一个容器时,Docker不需要像虚拟机一样重新加载一个操作系统内核,避免了引导操作Docker镜像运行流程Docker安装Nginx执行docker search nginx查询是否有nginx镜像,推荐_docker 的学习心得

如何快速设计元器件原理图库和PCB封装库?_贸泽电子-程序员宅基地

文章浏览阅读1w次,点赞35次,收藏163次。在设计电路的过程中经常会遇到这样的问题:无法快速找到合适的元器件原理图封装和PCB封装(Footprint),通常最基本的做法是百度找找别人分享的资源,或者自己按照尺寸绘制。这样做法效率较低,影响到项目的开发进度,本篇博文将分享三个小技巧,帮助硬件朋友快速设计元器件封装。_贸泽电子

IJPay支付开源 让你的代码飞起来_ijpay 如何运行-程序员宅基地

文章浏览阅读631次。今天我要给大家推荐一个非常棒的支付开源项目,最近大家在不忙的时候可以学习一下,项目在GitHub有3.3k ,GITEE已有6.5k之多~特别说明:不依赖任何第三方 MVC 框架,仅仅作为工具使用简单快速完成支付模块的开发,可轻松嵌入到任何系统里。微信支付支持多商户多应用,普通商户模式与服务商商模式当然也支持境外商户、同时支持 Api-v3 与 Api-v2 版本的接口。支付宝支付支持多商户多应用,签名同时支持普通公钥方式与公钥证书方式目前封装好的SDK仅支持安卓 ,IOS还在开发中~~~~IJP_ijpay 如何运行

推荐文章

热门文章

相关标签