黃 暉,余繼成,肖春明,曾 璐
(江西理工大學(xué) 電氣工程與自動化學(xué)院,江西 贛州 341000)
隨著生活水平不斷提高,人們愈發(fā)重視環(huán)境問題。目前,社會發(fā)展迅速,建筑工地日益增多,施工時對周圍環(huán)境造成污染,如空氣污染、噪聲污染、水污染、光污染等,給人們的生活帶來諸多不便[1]。
如果能及時監(jiān)測環(huán)境參數(shù)的變化,便能盡早進行污染治理[2]?;诖?,本文設(shè)計了一款基于STM32單片機的揚塵監(jiān)測系統(tǒng)。
本系統(tǒng)主要包括電源模塊、主控制器模塊、數(shù)據(jù)采集模塊、顯示模塊和移動通信模塊。為了使用方便,本系統(tǒng)直接連接220 V交流電,再通過電源模塊將220 V交流電轉(zhuǎn)化為5 V的直流電,以便系統(tǒng)其他部分使用。主控制器通過STM32單片機處理數(shù)據(jù)采集模塊傳送的數(shù)據(jù),并在顯示模塊實時顯示。
為方便遠程查看揚塵系統(tǒng)采集的環(huán)境數(shù)據(jù),本系統(tǒng)特開發(fā)了一款專用微信小程序。移動通信模塊(NB-IoT模塊)通過HTTP網(wǎng)絡(luò)協(xié)議訪問服務(wù)器,將單片機處理后的數(shù)據(jù)上傳到服務(wù)器,之后微信小程序與服務(wù)器進行數(shù)據(jù)交互,獲取并顯示相關(guān)環(huán)境數(shù)據(jù)[3-4]。系統(tǒng)運行示意如圖1所示。
本系統(tǒng)選用STM32F103單片機作為控制器。它屬于中低端32位ARM微控制器,其芯片為ST公司出品的Cortex-M3內(nèi)核。芯片內(nèi)置128 KB閃存和20 KB SRAM高速存儲器,最大工作頻率為72 MHz,擁有多個I/O端口及與兩條APB總線聯(lián)接的外設(shè)。每個型號的STM32芯片都包含3個通用的16位定時器、2個12位的ADC、1個PWM定時器。此外,它還包含多個標(biāo)準(zhǔn)且先進的通信接口[5],如I2C、SPI、USART、USB、CAN 等。
圖1 系統(tǒng)運行示意圖
在本系統(tǒng)中,STM32F103單片機通過USART3連接數(shù)據(jù)采集模塊用以獲取溫度、濕度、PM2.5等數(shù)據(jù);USART2連接移動通信模塊與服務(wù)器通信;SPI連接顯示模塊,將需要顯示的數(shù)據(jù)通過SPI發(fā)送到顯示屏[6]。
數(shù)據(jù)采集選用RS-BYH-M模塊。作為主要的環(huán)境數(shù)據(jù)采集器,RS-BYH-M模塊采用一體式設(shè)計,將傳感器安裝在百葉盒內(nèi),能便捷地測量周圍環(huán)境的空氣質(zhì)量、噪聲、溫度、濕度、光照等參數(shù)[7-8]。由于STM32F103單片機無RS 485接口,故本系統(tǒng)通過將UART轉(zhuǎn)換成RS 485解決這一問題。
顯示模塊使用由12塊小LED模塊面板組成的LED顯示屏,采用12接口通信,通過四分之一掃描方式工作。單片機使用SPI通信接口循環(huán)發(fā)送數(shù)據(jù),使LED顯示屏點亮相應(yīng)的LED燈,從而顯示需要的字符。
NB-IoT模塊是移動通信模塊,使用的型號為M5310-A。該型號的NB-IoT模塊支持最新Release14標(biāo)準(zhǔn),相比之前版本通信速率更高。此外,M5310-A還新增了遠程固件升級(FOTA)功能。
NB-IoT模塊具有尺寸小、功耗低、工作溫度范圍寬等特點,可用于智能家居、智能抄表、智慧城市、智慧農(nóng)業(yè)等領(lǐng)域的數(shù)據(jù)傳輸服務(wù)。
本系統(tǒng)在STM32單片機上使用了RT-Thread操作系統(tǒng)[9]。它是一個嵌入式實時多線程操作系統(tǒng),基本屬性之一是支持多個任務(wù)同時運行。RT-Thread還具有實時性高、占用資源少等特點。
系統(tǒng)軟件采用模塊化設(shè)計。其中,STM32單片機主要包括數(shù)據(jù)采集模塊、數(shù)據(jù)顯示模塊以及通信模塊。各模塊均使用RT-Thread系統(tǒng)的線程處理,并且三個線程之間使用郵箱通信:首先由數(shù)據(jù)采集模塊的線程讀取傳感器獲得數(shù)據(jù)并進行簡單處理,再通過郵箱將數(shù)據(jù)傳送至數(shù)據(jù)顯示模塊線程及通信模塊線程,數(shù)據(jù)顯示模塊線程接收到數(shù)據(jù)后,將其直接發(fā)送到LED顯示屏,NB-IoT模塊則將接收的數(shù)據(jù)發(fā)送到服務(wù)器[10]。系統(tǒng)軟件流程如圖2所示。
圖2 系統(tǒng)軟件流程
數(shù)據(jù)顯示模塊線程首先對數(shù)據(jù)顯示相關(guān)變量進行初始化,然后通過郵箱接收從數(shù)據(jù)采集模塊線程發(fā)送的帶有環(huán)境參數(shù)數(shù)據(jù)的郵件,經(jīng)過相應(yīng)處理后調(diào)用數(shù)據(jù)顯示函數(shù)將數(shù)據(jù)發(fā)送到顯示屏進行顯示。數(shù)據(jù)顯示流程如圖3(a)所示。
微信小程序使用微信原生的Request組件進行網(wǎng)絡(luò)請求。首先Request組件攜帶URL、賬號、密碼等信息向服務(wù)器發(fā)起請求,服務(wù)器收到請求信息后檢查自己是否存在所請求的資源,若存在,則返回狀態(tài)碼和所請求內(nèi)容,否則返回錯誤信息。為了確保在網(wǎng)絡(luò)數(shù)據(jù)傳輸過程中所有操作的正確性,必須確認服務(wù)器返回的狀態(tài)均正確。微信小程序接收到請求數(shù)據(jù)后,對其進行解析并展示。微信小程序獲取數(shù)據(jù)流程如圖3(b)所示。
圖3 軟件流程
本系統(tǒng)的調(diào)試過程分為如下兩步:
(1)由STM32端進行數(shù)據(jù)采集顯示;
(2)通過服務(wù)器在微信小程序上顯示數(shù)據(jù)。
STM32端進行數(shù)據(jù)采集顯示時,需通過數(shù)據(jù)采集模塊將采集的溫度、濕度、噪聲、PM2.5、PM10等數(shù)據(jù)經(jīng)過STM32單片機處理并顯示到液晶屏上。經(jīng)過多次調(diào)試,結(jié)果符合預(yù)期。數(shù)據(jù)采集調(diào)試界面如圖4所示。
在對遠程數(shù)據(jù)顯示進行測試時,需把STM32單片機處理后的數(shù)據(jù)使用NB-IoT模塊HTTP協(xié)議的POST方法提交給服務(wù)器并存儲,微信小程序通過服務(wù)器獲取數(shù)據(jù)并顯示。微信小程序端測試結(jié)果符合要求。微信小程序數(shù)據(jù)查詢、顯示界面如圖5所示。
圖4 數(shù)據(jù)采集調(diào)試界面
圖5 微信小程序數(shù)據(jù)查詢、顯示界面
經(jīng)過調(diào)試,本系統(tǒng)能很好地完成數(shù)據(jù)采集、數(shù)據(jù)顯示、數(shù)據(jù)上報、微信小程序查看測量環(huán)境數(shù)據(jù)等功能,基本實現(xiàn)了設(shè)計要求。另外,本系統(tǒng)選用的STM32單片機擁有強大的數(shù)據(jù)處理能力和眾多外設(shè),資源十分豐富,可以在現(xiàn)有基礎(chǔ)上通過外接電路增加傳感器,從而獲取更多環(huán)境數(shù)據(jù)。如果有報警需求,還可以加入警報電路來實現(xiàn)報警功能。