姚 科,李國利,鄒惟清,王昊宇
(金陵科技學(xué)院 機(jī)電工程學(xué)院,江蘇 南京211169)
病房的環(huán)境直接影響病人的睡眠質(zhì)量和心理狀態(tài),間接決定病人的康復(fù)速度,對病房環(huán)境的遠(yuǎn)程監(jiān)測為管理病房環(huán)境提供很大的便利。研究病房環(huán)境采集、遠(yuǎn)程監(jiān)測病房環(huán)境系統(tǒng)具有重要的意義。遠(yuǎn)程環(huán)境的監(jiān)測實(shí)時(shí)體現(xiàn)病房的環(huán)境質(zhì)量。隨著物聯(lián)網(wǎng)技術(shù)的日趨成熟,物聯(lián)網(wǎng)已被廣泛應(yīng)用在醫(yī)療、交通與物流、能源與公用事業(yè)、零售業(yè)等領(lǐng)域。物聯(lián)網(wǎng)傳感節(jié)點(diǎn)作為物聯(lián)網(wǎng)和物理世界的交互節(jié)點(diǎn),負(fù)責(zé)信息的采集和簡單處理,與將數(shù)據(jù)傳輸?shù)綉?yīng)用層進(jìn)行數(shù)據(jù)分析和處理。物聯(lián)網(wǎng)技術(shù)通過多樣的數(shù)據(jù)采集傳感器,采集所需的信息數(shù)據(jù),并按照一定的數(shù)據(jù)傳輸協(xié)議實(shí)現(xiàn)物與物、物與人之間的連接。由于物聯(lián)網(wǎng)設(shè)備的存儲(chǔ)、計(jì)算能力和網(wǎng)絡(luò)帶寬往往有限,采用HTTP協(xié)議作為應(yīng)用層通信協(xié)議存在時(shí)效性差、傳輸效率低、功耗大等問題,因此設(shè)計(jì)一種可以在硬件性能不佳、網(wǎng)絡(luò)狀況糟糕的病房環(huán)境使用的監(jiān)測系統(tǒng)顯得十分重要。本系統(tǒng)采用輕量級(jí)傳輸協(xié)議MQTT消息隊(duì)列遙測傳輸協(xié)議作為本項(xiàng)目的物聯(lián)網(wǎng)傳輸協(xié)議。MQTT協(xié)議針對低帶寬網(wǎng)絡(luò)和低計(jì)算能力的設(shè)備,做了特殊的優(yōu)化,使得其能適應(yīng)各種物聯(lián)網(wǎng)應(yīng)用場景。本文設(shè)計(jì)了采集病房環(huán)境參數(shù)并上傳至服務(wù)器,遠(yuǎn)程實(shí)時(shí)監(jiān)測環(huán)境變化方案,并制作實(shí)物對需求和目的進(jìn)行驗(yàn)證和調(diào)試。
本文基于ESP8266 WiFi模塊、STM32系列MCU和MQTT協(xié)議設(shè)計(jì)了一種環(huán)境監(jiān)測控制系統(tǒng),環(huán)境采集傳感器由溫濕度傳感器DHT11和光照度傳感器BH1750組成,實(shí)現(xiàn)溫濕度和光照度的采集;數(shù)據(jù)處理模塊采用STM32的主控芯片實(shí)現(xiàn)傳感數(shù)據(jù)的接收、存儲(chǔ)、分析和顯示,將處理完的數(shù)據(jù)以串口的形式發(fā)送給ESP-01物聯(lián)網(wǎng)模塊,由ESP-01將數(shù)據(jù)上傳至服務(wù)器;阿里云ECS云服務(wù)器平臺(tái)作為MQTT消息代理,負(fù)責(zé)主題訂閱管理、消息轉(zhuǎn)發(fā)和緩沖,實(shí)現(xiàn)傳感節(jié)點(diǎn)與數(shù)據(jù)采集中心的信息交互。數(shù)據(jù)上傳模塊與阿里云ECS云服務(wù)器的交互數(shù)據(jù)類型為JSON格式。用戶端通過基于TCP的MQTT協(xié)議訂閱設(shè)備上行數(shù)據(jù)主題獲取數(shù)據(jù),并下發(fā)命令至服務(wù)器,ESP-01訂閱下行命令主題并接收下行命令,以串口的方式發(fā)送至數(shù)據(jù)處理模塊,由數(shù)據(jù)處理模塊處理成控制信號(hào)用于控制下端設(shè)備。
MQTT通信協(xié)議是一種基于發(fā)布/訂閱式的消息協(xié)議。協(xié)議定義了發(fā)布服務(wù)器和客戶端兩個(gè)對象,作為整個(gè)通信系統(tǒng)網(wǎng)絡(luò)核心的發(fā)布服務(wù)器,可以連接多個(gè)客戶端。系統(tǒng)硬件布局圖如圖1所示,系統(tǒng)硬件原理圖如圖2所示。
圖1 系統(tǒng)硬件布局圖
圖2 系統(tǒng)硬件原理圖
DHT11是一款單總線輸出數(shù)字信號(hào)的溫濕度傳感器。其內(nèi)部包括電阻式感濕元件和NTC測溫元件。DHT11通過單線制串行接口與MCU傳輸信號(hào),使系統(tǒng)集成變得簡易快捷。它體積小、功耗極低、相對溫濕度一體式測量,使其成為該類傳感器在苛刻應(yīng)用場合的最佳選擇。產(chǎn)品為4針單排引腳封裝,連接方便。
GY-302是基于I2C總線通信的數(shù)字型光強(qiáng)度傳感器集成電路,采集光照強(qiáng)度采用BH1750FVI芯片。BH1750的內(nèi)部由光敏二極管、運(yùn)算放大器、ADC采集、晶振等組成。
模塊輸出的電信號(hào)是由光敏二極管通過光生伏特效應(yīng)將輸入光信號(hào)轉(zhuǎn)換成的,再將電信號(hào)通過運(yùn)算放大器放大,由ADC采集電壓,然后通過邏輯電路轉(zhuǎn)換成16位二進(jìn)制數(shù)存儲(chǔ)在內(nèi)部的寄存器中。進(jìn)入光窗的光越強(qiáng),光電流越大,電壓就越大,所以通過電壓的大小就可以判斷光照大小。該光照強(qiáng)度傳感模塊的分辨率高,可以探測較大范圍下細(xì)微光強(qiáng)度變化。它通過I2C總線接口通信、輸出對應(yīng)亮度的數(shù)字值、對應(yīng)廣泛的輸入光范圍(相當(dāng)于1-65535lx)誤差很小,最小誤差變動(dòng)在±20%、受紅外線影響很小,模塊原理圖如圖3所示。
圖3 GY-302模塊原理圖
該系統(tǒng)主控芯片采用STM32系列的嵌入式微控制器對傳感器采集的參數(shù)進(jìn)行接收、處理、存儲(chǔ)、分析并以串口的形式將處理好的數(shù)據(jù)發(fā)送至ESP-01物聯(lián)網(wǎng)模塊。STM32F103C8T6最小系統(tǒng)包括了外部晶振模塊、復(fù)位電路模塊、J-link連接模塊、供電指示模塊等部分。ESP-01集MCU與WIFI于一身,支持I2C總線、支持UART、可支持一個(gè)數(shù)字輸入/輸出口,可采用AT指令控制模塊。該模塊核心處理器ESP8266在較小尺寸封裝中集成了超低功耗32位微型MCU。
MCU處理并打包完的數(shù)據(jù)發(fā)送給ESP-01物聯(lián)網(wǎng)模塊,由ESP-01將數(shù)據(jù)上傳至服務(wù)器;阿里云ECS云服務(wù)器平臺(tái)作為MQTT消息代理,負(fù)責(zé)主題訂閱管理、消息轉(zhuǎn)發(fā)和緩沖,實(shí)現(xiàn)傳感節(jié)點(diǎn)與數(shù)據(jù)采集中心的信息交互。數(shù)據(jù)上傳模塊與阿里云ECS云服務(wù)器的交互數(shù)據(jù)類型為JSON格式。用戶端通過基于TCP的MQTT協(xié)議訂閱設(shè)備上行數(shù)據(jù)主題獲取數(shù)據(jù),并下發(fā)命令至服務(wù)器,ESP-01訂閱下行命令主題并接收下行命令,以串口的方式發(fā)送至數(shù)據(jù)處理模塊,由數(shù)據(jù)處理模塊處理成控制信號(hào)用以控制下端設(shè)備。數(shù)據(jù)處理及上傳系統(tǒng)框圖如圖4所示。
圖4 數(shù)據(jù)處理及上傳系統(tǒng)框圖
病房環(huán)境監(jiān)測參數(shù)涉及溫度、濕度和光照度。BH1750光照度傳感器采用I2C通信,負(fù)責(zé)采集病房的光照度參數(shù)。DHT11模塊采集溫濕度參數(shù),采用單總線數(shù)據(jù)格式輸出已校驗(yàn)的數(shù)字信號(hào)。MCU把采集到的環(huán)境參數(shù)打包成Cjson數(shù)據(jù)包格式通過串口發(fā)送給WIFI模塊。WIFI模塊把設(shè)備測的數(shù)據(jù)通過TCP的MQTT協(xié)議上傳到服務(wù)器,并訂閱服務(wù)器的下行命令主題以接收服務(wù)器下行命令。為了環(huán)境數(shù)據(jù)采集程序和上傳數(shù)據(jù)不沖突,在主程序中定義一個(gè)變量timeCount作為一個(gè)時(shí)間間隔變量執(zhí)行計(jì)時(shí)功能,timeCount時(shí)間計(jì)時(shí)到相應(yīng)的時(shí)間節(jié)點(diǎn)觸發(fā)相應(yīng)的程序。主程序執(zhí)行一循環(huán)需25ms并使timeCount增1,設(shè)定當(dāng)timeCount%40==0執(zhí)行一次環(huán)境參數(shù)采集和異常狀態(tài)鑒定。設(shè)定當(dāng)++timeCount>=200執(zhí)行環(huán)境參數(shù)上傳參數(shù)清空ESP8266緩存并使timeCount重新計(jì)數(shù)。病房環(huán)境監(jiān)測上傳程序流程圖如圖5所示。
圖5 病房環(huán)境監(jiān)測上傳程序流程圖
定義四個(gè)整形指針u8*humiH(濕度高8位數(shù)據(jù)),u8*humiL(濕度低8位數(shù)據(jù)),u8*tempH(溫度高8位數(shù)據(jù)),u8*tempL(溫度低8位數(shù)據(jù))做溫濕度讀取函數(shù)的形參。定義buf[5]存放環(huán)境參數(shù)四個(gè)字節(jié)數(shù)據(jù)和最后一位檢驗(yàn)位。函數(shù)的開始先復(fù)位DHT11并檢測DHT11是否存在。若復(fù)位成功并檢測到DHT11的存在,用for循環(huán)函數(shù)循環(huán)5次讀取DHT11發(fā)送過來的5個(gè)字節(jié)共40位數(shù)據(jù)。前四字節(jié)位DHT11檢測到的環(huán)境參數(shù),最后一個(gè)字節(jié)為校驗(yàn)字節(jié)。判斷buf[0]+buf[1]+buf[2]+buf[3]是否等于buf[4]。如if判斷成立代表數(shù)據(jù)校驗(yàn)正確,buf[]數(shù)組前四個(gè)參數(shù)分別存入程序開始前定義的四個(gè)形參,并返回函數(shù)運(yùn)行狀態(tài)值,完成溫濕度的讀取。
BH1750光照度傳感器采用I2C進(jìn)行通信,主機(jī)MCU發(fā)起I2C總線啟動(dòng)信號(hào),把光照度傳感器地址BH1750_Addr與1進(jìn)行運(yùn)算,使BH1750_Addr最低位為1,主機(jī)將這8bit數(shù)據(jù)發(fā)送給I2C總線設(shè)備傳感器表明主機(jī)接下來進(jìn)行讀數(shù)據(jù)。
接收到應(yīng)答信號(hào)后讀取傳感器發(fā)送的光照度數(shù)據(jù),主控MCU為I2C總線的主機(jī)設(shè)備,由I2C的工作原理可知,每接收到一個(gè)字節(jié)從機(jī)數(shù)據(jù)需要發(fā)送一個(gè)應(yīng)答信號(hào),在收到最后一個(gè)字節(jié)數(shù)據(jù)后,MCU發(fā)送一個(gè)否應(yīng)答信號(hào),BH1750作為從機(jī)設(shè)備接收到否應(yīng)答信號(hào),結(jié)束數(shù)據(jù)發(fā)送并釋放數(shù)據(jù)線,MCU發(fā)起I2C總線停止信號(hào)。
病房環(huán)境數(shù)據(jù)的上傳采用MQTT協(xié)議。所以需要一個(gè)發(fā)布消息的主題(topic),所需要上傳的數(shù)據(jù)就是該主題下的消息內(nèi)容(msg)。
定義一個(gè)結(jié)構(gòu)體變量MQTT_PACKET_STRUCTU RE存放協(xié)議數(shù)據(jù)、寫入數(shù)據(jù)長度、緩存總大小和內(nèi)存使用方案作為協(xié)議包。在數(shù)據(jù)發(fā)送前要進(jìn)行Pulish消息組包,入口參數(shù)包括包名稱、發(fā)布的主題、消息體、消息體長度、重發(fā)次數(shù)、離線消息推送和包指針,并且若組包成功返回值為“0”。消息數(shù)據(jù)發(fā)送前判斷MQTT_PacketPublish(MQTT_PUBLISH_ID,topic,msg,strlen(msg),MQTT_QOS_LEVEL0,0,1,&mqttPacket)是否為0,若成立執(zhí)行向平臺(tái)發(fā)送數(shù)據(jù)函數(shù)ESP8266_SendData(),函數(shù)入口形參為數(shù)據(jù)(data)和長度(len)。
執(zhí)行ESP8266_SendData()先清空接收緩存,然后執(zhí)行發(fā)送命令函數(shù)ESP8266_SendCmd()。ESP8266_Se ndCmd()用來發(fā)送AT指令并檢查返回指令。若返回指令正確,發(fā)送采集到的環(huán)境數(shù)據(jù)并在結(jié)束后釋放數(shù)據(jù)內(nèi)存。
首先系統(tǒng)嘗試連接通過串口轉(zhuǎn)物聯(lián)網(wǎng)模塊嘗試連接服務(wù)器并訂閱主題,如圖6所示。
圖6 病房環(huán)境監(jiān)測模塊連接服務(wù)器成功
連接服務(wù)器成功后對環(huán)境數(shù)據(jù)進(jìn)行采集并進(jìn)行編碼上傳服務(wù)器,執(zhí)行過程同樣可以在串口調(diào)試助手上輸出,如圖7所示。上側(cè)框里內(nèi)容是將采集的數(shù)據(jù)每5s一次上傳至服務(wù)器相應(yīng)主題中。下側(cè)框里內(nèi)容是每秒一次對環(huán)境參數(shù)進(jìn)行采集。
圖7 串口調(diào)試助手環(huán)境采集上傳圖
通過板載的OLED顯示屏實(shí)時(shí)觀測環(huán)境參數(shù),數(shù)據(jù)每一秒更新一次,如圖8所示。
圖8 板載OLED觀察環(huán)境數(shù)據(jù)
通過安卓客戶端開發(fā)軟件訂閱服務(wù)器存放環(huán)境參數(shù)的主題,實(shí)現(xiàn)安卓客戶端遠(yuǎn)程讀取環(huán)境參數(shù),如圖9所示。
圖9 通過安卓客戶端遠(yuǎn)程訂閱環(huán)境
在對環(huán)境監(jiān)測系統(tǒng)中,系統(tǒng)的穩(wěn)定高效是非常重要的,為了測試通信的穩(wěn)定性,結(jié)合下位機(jī)、服務(wù)器數(shù)據(jù)監(jiān)控終端和客戶端進(jìn)行系統(tǒng)數(shù)據(jù)傳輸實(shí)驗(yàn)。本次測試時(shí)間持續(xù)7天,每天讓設(shè)備上線60-90min,實(shí)時(shí)監(jiān)測環(huán)境的采集上傳、服務(wù)器的數(shù)據(jù)狀態(tài)、客戶端的訂閱顯示。數(shù)據(jù)包理論上每15s對環(huán)境采集的數(shù)據(jù)進(jìn)行打包和上傳,該實(shí)驗(yàn)實(shí)際測試結(jié)果如表1所示,每次環(huán)境參數(shù)數(shù)據(jù)包傳輸成功時(shí),下位機(jī)屏幕顯示環(huán)境參數(shù)與服務(wù)器數(shù)據(jù)監(jiān)控終端數(shù)據(jù)、手機(jī)客戶端顯示界面數(shù)據(jù)均一致,該系統(tǒng)數(shù)據(jù)采集上傳成功率最低為97.3%,通信網(wǎng)絡(luò)丟包率平均為1.97%,如表1所示。在測試過程中發(fā)現(xiàn),連接中斷的次數(shù)與所連接的無線網(wǎng)絡(luò)密切相關(guān),而數(shù)據(jù)包丟失主要與網(wǎng)絡(luò)波動(dòng)有關(guān)。當(dāng)WIFI網(wǎng)絡(luò)穩(wěn)定時(shí),成功的數(shù)據(jù)傳輸數(shù)量接近理論傳輸數(shù)量,通信穩(wěn)定,滿足系統(tǒng)所需的穩(wěn)定高效通信要求。
表1 系統(tǒng)數(shù)據(jù)傳輸丟包率測試統(tǒng)計(jì)
本文介紹了一款實(shí)時(shí)遠(yuǎn)程監(jiān)測病房環(huán)境溫濕度和光照度系統(tǒng)的硬件布局設(shè)計(jì)和軟件程序設(shè)計(jì)。通過DHT11溫濕度傳感器和BH1750環(huán)境光照強(qiáng)度傳感器采集病房的環(huán)境參數(shù)并傳送至主控MCU。MCU對接收的數(shù)據(jù)處理,并打包成MQTT協(xié)議包,通過串口發(fā)送至ESPWiFi模塊。ESPWiFi模塊把測得的環(huán)境數(shù)據(jù)通過TCP的MQTT協(xié)議上傳到服務(wù)器??蛻舳擞嗛喎?wù)器數(shù)據(jù),實(shí)現(xiàn)遠(yuǎn)程環(huán)境參數(shù)的監(jiān)測。系統(tǒng)運(yùn)行穩(wěn)定,成本低、體積小,采用MQTT推送機(jī)制,速度快、實(shí)時(shí)性好,時(shí)效性高,適用于硬件性能低下的遠(yuǎn)程設(shè)備以及網(wǎng)絡(luò)狀況糟糕的情況。該系統(tǒng)經(jīng)調(diào)試結(jié)果表明硬件設(shè)計(jì)方案可行、采集的環(huán)境參數(shù)準(zhǔn)確穩(wěn)定、數(shù)據(jù)傳輸成功率最低97.3%,平均丟包率1.97%,通信傳輸滿足系統(tǒng)要求,控制算法正確,實(shí)現(xiàn)了高效環(huán)境監(jiān)測及遠(yuǎn)程控制功能,系統(tǒng)通用性好,具有較好的應(yīng)用前景。