謝瑩
(閩西職業(yè)技術學院信息與制造學院 福建省龍巖市 364021)
現農村越來越多的務工人員往城市方向發(fā)展,導致農村的青年勞動力急劇下降,而我國作為農業(yè)大國,如何實現大規(guī)模農業(yè)種植仍是亟需解決的問題[2],伴隨著物聯(lián)網技術的發(fā)展,“智慧農業(yè)”將作為一種科學的解決途徑,其通過物聯(lián)網技術實現遠程監(jiān)控最終達到精準種植的目的,從而提高農業(yè)種植的產量[3]。
本系統(tǒng)使用的操作系統(tǒng)平臺是RT-Thread,其由我國團隊自主研發(fā),經過多年的升級,已逐步成為一個功能豐富的操作系統(tǒng),特別適用于一些資源受限的場合。相對于其它操作系統(tǒng)來說,RT-Thread 為用戶提供豐富的組件,如內核層、軟件包等等,能夠有效降低編程難度,因此,開發(fā)者通過RT-Thread 系統(tǒng)可以輕松地實現物聯(lián)網項目的搭建。另外,OneNET 平臺為用戶提供多樣的服務,可使物聯(lián)網設備實現快速上云,管理人員通過OneNET 平臺最終實現對大棚的遠程監(jiān)控,并根據實時采集的傳感器數據控制相應的執(zhí)行器,從而提高農業(yè)種植的生產效率并大大降低成本[4]。
系統(tǒng)的功能包含三個:采集大棚內溫濕度和光照數據、傳感器數據通過Wi-Fi 模塊傳輸至云平臺,云平臺下發(fā)指令控制輸出設備。系統(tǒng)的框架設計如圖1所示,其中MCU 采用STM32 芯片,數據采集層外接輸入設備(SHT3X 系列溫濕度傳感器、BH1750 光照度傳感器)及輸出設備(風機、補光燈),傳輸層使用ESP8266 模塊完成數據的傳輸,而應用層負責數據的存儲及展示,同時下發(fā)指令至設備端[5]。
圖1:系統(tǒng)的框架設計圖
為更好地滿足多任務的調度及提高系統(tǒng)響應效率,在本系統(tǒng)的軟件框架中設計RTOS 層,對RTOS 資源的規(guī)劃主要包括以下三個方面:
由于市面上傳感器廠商眾多,而不同的傳感器都需配套對應的驅動程序,因此為統(tǒng)一接口及提高代碼的可復用性,RT-Thread 為開發(fā)者提供SENSOR 設備以降低開發(fā)難度,如溫濕度、光照、壓力、距離等市面上常用的傳感器均已對接到SENSOR 框架中。SENSOR 驅動框架設計如圖2所示,大體分為兩步:完成傳感器ops接口的對接及設備的注冊。以讀取光照數據為例,先將BH1750 傳感器成功對接到SENSOR 框架,再通過線程的管理獲取光照數據。
圖2:SENSOR 驅動框架設計
在日常中遇到難解的大任務時,可將大任務根據不同的功能進行劃分,最終形成多個簡單的小任務,問題便迎刃而解,在RT-Thread 中線程作為最核心的功能,也是最小的調度單位,對應著一個個小任務,通過線程的方式編寫代碼可以簡化編程難度,使線程之間相互獨立,并提高程序響應速度。另外,通過設置任務的優(yōu)先級可以讓重要的任務得到優(yōu)先處理。
在本系統(tǒng)中需要完成的小任務有三個,其中兩個是采集傳感器溫濕度、光照數據的任務,第三個任務是在連接OneNET 云平臺過程中先進行初始化mqtt 協(xié)議的任務,因此根據不同的任務對應創(chuàng)建三個不同的線程:“read_SHT3X_thread”為采集溫濕度的線程、“read_light_thread”為采集光照度的線程、“mqtt_init_thread”為初始化mqtt 協(xié)議的線程。以采集光照度為例,通過以下幾個步驟即可讀取對應的光照數據,如表1所示。
表1:對應的光照數據
在采集數據的線程被創(chuàng)建成功之后,如何與初始化mqtt 協(xié)議的線程協(xié)作完成數據上云的任務?在RTThread 中線程間同步的方式主要三種,分別是信號量、互斥量和事件集。信號量作為輕型的內核對象,系統(tǒng)通過獲?。╰ake)及釋放(release)信號量的方式保證任務/線程正常有序地運行。
RTOS 層的主要工作流程圖如圖3所示,“read_SHT3X_thread”與“read_light_thread”線程是以永久等待的方式獲取信號量,當“等不到”時則一直等待,并且該線程處于掛起狀態(tài),同時系統(tǒng)執(zhí)行其它線程,而“等到了”則會喚醒該線程,緊接著運行該線程的后續(xù)代碼。
圖3:RTOS 層的主要工作流程圖
在主函數中設置信號量“mqtt_sem”的初始值為1,在“mqtt_init_thread”線程初始化成功之后釋放信號量,信號量的值加1,而“read_SHT3X_thread”與“read_light_thread”線程在分別獲取這2 個信號量之后則上傳數據至云端,因此,系統(tǒng)通過不斷釋放及獲取信號量的方式完成“mqtt_init_thread”、“read_SHT3X_thread”、“read_light_thread”這三個線程間的通信,最終將溫濕度及光照數據上傳至OnetNET 云平臺。
“mqtt_init_thread”線程釋放信號量的關鍵代碼如下:
該線程的主要功能為初始化MQTT 協(xié)議,由于初始化一次可能無法成功,因此,需要通過while 循環(huán)進行多次嘗試初始化,直到初始化成功,初始化成功之后則釋放一個信號量,并告知“read_SHT3X_thread”、“read_light_thread”線程可以上傳數據,再通過return 語句完成線程工作。
OneNET 物聯(lián)網平臺提供高效、安全的應用平臺,在設備端,適配多種傳輸協(xié)議,如MQTT、NB-IoT、EDP、Modbus 等[6],為開發(fā)者提供各種硬件終端的快速接入方案;另外,在應用層中為開發(fā)者提供各類開發(fā)需求,使得開發(fā)者能夠將重點更聚焦于自身應用的開發(fā),縮短開發(fā)周期,降低開發(fā)成本[7]。
在本系統(tǒng)中建立“智慧農業(yè)大棚系統(tǒng)”產品,并在該產品下創(chuàng)建“1 號檢測點”設備,設備創(chuàng)建成功之后,云平臺會生成對應的設備ID 及鑒權信息等,而設備端要接入云平臺則要進行相應的驗證。因此,在RTThread Settings 中的onenet 軟件包中需對設備ID、身份驗證信息、API 密鑰、產品ID、及主/產品APIKEY 這幾個關鍵參數進行配置,OneNET 軟件包配置如圖4所示,驗證通過后最終成功連接到云平臺。
圖4:OneNET 軟件包配置圖
OneNET 云平臺的管理界面如圖5所示,從圖中可知當前溫度、濕度及光照度的值。
圖5:OneNET 云平臺的管理界面
光照數據流如圖6所示,系統(tǒng)以2min 為周期上傳一次溫濕度及光照數據,以采集光照度為例,從圖中標號①可知采集頻率正確。當光照度低于閾值時,如圖中標號②所示,當前光照值為0 時,則自動開啟補光燈,如圖7所示。同理,當濕度高于閾值時,則開啟風機。
圖6:光照數據流
圖7:小熊派主板及拓展板
另外,云平臺通過下發(fā)命令功能手動控制風機和補光燈的開與關,如圖8所示。
圖8:云平臺的下發(fā)命令功能
基于RT-Thread的智慧農業(yè)大棚監(jiān)控系統(tǒng)通過OneNET 云平臺實現遠程監(jiān)控,并且實時采集傳感器數據并與風機、補光燈等執(zhí)行器進行聯(lián)動,為管理人員提供精準數據以提高種植產量。另外,系統(tǒng)對RTOS 資源進行合理規(guī)劃,應用線程及信號量完成數據的傳輸能夠有效提高系統(tǒng)響應速度,如為更好地滿足大棚的監(jiān)測需求,進一步完善系統(tǒng)功能,后期只需通過線程的管理即可增加其它傳感器,降低開發(fā)難度[8]。