朱兆豐,劉靜琦,周振虎,劉靜波,余澤滔,時 飛
(南京工程學院 信息與通信工程學院,江蘇 南京 211167)
室內空氣質量對于人體健康具有直接的影響。隨著生活水平的提高,人們越來越重視室內環(huán)境的空氣質量、環(huán)境參數(shù)等,特別是各種有害氣體,嚴重危害了人體健康[1]。人們采取相關監(jiān)測方法獲取室內溫濕度、VOC、PM2.5等環(huán)境參數(shù),監(jiān)測方法大致經(jīng)歷了幾個階段:人工現(xiàn)場監(jiān)測、在線監(jiān)測、基于ZigBee和GPRS方式監(jiān)測等[2-3]。隨著網(wǎng)絡技術的發(fā)展以及智能手機的普及,多采用智能硬件終端監(jiān)測環(huán)境參數(shù)、采集數(shù)據(jù),并通過WiFi模塊傳輸至云平臺,同時采用微信小程序實時查詢數(shù)據(jù),發(fā)出控制指令控制硬件終端已成為一種趨勢。采用不同的主控芯片與云平臺構建的遠程監(jiān)測系統(tǒng)具有不同的應用特點[4],本文設計的室內環(huán)境參數(shù)監(jiān)測系統(tǒng)采用STM32主控芯片,通過WiFi模塊上傳數(shù)據(jù)至貝殼物聯(lián)云平臺,完成數(shù)據(jù)采集、存儲、上傳和微信小程序實時查詢數(shù)據(jù)、發(fā)出控制指令等應用。
系統(tǒng)總體組成如圖1所示,其中虛線部分為硬件終端。主控芯片采用STM32F103RCT6,這是以32位Cortex-M3為核心的高性能處理器,主頻為72 MHz,集成了多種外設,片上資源豐富[5]。采用高精度、低功耗的溫濕度傳感器HDC1080采集溫濕度數(shù)據(jù),采用ZPH01型傳感器檢測VOC和PM2.5數(shù)據(jù)信息。ZPH01型傳感器可以配置成2種數(shù)據(jù)輸出模式,一種是串口方式,另一種以PWM波形中低電平占空比的表示輸出數(shù)據(jù),使用靈活。WiFi模塊選用ESP8266,ESP8266可配置成多種模式,與STM32單片機通過串口連接。硬件終端采集數(shù)據(jù),定時發(fā)送至貝殼物聯(lián)云平臺。在貝殼物聯(lián)注冊的同一個用戶ID下,電腦端和微信小程序同步接收并更新數(shù)據(jù)。微信小程序可以查詢數(shù)據(jù)信息,也可以發(fā)送指令,進而控制硬件終端數(shù)據(jù)存儲與報警閾值的設定等。系統(tǒng)中接有時鐘芯片DS3231,這是一款帶有溫度補償?shù)母呔葧r鐘芯片[6],用以提供系統(tǒng)運行的時間信息、定時時間間隔的控制設定等。
圖1 系統(tǒng)總體組成
硬件終端包括主控芯片STM32F103RCT6。主控芯片的PC11和PC12作為I2C總線掛載了3個功能模塊,分別是溫濕度傳感器HDC1080、時鐘芯片DS3231和E2PROM存儲芯片AT24C02,STM32主控芯片通過訪問不同的器件地址[7],可以對芯片進行配置與讀寫??諝赓|量傳感器ZPH01連接到串口1的PA9和PA10上;WiFi模塊ESP8266連接到串口2的PA2和PA3上。系統(tǒng)配置了一塊320×240分辨率的TFT彩屏,其16位數(shù)據(jù)口連接到STM32的PB端口,GT32L32字庫芯片掛載到STM32的SPI1總線上,方便顯示中英文信息。
圖2所示為硬件終端組成與接口連接示意圖,其中I2C總線上PC11為SDA數(shù)據(jù)線,PC12為SCL時鐘線。ESP8266的復位引腳由STM32的PA12控制。DS3231的INT引腳可以軟件配置為輸出1 Hz的信號,連接于STM32的PC6引腳上作外部中斷信號,由此進入外部中斷服務程序??諝赓|量傳感器的MOD模式控制端接口處于串口模式時讀取數(shù)據(jù),ZPH01與單片機之間的數(shù)據(jù)讀取以串口1方式進行。
圖2 硬件終端組成與接口電路
ESP8266是一款高集成度的WiFi模塊,它是一個32位的MCU系統(tǒng),可獨立運行訪問網(wǎng)絡,或者作為通信模塊搭載于其他主控芯片上,幫助其他主控芯片接入互聯(lián)網(wǎng)[8]。ESP8266模塊符合IEEE802.11b/g/n標準,支持TTL電平,板載PCB天線[9],與STM32通過串口2連接,ESP8266模塊可配置成AP,STA或AP+STA模式。
(1)AP模式是指把ESP8266作為熱點,允許其他外設接入ESP8266模塊;
(2)STA模式是將ESP8266作為客戶端,用于將ESP8266接入其他熱點,例如無線路由器等;
(3)AP+STA模式是前兩種模式的整合,兼具熱點功能,為其他設備提供接入服務,同時也可以接入其他WiFi網(wǎng)絡。
本設計把ESP8266配置為STA工作模式,通過路由器連接網(wǎng)絡。
TI公司出品的HDC1080溫濕度傳感器具有高精度、低功耗的特點,可進行溫度與濕度監(jiān)測,分辨率較高。相對濕度精度典型值為±2%RH,溫度精度典型值為±0.2 ℃,供電電壓為2.7~5.5 V。借助數(shù)字總線I2C接口與單片機進行數(shù)據(jù)讀寫:HDC1080讀寫遵守I2C協(xié)議,設備地址0x80(寫),0x81(讀)。測量溫度數(shù)據(jù)計算式見(1):
式中,TEMP[15:00]為溫度寄存器的十進制數(shù)。
測量濕度數(shù)據(jù)計算見式(2):
式中,HUMI[15:00]為濕度寄存器的十進制數(shù)。
ZPH01空氣質量傳感器可以同時提供VOC檢測和PM2.5檢測。VOC檢測單元對甲醛、苯等有機揮發(fā)氣體具有極高的靈敏度。ZPH01出廠經(jīng)過標定校準,數(shù)據(jù)的傳輸方式由MOD引腳配置。當MOD引腳接地時,數(shù)據(jù)以串口方式輸出;當MOD懸空時,數(shù)據(jù)以PWM方式輸出,其中,以PWM波形低電平的占空比表示數(shù)據(jù)大小。ZPH01模塊通過串口1方式與STM32進行數(shù)據(jù)交互。該傳感器發(fā)送一次檢測數(shù)據(jù)的周期為1 s,包含VOC等級以及PM2.5等空氣質量數(shù)據(jù)。程序接收數(shù)據(jù)并通過校驗后得到PM2.5和VOC等級有效數(shù)據(jù)。
通過串口配置工具發(fā)送AT指令,配置ESP8266連接路由器,并確定是否連接成功。STM32單片機通過傳感器讀取室內環(huán)境參數(shù),以固定的時長間隔存儲數(shù)據(jù)至E2PROM,同時通過ESP8266定時發(fā)送數(shù)據(jù)至貝殼物聯(lián)云平臺。貝殼物聯(lián)云平臺電腦端和微信小程序均可發(fā)送指令,硬件終端根據(jù)不同的指令解析指令含義,作出響應,系統(tǒng)主程序流程如圖3所示。程序將時間讀取、測量溫濕度、顯示溫濕度和存儲數(shù)據(jù)等放置在外中斷服務程序中,利用DS3231輸出的1 Hz信號連接STM32的PC6,提高主程序的效率。I2C總線下的溫濕度傳感器HDC1080、時鐘芯片DS3231和E2PROM存儲器AT24C02均按照應用手冊寫入控制字,先配置內部控制寄存器,之后讀出數(shù)據(jù)。在串口2中斷接收并解析收到的控制指令,串口2中斷接收到指令后給主程序一個標志位,之后進行判斷,并根據(jù)不同的指令完成相應的操作??梢酝ㄟ^電腦端或手機微信小程序下達指令進行遠程控制,控制數(shù)據(jù)上傳的時間間隔和輸出報警的閾值等。
圖3 主程序流程
貝殼物聯(lián)云平臺采用以TCP協(xié)議為主,UDP協(xié)議為輔的形式通信,兩種協(xié)議間信息可互通。TCP協(xié)議為遠程網(wǎng)絡控制系統(tǒng)提供可靠且面向多元化連接的傳輸控制協(xié)議[10],在TCP協(xié)議的基礎上,可以直接使用TCP建立長連接,定時發(fā)送心跳數(shù)據(jù),保持用戶、設備在線期間與服務器可進行JSON字符串格式數(shù)據(jù)通信,也可采用HTTP(s)通信協(xié)議獲取用戶資源,向設備發(fā)送指令。
ESP8266具有硬件終端與貝殼物聯(lián)云平臺之間數(shù)據(jù)傳輸?shù)墓δ埽裇TM32采集的數(shù)據(jù)按照平臺通信協(xié)議格式發(fā)送至云平臺,同時接收云平臺發(fā)送的JSON格式的指令,解析后執(zhí)行不同的任務。ESP8266與平臺之間保持通信,定時發(fā)送心跳信號、檢查當前登錄狀態(tài)。當串口2中斷標志產(chǎn)生,意味著云平臺發(fā)出指令,這時STM32調用JSON解析函數(shù)解析接收的JSON字符串,得到有效指令。硬件終端根據(jù)上傳數(shù)據(jù)的最低時間間隔,按照通信協(xié)議上傳數(shù)據(jù)至云平臺,上傳數(shù)據(jù)的時間間隔可以根據(jù)不同指令增加或減小。
ESP8266配置為STA客戶端模式加透傳模式,其配置方式可以用串口2發(fā)送命令函數(shù)或用串口配置工具進行配置。輸入的指令“AT+SAVETRANSLINK”用于配置ESP8266上電后自主連接貝殼物聯(lián)云平臺。待AT指令發(fā)送成功后,ESP8266返回“OK”。
官方給出的上傳數(shù)據(jù)的協(xié)議格式為{"M":"update", "ID":"xx1","V":{"id1":"value1",...}} ,“xx1”表示注冊用戶的設備ID,“id1”和“value1”是掛在當前設備ID下的數(shù)據(jù)接口1和上傳數(shù)據(jù)1,“…”是該設備下的多個數(shù)據(jù)接口與數(shù)據(jù)。對照此格式,上傳數(shù)據(jù)的函數(shù)如下:
變量“did”表示注冊用戶的設備ID,“inpitid”是所屬設備ID下的數(shù)據(jù)接口ID,如果上傳多個數(shù)據(jù),可以按照協(xié)議格式添加數(shù)據(jù)接口,由平臺給出數(shù)據(jù)接口ID,掛在當前所屬設備ID的其他數(shù)據(jù)接口?!癡alue”是上傳的數(shù)據(jù),如溫濕度和PM2.5等。
貝殼物聯(lián)云平臺提供預先設定的按鈕,可以在電腦端和微信小程序里發(fā)送指令,指令封裝為JSON數(shù)據(jù)格式,例如用戶硬件終端接收到電腦端發(fā)出的“play”按鍵的數(shù)據(jù)格式是{"M":"say", "ID":"U*****", "NAME":"*****(web)", "C":"play","T":"1601725434"},其中“U*****”是用戶ID,NAME后的“*****”是用戶名,C后的“play”是解析的關鍵字,不同的按鍵指令含義即為C后的字符,包括stop、up、down等。T后的數(shù)字是服務器發(fā)送信息時的時間戳,為格林威治時間1970年01月01日00:00:00到當前時間的秒數(shù)。程序解析按鍵解析出不同的關鍵字,從而實現(xiàn)不同的功能選項。
ZPH01可以配置為串口方式,發(fā)送數(shù)據(jù)至STM32串口1,每秒發(fā)送一幀數(shù)據(jù),一幀數(shù)據(jù)共有9個字節(jié),其中字節(jié)00為起始位,字節(jié)03和04是PM2.5顆粒物低脈沖率的整數(shù)和小數(shù)部分,最后乘以系數(shù)得到顆粒物濃度。07字節(jié)是VOC等級,08字節(jié)是01~07字節(jié)的校驗和,含義是01~07字節(jié)的和取反加1。串口1的中斷處理程序中,數(shù)據(jù)存放于數(shù)組aRxBuffer[RxCounter],當一幀數(shù)據(jù)結束后產(chǎn)生空閑總線中斷,給出中斷標志位ReceiveState,主程序根據(jù)中斷標志位ReceiveState讀取并組合字節(jié)03和字節(jié)04的數(shù)據(jù),得到PM2.5濃度。程序代碼如下:
通過對硬件終端采集、上傳數(shù)據(jù)進行測試,可以看到電腦端的貝殼物聯(lián)網(wǎng)平臺與手機微信小程序同步接收、顯示數(shù)據(jù)。測試過程中,通過平臺發(fā)布指令,調整數(shù)據(jù)上傳的時間間隔等。圖4所示為硬件終端顯示數(shù)據(jù)界面,圖5所示為微信小程序接收數(shù)據(jù)界面,圖6所示為電腦端溫度實時接收數(shù)據(jù)界面。
圖4 硬件終端顯示數(shù)據(jù)界面
圖5 微信小程序接收數(shù)據(jù)界面
圖6 溫度實時接收數(shù)據(jù)界面
本系統(tǒng)經(jīng)過系統(tǒng)硬件設計、軟件編程配置和實際測試,實現(xiàn)了溫濕度、PM2.5和VOC數(shù)據(jù)的采集,并能將數(shù)據(jù)上傳貝殼物聯(lián)云平臺和手機微信小程序,從而實現(xiàn)同步遠程監(jiān)測、發(fā)布指令的目的。測試表明,系統(tǒng)符合室內環(huán)境參數(shù)監(jiān)測的要求,通過接入貝殼物聯(lián)云平臺實現(xiàn)了遠程監(jiān)測,兼顧了成本、效率和實時性,滿足了實際應用需求。STM32豐富的接口和外設可以作為測量其他參數(shù)的監(jiān)測接口,增加貝殼物聯(lián)云平臺的數(shù)據(jù)接口,上傳需要的數(shù)據(jù),開啟平臺保存歷史數(shù)據(jù)、發(fā)送指令等功能,為系統(tǒng)進一步的拓展應用夯實了基礎。