博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
开源项目|软件包应用作品:通用物联网系统平台
阅读量:2112 次
发布时间:2019-04-29

本文共 5273 字,大约阅读时间需要 17 分钟。

简介

当前国内互联网的发展迅猛,物联网云、边缘计算等技术也从概念技术逐步变为可靠的工程应用技术,加之国民对智能化生活的强烈需求,市场上涌现出许多的物联网设备需求,如智能售货柜、智能洗车机、智能储物箱等等。然而这些物联网设备与具体应用有关,不同的个体应用案例,对物联网设备的功能要求差异也较大。同时为了满足市场的商机,要求物联网设备能够快速开发出来,并且稳定可靠。因此为了避免重复开发打造一款通用的物联网平台非常必要。

物联网系统平台包含多个终端设备、后台服务器和人机设备(如手机、平板等),因此打造一套通用的物联网系统平台需要首先确定整个物联网系统的拓扑架构。

  • 物联网云端服务器: 负责与成千上万的终端设备进行数据通讯交互、同时还需具备消息转发和存储等功能,高可靠性,高并发性也是对这个后台服务器的基本要求。根据市场占有率、稳定性等方面评估,在本系统中选择使用阿里物联网云服务器。

  • 物联网设备终端:通用的物联网平台硬件包含常用的物联网通讯接口,支持不同的应用场景和实例。目前支持GPRS(没有用4G主要是因为成本原因),以太网,RS485(MODBUS协议扩展子模块)。

  • 物联网人机设备:主要指的是手机和平板电脑一类终端设备,它们通过运行专用的APP或者B/S模式的形态存在,通过物联网云服务器进行通讯,建立与设备终端的数据交互。

 功能描述

  • GPRS/以太网通讯功能:负责通过终端设备与阿里物联网服务器进行数据交付;

  • 通讯接口冗余功能:自动检测GPRS和以太网连接情况,优先使用以太网,在以太网失效或者无法连接时,自动切换至GPRS网络;

  • RS485功能:通过承载MODBUS-RTU协议,与不同的子功能设备进行通讯,实现不同的应用功能;

  • MQTT+TLS功能:使用MQTT+TLS与阿里物联网服务器进行数据通讯;

  • OTA+TLS功能:使用OTA+TLS与阿里物联网服务器进行固件更新,OTA部分使用HTTPS协议;

  • 文件系统:设备使用W25Q128作为存储盘实现FAT文件系统,同时也作为固件区、参数区的存储空间;

  • 调试功能:ADBD负责作为shell调试和文件传输接口

 作品使用的软件包列表

1、阿里物联网SDK包软件包

由于物联网云服务器采用阿里物联网平台,必须使用阿里物联网平台官方发布的SDK包与其平台进行通讯。在这里我们使用了RTT软件包库里的ali-iotkit软件包V3.0.X;

该SDK软件包通过ENV进行配置和下载后就可以直接使用,通过该软件包建立与阿里物联网平台的登录、主题的订阅与发布和OTA功能;

需要注意的是我使用的ali-iotkit软件包版本是V3.0.X,该版本与之前发布版本差异比较大,在代码组织结构和内存处理上都有较大差别,因此使用的时候需要仔细查看阿里物联网平台的官方文档。

在该软件包的使用过程中,发现了1个SDK包的移植问题,通过PR提交申请,并已经合并更新。

2、EasyFlash软件包

该软件包是RTT软件包中的一个明星软件包了,可以通过EasyFlash建立自己的KV数据库,用于各类参数的存储和更改。

我使用该软件包实现了设备三元素的存储、各类配置参数存储与修改。

我使用的该软件包的V4.0版本,该版本占用内存小,同时可以试想二进制存储,相比之前的版本在使用上方便很多。

3、AT device软件包

该软件包用于GPRS模块SIM800C的AT命令交互,可以方便的实现各类AT命令的收发。

按照RTT官方的构架规划:

  • AT Device与netdev框架结合,将SIM800C虚拟成一块网卡;

  • 结合SAL实现统一的AT socket的编程接口;

  • ali-iotkit通过mbdetls或者直接socket实现相关网络功能;

4、ADBD软件包

该软件包用于开发过程中的shell调试和文件传送,也可用于安装人员在现场的部署接口通道;

我使用该软件包主要用于调试方便,可以通过以太网或者USB实现shell功能,同时也可以通过该软件包实现文件的下载与上传;

5、FAL分区管理包

该软件包用于W25Q128存储芯片和on-chip的FLASH分区,通过该软件包将系统不同的存储空间,根据功能需求划分为不同的存储区域;

我使用该软件包实现以下分区:

  • app分区:该分区是代码执行区域,位于on-chip的FLASH上;

  • dl-area分区:该分区是FOTA下载代码的存储区域,通过物联网平台下载的代码文件直接存放于此;

  • df-area分区:该分区是出厂默认代码存储区域,在代码更新失败或需要恢复出厂代码时使用;

  • kv-area分区:该分区是存储各类参数的存储区域,该区域有EasyFlash统一操作;

  • elmfs分区:该分区是系统文件区,实现了FAT文件系统,用于各类文件的存储;

通过FAL软件包不仅仅是将存储空间分区,更重要的是它统一了不同存储空间的操作接口,同时保证其他程序和模块不会越界;

6、libmodbus软件包

该软件包用于MODBUS-RTU通讯协议的实现,通过该软件包实现与不同的功能子模块进行数据交互;

libmodbus不仅仅是RTU的通讯实现,还支持modbus-tcp的通讯实现,功能强大而且易用;

7、mbedtls软件包

该软件包是ARM公司开源的TLS加密包,本系统中未单独使用,只有ali-iotkit实现MQTT+TLS功能时调用;

8、cJSON软件包

该软件包用于解析和打包JSON数据包,用于ali-iotkit的消息解析和打包;

我使用该软件包用于阿里物联网平台MQTT消息的解析和打包,JSON数据格式可以通过手动组包完成,但是由于消息中的各类元素复杂,有字符串、浮点或者整数等,如果手动组包容易出错。使用cJSON软件包可以方便的进行不同元素的JSON数据组包,方便且不容易出错。需要注意的是cJSON软件包采用动态内存申请,在使用完毕后一定要释放内存;

9、netutils软件包

该软件包是RTT官方发布的一套网络工具软件包,在这里我只是用了ping和ntp功能:

  • ping功能:这个是大家最熟悉,用于测试网络是否畅通的工具;

  • ntp功能:按照阿里物联网平台的要求,上传的JSON消息中必须包含一个时间戳元素,因此设备需要自带RTC功能。而RTC不仅需要添加32.768K的晶振,而且还需要添加备用电池。因此为了节约成本,我们使用NTP功能,通过网络获取时间;

10、ota_download软件包

该软件包是RTT官方配合其bootloader发布的下载代码的软件模块,该软件包实现了ymodem和http的下载方式,在这里我们只使用了ymodem下载方式;

该模块使用非常简单,通过官方的文档就可以轻松完成,但是需要注意以下几点:

  • 下载区域设置:ota_download只是实现了通讯部分,下载完毕后需要指定存储区域。按照之前所述,我们可以设置为dl-area或者df-area分区;

  • 下载完成后的设置:代码下载完成后的处理方式是不一样的,我们这里下载后直接reboot,转到RT-FOTA软件中,自动检查是否需要更新;

11、SignalLed软件包

该软件包实现了LED闪烁控制,统一的操作接口,可非常方便的实现各类LED控制操作。我在很多产品上都使用了该软件包,非常感谢作者;

12、tinycryp软件包

该软件包实现了各类加密算法,比如BASE64、AES128、AES256等算法。

我使用了该软件包的AES128加密算法,主要是实现短距离无线通讯数据的加解密;

13、【新增】RT-FOTA软件包

首先说明这是一个山寨软件包,原始创意是RTT官方发布的bootloader。我这里只是编写了一个兼容了RTT官方OTA打包软件的bootloader,实现了下载文件的加解密和解压缩功能。

由于RTT的官方bootloader不开源,局限性非常大,很多功能实现不了。因此我就自己写了个bootloader,同时兼容了RTT官方OTA打包软件生成的rbl文件格式。

具体使用方法请参考:

RT-FOTA软件包,兼容RTT官方的打包软件,可实现对固件的加解密和压缩:https://gitee.com/spunky_973/rt-fota

 硬件框图

 物联网终端设备硬件框图如下:

 软件设计

目录结构

  • application: 应用代码存放;

  • board: 设备驱动存放,使用ST官方的CubeMX进行创建;

  • build: 编译文件存放;

  • figure: README.md的图片存放;

  • libraries:RTT和ST提供的针对STM32F4xx的库文件;

  • packages: RTT软件包存放;

  • rt-thread: 操作系统存放;

  • si-prj.si4project: SourceInsight工程文件存放;

使用RT-Thread系统,其软件框架就已经基本构架完成,采用compention方式进行自动初始化相关例程。这里我以智能存储柜应用为例子。

智能储存柜应用对终端设备的主要需求如下:

  1. 智能存储柜建立与阿里物联网平台的通讯连接,并订阅和发布相关主题;

  2. 智能存储柜通过订阅主题接收终端用户通过微信小程序向阿里物联网服务器发送相关命令,并执行相关操作;

  3. 智能存储柜具备远程设备更新能力;

  4. 智能存储柜具备通过MAC地址,自动在服务提供商的服务器进行注册并获得相关阿里物联网平台设备三元素信息;

  5. 智能存储柜实时监控将对撬门、关门超时或者其他违法操作进行本地和远程报警;

  6. 智能存储柜通过RS485总线承载标准的MODBUS协议与不同的功能子模块进行通讯,实现不同的应用功能;

智能存储柜应用设备使用了多个RTT软件包,这里不再详细叙述每个软件包的使用方法,请自行看代码和软件包的说明即可。以下详细阐述下应用业务层面的逻辑框架。应用层代码全部放置于/application文件夹中,其主要的实现文件就3个:mqtt-device.c,mqtt-ota.c,dev_modbus_rtu.c

mqtt-device.c中主要实现了两个线程:mqtt.main和mqtt.chk:

1static int ali_mqtt_init(void) 2{ 3    rt_thread_t tid; 4 5    /* 建立mqtt.main线程 */     6    tid = rt_thread_create("mqtt.main", mqtt_thread_main_thread, RT_NULL, 6 * 1024, RT_THREAD_PRIORITY_MAX / 2, 10); 7    if (tid != RT_NULL) 8        rt_thread_startup(tid); 910    /* 建立mqtt.chk线程 */11    tid = rt_thread_create("mqtt.chk", mqtt_connect_check_thread, RT_NULL, 512, RT_THREAD_PRIORITY_MAX / 2 + 1, 10);12    if (tid != RT_NULL)13        rt_thread_startup(tid);1415    return 0;16}17INIT_APP_EXPORT(ali_mqtt_init);

以下内容加以省略,如需获知详细内容请移步本项目开源首页:https://gitee.com/spunky_973/netbox(链接请复制至外部浏览器打开)

 作品演示

硬件设备展示

智能柜主设备的虚拟串口连接

由于使用了虚拟串口,上电延时后基本就看不到RTT的开机画面,直接显示MQTT的连接信息

为了方便调试和文件传送添加使用ADBD包,该软件包使用非常方便

智能主设备通过GPRS/以太网连接阿里物联网平台

智能柜主设备向阿里物联网平台订阅和发布的TOPIC

智能主设备使用阿里物联网平台进行OTA操作

在阿里物联网平台上进行设备功能调试

代码地址

本作品开源代码地址https://gitee.com/spunky_973/netbox

RT-FOTA开源代码地址https://gitee.com/spunky_973/rt-fota

(链接请复制至外部浏览器打开)

往期回顾

1.

3.

4.

5.

6.

7.

你可以添加微信17775982065为好友,注明:公司+姓名,拉进 RT-Thread 官方微信交流群!

RT-Thread

让物联网终端的开发变得简单、快速,芯片的价值得到最大化发挥。Apache2.0协议,可免费在商业产品中使用,不需要公布源码,无潜在商业风险。

长按二维码,关注我们

点击阅读原文,进入RT-Thread GitHub

你点的每个“在看”,我都认真当成了喜欢

转载地址:http://ronef.baihongyu.com/

你可能感兴趣的文章
Win10+VS2015编译libcurl
查看>>
Windows下使用jsoncpp
查看>>
Ubuntu下测试使用Nginx+uWsgi+Django
查看>>
Windows下编译x264
查看>>
visual studio调试内存泄漏工具
查看>>
开源Faac实现PCM编码AAC
查看>>
Windows下wave API 音频采集
查看>>
借船过河:一个据说能看穿你的人性和欲望的心理测试
查看>>
AndroidStudio 导入三方库使用
查看>>
Ubuntu解决gcc编译报错/usr/bin/ld: cannot find -lstdc++
查看>>
解决Ubuntu14.04 - 16.10版本 cheese摄像头灯亮却黑屏问题
查看>>
解决Ubuntu 64bit下使用交叉编译链提示error while loading shared libraries: libz.so.1
查看>>
VS生成DLL文件供第三方调用
查看>>
Android Studio color和font设置
查看>>
Python 格式化打印json数据(展开状态)
查看>>
Centos7 安装curl(openssl)和libxml2
查看>>
Centos7 离线安装RabbitMQ,并配置集群
查看>>
Centos7 or Other Linux RPM包查询下载
查看>>
运行springboot项目出现:Type javax.xml.bind.JAXBContext not present
查看>>
Java中多线程向mysql插入同一条数据冲突问题
查看>>