基于RT-Thread的智慧农业大棚监控系统设计

2023-05-30 01:22谢莹
电子技术与软件工程 2023年6期
关键词:信号量光照度线程

谢莹

(闽西职业技术学院信息与制造学院 福建省龙岩市 364021)

现农村越来越多的务工人员往城市方向发展,导致农村的青年劳动力急剧下降,而我国作为农业大国,如何实现大规模农业种植仍是亟需解决的问题[2],伴随着物联网技术的发展,“智慧农业”将作为一种科学的解决途径,其通过物联网技术实现远程监控最终达到精准种植的目的,从而提高农业种植的产量[3]。

本系统使用的操作系统平台是RT-Thread,其由我国团队自主研发,经过多年的升级,已逐步成为一个功能丰富的操作系统,特别适用于一些资源受限的场合。相对于其它操作系统来说,RT-Thread 为用户提供丰富的组件,如内核层、软件包等等,能够有效降低编程难度,因此,开发者通过RT-Thread 系统可以轻松地实现物联网项目的搭建。另外,OneNET 平台为用户提供多样的服务,可使物联网设备实现快速上云,管理人员通过OneNET 平台最终实现对大棚的远程监控,并根据实时采集的传感器数据控制相应的执行器,从而提高农业种植的生产效率并大大降低成本[4]。

1 系统的框架设计

系统的功能包含三个:采集大棚内温湿度和光照数据、传感器数据通过Wi-Fi 模块传输至云平台,云平台下发指令控制输出设备。系统的框架设计如图1所示,其中MCU 采用STM32 芯片,数据采集层外接输入设备(SHT3X 系列温湿度传感器、BH1750 光照度传感器)及输出设备(风机、补光灯),传输层使用ESP8266 模块完成数据的传输,而应用层负责数据的存储及展示,同时下发指令至设备端[5]。

图1:系统的框架设计图

2 RTOS资源的规划

为更好地满足多任务的调度及提高系统响应效率,在本系统的软件框架中设计RTOS 层,对RTOS 资源的规划主要包括以下三个方面:

2.1 SENESOR(传感器)驱动框架的使用

由于市面上传感器厂商众多,而不同的传感器都需配套对应的驱动程序,因此为统一接口及提高代码的可复用性,RT-Thread 为开发者提供SENSOR 设备以降低开发难度,如温湿度、光照、压力、距离等市面上常用的传感器均已对接到SENSOR 框架中。SENSOR 驱动框架设计如图2所示,大体分为两步:完成传感器ops接口的对接及设备的注册。以读取光照数据为例,先将BH1750 传感器成功对接到SENSOR 框架,再通过线程的管理获取光照数据。

图2:SENSOR 驱动框架设计

2.2 线程的管理

在日常中遇到难解的大任务时,可将大任务根据不同的功能进行划分,最终形成多个简单的小任务,问题便迎刃而解,在RT-Thread 中线程作为最核心的功能,也是最小的调度单位,对应着一个个小任务,通过线程的方式编写代码可以简化编程难度,使线程之间相互独立,并提高程序响应速度。另外,通过设置任务的优先级可以让重要的任务得到优先处理。

在本系统中需要完成的小任务有三个,其中两个是采集传感器温湿度、光照数据的任务,第三个任务是在连接OneNET 云平台过程中先进行初始化mqtt 协议的任务,因此根据不同的任务对应创建三个不同的线程:“read_SHT3X_thread”为采集温湿度的线程、“read_light_thread”为采集光照度的线程、“mqtt_init_thread”为初始化mqtt 协议的线程。以采集光照度为例,通过以下几个步骤即可读取对应的光照数据,如表1所示。

表1:对应的光照数据

2.3 信号量的规划

在采集数据的线程被创建成功之后,如何与初始化mqtt 协议的线程协作完成数据上云的任务?在RTThread 中线程间同步的方式主要三种,分别是信号量、互斥量和事件集。信号量作为轻型的内核对象,系统通过获取(take)及释放(release)信号量的方式保证任务/线程正常有序地运行。

RTOS 层的主要工作流程图如图3所示,“read_SHT3X_thread”与“read_light_thread”线程是以永久等待的方式获取信号量,当“等不到”时则一直等待,并且该线程处于挂起状态,同时系统执行其它线程,而“等到了”则会唤醒该线程,紧接着运行该线程的后续代码。

图3:RTOS 层的主要工作流程图

在主函数中设置信号量“mqtt_sem”的初始值为1,在“mqtt_init_thread”线程初始化成功之后释放信号量,信号量的值加1,而“read_SHT3X_thread”与“read_light_thread”线程在分别获取这2 个信号量之后则上传数据至云端,因此,系统通过不断释放及获取信号量的方式完成“mqtt_init_thread”、“read_SHT3X_thread”、“read_light_thread”这三个线程间的通信,最终将温湿度及光照数据上传至OnetNET 云平台。

“mqtt_init_thread”线程释放信号量的关键代码如下:

该线程的主要功能为初始化MQTT 协议,由于初始化一次可能无法成功,因此,需要通过while 循环进行多次尝试初始化,直到初始化成功,初始化成功之后则释放一个信号量,并告知“read_SHT3X_thread”、“read_light_thread”线程可以上传数据,再通过return 语句完成线程工作。

3 OneNET云平台的设计

OneNET 物联网平台提供高效、安全的应用平台,在设备端,适配多种传输协议,如MQTT、NB-IoT、EDP、Modbus 等[6],为开发者提供各种硬件终端的快速接入方案;另外,在应用层中为开发者提供各类开发需求,使得开发者能够将重点更聚焦于自身应用的开发,缩短开发周期,降低开发成本[7]。

在本系统中建立“智慧农业大棚系统”产品,并在该产品下创建“1 号检测点”设备,设备创建成功之后,云平台会生成对应的设备ID 及鉴权信息等,而设备端要接入云平台则要进行相应的验证。因此,在RTThread Settings 中的onenet 软件包中需对设备ID、身份验证信息、API 密钥、产品ID、及主/产品APIKEY 这几个关键参数进行配置,OneNET 软件包配置如图4所示,验证通过后最终成功连接到云平台。

图4:OneNET 软件包配置图

4 系统测试

OneNET 云平台的管理界面如图5所示,从图中可知当前温度、湿度及光照度的值。

图5:OneNET 云平台的管理界面

光照数据流如图6所示,系统以2min 为周期上传一次温湿度及光照数据,以采集光照度为例,从图中标号①可知采集频率正确。当光照度低于阈值时,如图中标号②所示,当前光照值为0 时,则自动开启补光灯,如图7所示。同理,当湿度高于阈值时,则开启风机。

图6:光照数据流

图7:小熊派主板及拓展板

另外,云平台通过下发命令功能手动控制风机和补光灯的开与关,如图8所示。

图8:云平台的下发命令功能

5 结束语

基于RT-Thread的智慧农业大棚监控系统通过OneNET 云平台实现远程监控,并且实时采集传感器数据并与风机、补光灯等执行器进行联动,为管理人员提供精准数据以提高种植产量。另外,系统对RTOS 资源进行合理规划,应用线程及信号量完成数据的传输能够有效提高系统响应速度,如为更好地满足大棚的监测需求,进一步完善系统功能,后期只需通过线程的管理即可增加其它传感器,降低开发难度[8]。

猜你喜欢
信号量光照度线程
基于STM32的mbedOS信号量调度机制剖析
光照度传感器在智能家居照明系统中的应用
Nucleus PLUS操作系统信号量机制的研究与测试
“农地种电”型光伏电站可种植区域光温环境参数研究
浅谈linux多线程协作
μC/OS- -III对信号量的改进
Linux操作系统信号量机制的实时化改造
基于上下文定界的Fork/Join并行性的并发程序可达性分析*
Linux线程实现技术研究
么移动中间件线程池并发机制优化改进