概述
? ? ???隨著物聯(lián)網(wǎng)技術(shù)的廣泛推廣,產(chǎn)生了農(nóng)業(yè)物聯(lián)網(wǎng)。做智慧農(nóng)業(yè)物聯(lián)網(wǎng)項目,首先要解決的是農(nóng)業(yè)數(shù)據(jù)的采集問題;比如空氣的溫濕度、土壤的溫濕度、二氧化碳濃度、水培溶液的EC值、PH值等數(shù)據(jù);結(jié)合此次RTT大賽,筆者決定基于ART-Pi板子和RT-Thread實時操作系統(tǒng),開發(fā)一個農(nóng)業(yè)數(shù)據(jù)采集器。此次數(shù)據(jù)采集器筆者以ART-PI開發(fā)板為核心板,外接了一款溫濕度傳感器模塊、GPS模塊、OLED模塊、串口通訊模塊進行了基礎(chǔ)Demo版本代碼編寫與調(diào)試,實現(xiàn)了采集溫濕度數(shù)據(jù)在OLED屏上顯示、GPS位置信號信息采集后經(jīng)串口輸出等功能。后續(xù)還有采集的數(shù)據(jù)經(jīng)板載的WiFi模塊上傳至TCP Server?? 、阿里IOT平臺的規(guī)劃。
開發(fā)環(huán)境
硬件:ART-PI(STM32H750XB)、GPS模塊、DHT11、0.96寸OLED屏、USB轉(zhuǎn)串口模塊
RT-Thread版本:RT-Thread V 4.0.3
開發(fā)工具及版本:RT-Thread Studio?版本: 2.0.0
RT-Thread使用情況概述
(1)內(nèi)核部分:調(diào)度器,信號量等。
? ? ? ? ?調(diào)度器:創(chuàng)建多個線程來實現(xiàn)不同的工作。
? ? ? ? ?信號量:用來線程間的同步。
(2)組件部分:UART框架,SENSOR框架。
UART框架:使用了1個串口,用于采集GPS模塊數(shù)據(jù)、同時用于串口輸出數(shù)據(jù)。
II2C框架:使用了1路II2C接口用于連接OLED屏,進行采集溫濕度數(shù)據(jù)的顯示。
SENSOR框架:使用DHT11采集空氣溫濕度
(3)軟件包:u8g2?? netutils?? dht11 ??gps_rmc
硬件框架
軟件框架說明
軟件模塊說明
主函數(shù)中執(zhí)行了
wlan_autoconnect_init();
serial_init();
oled_init();
DHT11_init();
創(chuàng)建了3個線程,其中
dht11_thread_entry()用于讀取溫濕度傳感器數(shù)據(jù);
serial_thread_entry()用于讀取串口1 RX引腳接收到的GPS模塊數(shù)據(jù);
演示效果
比賽感悟
? ? ? ?首先筆者要表揚一下自己,能在工作之余、在下班后回家還要哄娃入睡之余,利用了一切可以利用的時間,進行STM32單片機的理論、RT-Thread Studio平臺、II2C通訊、串口通訊理論知識的學習,然后小白一樣的摸索著玩ART-Pi;筆者之前是Java程序員出身,在Java代碼層面是打通過跟阿里IOT平臺進行數(shù)據(jù)采集對接的,可是用STM32單片機來做,尤其是要熟悉STM32單片機的開發(fā)流程與技巧、RT-Thread 開發(fā)環(huán)境與編程規(guī)范等,作者實在是顯得有點稚嫩,畢竟想要很快入行,是需要時間積累的。筆者還是5年前玩過AVR單片機,之后的工作主要是PLC、C#、JAVA相關(guān),最近的工作是基于GoLinux系統(tǒng)進行應用程序開發(fā),講真筆者對STM32單片機的知識了解還是相當欠缺的,Ubuntu系統(tǒng)用過半年左右,對于實時操作系統(tǒng)比如RTOS等,不曾了解;可是這些并不能阻止我對國產(chǎn)操作系統(tǒng)的關(guān)心與關(guān)注。當某次在論壇看到RT-Thread Smart發(fā)布會宣傳時,筆者一下子就被深深吸引,在參會中看到了搭載RT-Thread Smart內(nèi)核的板子啟動很快,于是乎當時就萌發(fā)了了解一下RT-Thread的想法。后面也就有了參加此次RT-Thread全連接創(chuàng)意創(chuàng)客大賽的故事。
? ? ? 筆者的初心并不是參加比賽獲得名次,而是通過參與,讓自己去熟悉RT-Thread,熟悉RT-Thread跟STM32單片機的聯(lián)姻;想著能不能基于RT-Thread操作系統(tǒng)、APT-Pi板子做些數(shù)據(jù)采集的實驗測試;幸不辜負青春,通過此次嘗試,筆者調(diào)通了APT-Pi 的板載串口1的收發(fā)控制、II2C通訊驅(qū)動OLED屏、采集單總線的溫濕度傳感器DHT11、板載WiFi模塊進行參數(shù)配置聯(lián)網(wǎng)、TCP通訊測試、GPS信號數(shù)據(jù)截取處理等;在整個邊學習邊碼字的過程中也遇到了一些困難,比如調(diào)試II2C接口的氣壓傳感器時,折騰了幾天就是不出結(jié)果,還不知道問題出在哪,還有調(diào)試SPI接口液晶屏時,也是遇到困難,最后曲線救國,換成了II2C接口的OLED屏,還好調(diào)通了。主要是筆者時間上受限了,工作上幾個項目要跟進,期間去出差了外省幾次;下班后回家寶寶又會粘著我求抱抱。本來計劃的是多接一些傳感器采集數(shù)據(jù),比如采集485接口傳感器數(shù)據(jù)、通過調(diào)用我自己封裝的dll文件去跟歐姆龍PLC進行通訊的測試、上傳數(shù)據(jù)至阿里IOT平臺,截止當前未完成,但后面我會繼續(xù)把這個項目做下去,爭取把這個數(shù)據(jù)采集器做得完善。最后感謝大賽舉辦方給我們提供了一個如此好的學習和鍛煉的機會,我會嘗試將RTT引入到自己研發(fā)的產(chǎn)品中去。