姚 科,李國利,鄒惟清,王昊宇
(金陵科技學院 機電工程學院,江蘇 南京211169)
病房的環境直接影響病人的睡眠質量和心理狀態,間接決定病人的康復速度,對病房環境的遠程監測為管理病房環境提供很大的便利。研究病房環境采集、遠程監測病房環境系統具有重要的意義。遠程環境的監測實時體現病房的環境質量。隨著物聯網技術的日趨成熟,物聯網已被廣泛應用在醫療、交通與物流、能源與公用事業、零售業等領域。物聯網傳感節點作為物聯網和物理世界的交互節點,負責信息的采集和簡單處理,與將數據傳輸到應用層進行數據分析和處理。物聯網技術通過多樣的數據采集傳感器,采集所需的信息數據,并按照一定的數據傳輸協議實現物與物、物與人之間的連接。由于物聯網設備的存儲、計算能力和網絡帶寬往往有限,采用HTTP協議作為應用層通信協議存在時效性差、傳輸效率低、功耗大等問題,因此設計一種可以在硬件性能不佳、網絡狀況糟糕的病房環境使用的監測系統顯得十分重要。本系統采用輕量級傳輸協議MQTT消息隊列遙測傳輸協議作為本項目的物聯網傳輸協議。MQTT協議針對低帶寬網絡和低計算能力的設備,做了特殊的優化,使得其能適應各種物聯網應用場景。本文設計了采集病房環境參數并上傳至服務器,遠程實時監測環境變化方案,并制作實物對需求和目的進行驗證和調試。
本文基于ESP8266 WiFi模塊、STM32系列MCU和MQTT協議設計了一種環境監測控制系統,環境采集傳感器由溫濕度傳感器DHT11和光照度傳感器BH1750組成,實現溫濕度和光照度的采集;數據處理模塊采用STM32的主控芯片實現傳感數據的接收、存儲、分析和顯示,將處理完的數據以串口的形式發送給ESP-01物聯網模塊,由ESP-01將數據上傳至服務器;阿里云ECS云服務器平臺作為MQTT消息代理,負責主題訂閱管理、消息轉發和緩沖,實現傳感節點與數據采集中心的信息交互。數據上傳模塊與阿里云ECS云服務器的交互數據類型為JSON格式。用戶端通過基于TCP的MQTT協議訂閱設備上行數據主題獲取數據,并下發命令至服務器,ESP-01訂閱下行命令主題并接收下行命令,以串口的方式發送至數據處理模塊,由數據處理模塊處理成控制信號用于控制下端設備。
MQTT通信協議是一種基于發布/訂閱式的消息協議。協議定義了發布服務器和客戶端兩個對象,作為整個通信系統網絡核心的發布服務器,可以連接多個客戶端。系統硬件布局圖如圖1所示,系統硬件原理圖如圖2所示。

圖1 系統硬件布局圖

圖2 系統硬件原理圖
DHT11是一款單總線輸出數字信號的溫濕度傳感器。其內部包括電阻式感濕元件和NTC測溫元件。DHT11通過單線制串行接口與MCU傳輸信號,使系統集成變得簡易快捷。它體積小、功耗極低、相對溫濕度一體式測量,使其成為該類傳感器在苛刻應用場合的最佳選擇。產品為4針單排引腳封裝,連接方便。
GY-302是基于I2C總線通信的數字型光強度傳感器集成電路,采集光照強度采用BH1750FVI芯片。BH1750的內部由光敏二極管、運算放大器、ADC采集、晶振等組成。
模塊輸出的電信號是由光敏二極管通過光生伏特效應將輸入光信號轉換成的,再將電信號通過運算放大器放大,由ADC采集電壓,然后通過邏輯電路轉換成16位二進制數存儲在內部的寄存器中。進入光窗的光越強,光電流越大,電壓就越大,所以通過電壓的大小就可以判斷光照大小。該光照強度傳感模塊的分辨率高,可以探測較大范圍下細微光強度變化。它通過I2C總線接口通信、輸出對應亮度的數字值、對應廣泛的輸入光范圍(相當于1-65535lx)誤差很小,最小誤差變動在±20%、受紅外線影響很小,模塊原理圖如圖3所示。

圖3 GY-302模塊原理圖
該系統主控芯片采用STM32系列的嵌入式微控制器對傳感器采集的參數進行接收、處理、存儲、分析并以串口的形式將處理好的數據發送至ESP-01物聯網模塊。STM32F103C8T6最小系統包括了外部晶振模塊、復位電路模塊、J-link連接模塊、供電指示模塊等部分。ESP-01集MCU與WIFI于一身,支持I2C總線、支持UART、可支持一個數字輸入/輸出口,可采用AT指令控制模塊。該模塊核心處理器ESP8266在較小尺寸封裝中集成了超低功耗32位微型MCU。
MCU處理并打包完的數據發送給ESP-01物聯網模塊,由ESP-01將數據上傳至服務器;阿里云ECS云服務器平臺作為MQTT消息代理,負責主題訂閱管理、消息轉發和緩沖,實現傳感節點與數據采集中心的信息交互。數據上傳模塊與阿里云ECS云服務器的交互數據類型為JSON格式。用戶端通過基于TCP的MQTT協議訂閱設備上行數據主題獲取數據,并下發命令至服務器,ESP-01訂閱下行命令主題并接收下行命令,以串口的方式發送至數據處理模塊,由數據處理模塊處理成控制信號用以控制下端設備。數據處理及上傳系統框圖如圖4所示。

圖4 數據處理及上傳系統框圖
病房環境監測參數涉及溫度、濕度和光照度。BH1750光照度傳感器采用I2C通信,負責采集病房的光照度參數。DHT11模塊采集溫濕度參數,采用單總線數據格式輸出已校驗的數字信號。MCU把采集到的環境參數打包成Cjson數據包格式通過串口發送給WIFI模塊。WIFI模塊把設備測的數據通過TCP的MQTT協議上傳到服務器,并訂閱服務器的下行命令主題以接收服務器下行命令。為了環境數據采集程序和上傳數據不沖突,在主程序中定義一個變量timeCount作為一個時間間隔變量執行計時功能,timeCount時間計時到相應的時間節點觸發相應的程序。主程序執行一循環需25ms并使timeCount增1,設定當timeCount%40==0執行一次環境參數采集和異常狀態鑒定。設定當++timeCount>=200執行環境參數上傳參數清空ESP8266緩存并使timeCount重新計數。病房環境監測上傳程序流程圖如圖5所示。

圖5 病房環境監測上傳程序流程圖
定義四個整形指針u8*humiH(濕度高8位數據),u8*humiL(濕度低8位數據),u8*tempH(溫度高8位數據),u8*tempL(溫度低8位數據)做溫濕度讀取函數的形參。定義buf[5]存放環境參數四個字節數據和最后一位檢驗位。函數的開始先復位DHT11并檢測DHT11是否存在。若復位成功并檢測到DHT11的存在,用for循環函數循環5次讀取DHT11發送過來的5個字節共40位數據。前四字節位DHT11檢測到的環境參數,最后一個字節為校驗字節。判斷buf[0]+buf[1]+buf[2]+buf[3]是否等于buf[4]。如if判斷成立代表數據校驗正確,buf[]數組前四個參數分別存入程序開始前定義的四個形參,并返回函數運行狀態值,完成溫濕度的讀取。
BH1750光照度傳感器采用I2C進行通信,主機MCU發起I2C總線啟動信號,把光照度傳感器地址BH1750_Addr與1進行運算,使BH1750_Addr最低位為1,主機將這8bit數據發送給I2C總線設備傳感器表明主機接下來進行讀數據。
接收到應答信號后讀取傳感器發送的光照度數據,主控MCU為I2C總線的主機設備,由I2C的工作原理可知,每接收到一個字節從機數據需要發送一個應答信號,在收到最后一個字節數據后,MCU發送一個否應答信號,BH1750作為從機設備接收到否應答信號,結束數據發送并釋放數據線,MCU發起I2C總線停止信號。
病房環境數據的上傳采用MQTT協議。所以需要一個發布消息的主題(topic),所需要上傳的數據就是該主題下的消息內容(msg)。
定義一個結構體變量MQTT_PACKET_STRUCTU RE存放協議數據、寫入數據長度、緩存總大小和內存使用方案作為協議包。在數據發送前要進行Pulish消息組包,入口參數包括包名稱、發布的主題、消息體、消息體長度、重發次數、離線消息推送和包指針,并且若組包成功返回值為“0”。消息數據發送前判斷MQTT_PacketPublish(MQTT_PUBLISH_ID,topic,msg,strlen(msg),MQTT_QOS_LEVEL0,0,1,&mqttPacket)是否為0,若成立執行向平臺發送數據函數ESP8266_SendData(),函數入口形參為數據(data)和長度(len)。
執行ESP8266_SendData()先清空接收緩存,然后執行發送命令函數ESP8266_SendCmd()。ESP8266_Se ndCmd()用來發送AT指令并檢查返回指令。若返回指令正確,發送采集到的環境數據并在結束后釋放數據內存。
首先系統嘗試連接通過串口轉物聯網模塊嘗試連接服務器并訂閱主題,如圖6所示。

圖6 病房環境監測模塊連接服務器成功
連接服務器成功后對環境數據進行采集并進行編碼上傳服務器,執行過程同樣可以在串口調試助手上輸出,如圖7所示。上側框里內容是將采集的數據每5s一次上傳至服務器相應主題中。下側框里內容是每秒一次對環境參數進行采集。

圖7 串口調試助手環境采集上傳圖
通過板載的OLED顯示屏實時觀測環境參數,數據每一秒更新一次,如圖8所示。

圖8 板載OLED觀察環境數據
通過安卓客戶端開發軟件訂閱服務器存放環境參數的主題,實現安卓客戶端遠程讀取環境參數,如圖9所示。

圖9 通過安卓客戶端遠程訂閱環境
在對環境監測系統中,系統的穩定高效是非常重要的,為了測試通信的穩定性,結合下位機、服務器數據監控終端和客戶端進行系統數據傳輸實驗。本次測試時間持續7天,每天讓設備上線60-90min,實時監測環境的采集上傳、服務器的數據狀態、客戶端的訂閱顯示。數據包理論上每15s對環境采集的數據進行打包和上傳,該實驗實際測試結果如表1所示,每次環境參數數據包傳輸成功時,下位機屏幕顯示環境參數與服務器數據監控終端數據、手機客戶端顯示界面數據均一致,該系統數據采集上傳成功率最低為97.3%,通信網絡丟包率平均為1.97%,如表1所示。在測試過程中發現,連接中斷的次數與所連接的無線網絡密切相關,而數據包丟失主要與網絡波動有關。當WIFI網絡穩定時,成功的數據傳輸數量接近理論傳輸數量,通信穩定,滿足系統所需的穩定高效通信要求。

表1 系統數據傳輸丟包率測試統計
本文介紹了一款實時遠程監測病房環境溫濕度和光照度系統的硬件布局設計和軟件程序設計。通過DHT11溫濕度傳感器和BH1750環境光照強度傳感器采集病房的環境參數并傳送至主控MCU。MCU對接收的數據處理,并打包成MQTT協議包,通過串口發送至ESPWiFi模塊。ESPWiFi模塊把測得的環境數據通過TCP的MQTT協議上傳到服務器。客戶端訂閱服務器數據,實現遠程環境參數的監測。系統運行穩定,成本低、體積小,采用MQTT推送機制,速度快、實時性好,時效性高,適用于硬件性能低下的遠程設備以及網絡狀況糟糕的情況。該系統經調試結果表明硬件設計方案可行、采集的環境參數準確穩定、數據傳輸成功率最低97.3%,平均丟包率1.97%,通信傳輸滿足系統要求,控制算法正確,實現了高效環境監測及遠程控制功能,系統通用性好,具有較好的應用前景。