?

基于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 中線程間同步的方式主要三種,分別是信號量、互斥量和事件集。信號量作為輕型的內核對象,系統通過獲?。╰ake)及釋放(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線程實現技術研究
么移動中間件線程池并發機制優化改進
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合