开源项目|软件包应用作品:通用物联网系统平台
Posted RTThread物联网操作系统
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开源项目|软件包应用作品:通用物联网系统平台相关的知识,希望对你有一定的参考价值。
简介
当前国内互联网的发展迅猛,物联网云、边缘计算等技术也从概念技术逐步变为可靠的工程应用技术,加之国民对智能化生活的强烈需求,市场上涌现出许多的物联网设备需求,如智能售货柜、智能洗车机、智能储物箱等等。然而这些物联网设备与具体应用有关,不同的个体应用案例,对物联网设备的功能要求差异也较大。同时为了满足市场的商机,要求物联网设备能够快速开发出来,并且稳定可靠。因此为了避免重复开发打造一款通用的物联网平台非常必要。
物联网系统平台包含多个终端设备、后台服务器和人机设备(如手机、平板等),因此打造一套通用的物联网系统平台需要首先确定整个物联网系统的拓扑架构。
-
物联网云端服务器: 负责与成千上万的终端设备进行数据通讯交互、同时还需具备消息转发和存储等功能,高可靠性,高并发性也是对这个后台服务器的基本要求。根据市场占有率、稳定性等方面评估,在本系统中选择使用阿里物联网云服务器。 -
物联网设备终端: 通用的物联网平台硬件包含常用的物联网通讯接口,支持不同的应用场景和实例。目前支持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软件包
3、AT device软件包
-
AT Device与netdev框架结合,将SIM800C虚拟成一块网卡; -
结合SAL实现统一的AT socket的编程接口; -
ali-iotkit通过mbdetls或者直接socket实现相关网络功能;
4、ADBD软件包
5、FAL分区管理包
-
app分区:该分区是代码执行区域,位于on-chip的FLASH上; -
dl-area分区:该分区是FOTA下载代码的存储区域,通过物联网平台下载的代码文件直接存放于此; -
df-area分区:该分区是出厂默认代码存储区域,在代码更新失败或需要恢复出厂代码时使用; -
kv-area分区:该分区是存储各类参数的存储区域,该区域有EasyFlash统一操作; -
elmfs分区:该分区是系统文件区,实现了FAT文件系统,用于各类文件的存储;
6、libmodbus软件包
7、mbedtls软件包
8、cJSON软件包
9、netutils软件包
-
ping功能:这个是大家最熟悉,用于测试网络是否畅通的工具; -
ntp功能:按照阿里物联网平台的要求,上传的JSON消息中必须包含一个时间戳元素,因此设备需要自带RTC功能。而RTC不仅需要添加32.768K的晶振,而且还需要添加备用电池。因此为了节约成本,我们使用NTP功能,通过网络获取时间;
10、ota_download软件包
-
下载区域设置:ota_download只是实现了通讯部分,下载完毕后需要指定存储区域。按照之前所述,我们可以设置为dl-area或者df-area分区; -
下载完成后的设置:代码下载完成后的处理方式是不一样的,我们这里下载后直接reboot,转到RT-FOTA软件中,自动检查是否需要更新;
11、SignalLed软件包
12、tinycryp软件包
13、【新增】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方式进行自动初始化相关例程。这里我以智能存储柜应用为例子。
智能储存柜应用对终端设备的主要需求如下:
智能存储柜建立与阿里物联网平台的通讯连接,并订阅和发布相关主题;
智能存储柜通过订阅主题接收终端用户通过微信小程序向阿里物联网服务器发送相关命令,并执行相关操作;
智能存储柜具备远程设备更新能力;
智能存储柜实时监控将对撬门、关门超时或者其他违法操作进行本地和远程报警;
智能存储柜通过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);
9
10 /* 建立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);
14
15 return 0;
16}
17INIT_APP_EXPORT(ali_mqtt_init);
作品演示
硬件设备展示
智能柜主设备的虚拟串口连接
由于使用了虚拟串口,上电延时后基本就看不到RTT的开机画面,直接显示MQTT的连接信息
为了方便调试和文件传送添加使用ADBD包,该软件包使用非常方便
智能主设备通过GPRS/以太网连接阿里物联网平台
智能柜主设备向阿里物联网平台订阅和发布的TOPIC
智能主设备使用阿里物联网平台进行OTA操作
在阿里物联网平台上进行设备功能调试
代码地址
(链接请复制至外部浏览器打开)
3.
4.
5.
6.
7.
RT-Thread
让物联网终端的开发变得简单、快速,芯片的价值得到最大化发挥。Apache2.0协议,可免费在商业产品中使用,不需要公布源码,无潜在商业风险。
以上是关于开源项目|软件包应用作品:通用物联网系统平台的主要内容,如果未能解决你的问题,请参考以下文章
Spring Cloud开源可分布式物联网(IOT)平台,完整物联网解决方案
应用SuperIO(SIO)和开源跨平台物联网框架ServerSuperIO(SSIO)构建系统的整体方案