,,,
(長沙師范學院 信息科學與工程學院,長沙 400100)
目前,環境問題已經成為人們關注的重點問題,PM2.5[1]在近年來引發全球的關注。采用信息技術手段監測室內環境(如PM2.5等)參數,提高室內家居環境質量已經成為一種趨勢。樹莓派是一款基于Debian Linux系統的嵌入式計算機,因其具有體積小、集成化程度高、擴展性強的優勢被廣泛使用在不同領域的物聯網應用系統中[2],將樹莓派用于智能家居環境下的室內環境監測設計有利于提高系統穩定性和可擴展性。
嵌入式系統集成化程度的不斷提高、功能的不斷完善使得各種技術之間相互滲透、相互促進[3]。樹莓派自帶USB-host、RJ45、HDMI、SD讀卡器等常用接口,并且樹莓派[4]的硬件拓展支持功能較為強大,支持的傳感器種類頗多,有利于日后的功能擴展。本系統由樹莓派控制模塊、ESP8266模塊、傳感器模塊和人體感應模塊4個模塊組成,整體結構圖如圖1所示。
圖1 空氣監測系統總體結構圖
傳感器模塊負責完成室內環境參數檢測,并通過系統連線將參數通過ESP8266傳送到主控制器中,人體感應模塊的傳感器檢測室內是否有人的信號,并直接與主控制器相連,ESP8266模塊作為中介模塊,實現數據傳輸功能的同時并作為WiFi路由客戶端將數據傳送到樹莓派主控制器。主控制器根據傳感器送來的信號將對應的控制信號通過ESP8266控制外接的空調、窗簾、燈具等被控對象。
本項目選擇了樹莓派3B平臺作為主控制器,其搭載了64位4核的ARM Cortex-A53 CPU,自帶板載網口、WiFi和藍牙,內存硬盤為SD卡。樹莓派的系統為嵌入式Linux系統。安裝該系統需要下載鏡像并使用軟件進行燒錄,同時還需要使用安全外殼協議(SSH)、MQTT及SMB協議完成整個設計的配置,此外,其體積小,便于部署和安裝。
ESP8266是一款超低功耗的UART-WiFi 透傳模塊。模塊體積小,便于攜帶,成本低,具有通用USART接口等特性。此外,ESP8266不但能夠實現數據的傳輸,還可以作為WiFi客戶端連接到路由器,基于以上兩點,本設計選擇了ESP8266擴展板作為系統的WiFi模塊。
ESP8266用于數據的傳輸。傳感器將數據傳入ESP8266,然后通過WiFi與樹莓派相連,并通過使用消息隊列遙測傳輸協議(Message Queuing Telemetry Transport,MQTT)將數據傳入樹莓派。
由于ESP8266擴展板的核心芯片NodeMCUDevKit的Rx和Tx引腳用于連接ESP芯片,實現內部的通信,因此傳感器連接NodeMCUDevKit時,選擇了GPIO口的12、13引腳進行連接。
空氣檢測傳感器模塊用于完成室內環境的測量。本系統需要測量的指標有溫度、濕度、PM1.0和PM2.5濃度。本文選取了攀藤的PMS5003系列傳感器,其是一款基于激光散射原理的數字式通用顆粒物濃度傳感器,可連續采集并計算單位體積內空氣中不同粒徑的懸浮顆粒物個數,即顆粒物濃度分布,進而換算成為質量濃度,并以通用數字接口形式從Rx和Tx輸出,其與ESP8266的端口接線如表1所列。內部功能框圖如圖2所示。
表1 ESP8266與傳感器接口配置表
圖2 傳感器內部功能圖
控制模塊用于實現監控系統的控制部分,用于實現遠程控制系統中的自動化控制。本系統選擇了無線WiFi sonoff基本版智能開關,用于連接各種外部設備,通過WiFi路由器將數據傳輸到云平臺,使用戶可以通過移動端遠程控制所有連接的設備。sonoff的工作電壓范圍為3.0~3.6 V,如果接5 V的電壓則會燒毀硬件,所以轉TTL接口時工作電壓應為3.3 V。sonoff開關并不能直接連接樹莓派,需要在軟件中進行配置。修改完成后,用電器和電源的零火線分別與sonoff相對應的輸入輸出口相接后上電。其外部連線圖如圖3所示。
圖3 sonoff開關外部負載接線圖
ESP8266的官方固件不支持PMS5003T傳感器溫度和濕度數據傳輸。在官方固件中,數據11為0.1升空氣中直徑在5.0 μm以上的顆粒物個數,數據12為0.1升空氣中直徑在10 μm以上的顆粒物個數,而PMS5003T的溫度數據口為數據11,濕度數據口為數據12,因此要進行修改,數據才能上傳至ESP8266,否則無法得到溫度和濕度的數據。為了保證精確度,溫度和濕度的數值要精確到小數點后兩位,因此要用到float函數。關鍵部分代碼如下:
log += F(", temperature="); //溫度數據
log += float(data[10]/10.00);
log += F(", humidity="); //濕度數據
log += float(data[11]/10.00);
addLog(LOG_LEVEL_DEBUG_MORE, log);
SerialRead16(&checksum2, NULL);
SerialFlush(); //串口數據監測
if (checksum == checksum2){
UserVar[event->BaseVarIndex] = data[3];
//輸出的數據為PM1.0
UserVar[event->BaseVarIndex + 1]= data[4];
//輸出的數據為PM2.5
UserVar[event->BaseVarIndex+2]=
float(data[10]/10.00); //輸出為溫度
UserVar[event->BaseVarIndex+3]=
float(data[11]/10.00); //輸出為濕度
return true;
}
在ESP8266的web頁面顯示的效果如圖4所示,可得到當前環境的PM1.0、PM2.5、溫度和濕度數據,若GPIO口的設置或連接錯誤,則Values一欄中的數據空缺。
圖4 ESP8266監控頁面
本設計的主控平臺為樹莓派。除了配置樹莓派操作系統之外,還需要配置SSH、MQTT及SMB協議,從而為ESP8266提供有效的數據交換保障。
MQTT是一種基于發布/訂閱模式的“輕量級”通信協議,為連接遠程設備提供實時可靠的消息服務。PMS5003T的數據通過數據線連接傳輸到ESP8266后,使用MQTT協議將數據傳入樹莓派,從而在樹莓派的web頁面上顯示監測數據。其中用Mosquitto實現MQTT協議。在樹莓派中安裝Mosquitto,并且配置賬號密碼,用于實現數據的安全傳輸。安裝后即可在putty中進行賬號密碼的設置,代碼如下:
mqtt:
broker: 192.168.1.113 //服務器地址
username: pi //登錄名
password: raspberry //登錄密碼
port: 1883 //登錄端口
配置完成后在樹莓派的顯示如圖5所示。
圖5 樹莓派web監控頁面
內網通常指局域網,外網也就是廣域網即Internet。家居系統要實現遠程訪問家中設備,可以通過外網與內網之間的數據交換實現。內網與外網交換數據要通過路由器或網關的網絡地址轉換(NAT)進行。然而,來自外網對內網數據的訪問請求,路由器或網關在絕大多數情況下都會進行攔截,使用內網穿透技術中的端口映射實現外網訪問。
端口映射是NAT的一種,將一臺主機的內網(LAN)IP地址映射成一個公網(WAN)IP地址,當用戶訪問提供映射端口主機的某個端口時,服務器將請求轉移到本地局域網內部提供這種特定服務的主機。
本設計采取的方式是通過花生殼域名解析器實現端口映射,完成外網訪問,配置如圖6所示。使用花生殼賬戶即SN訪問花生殼界面并完成端口映射內網主機的IP地址即樹莓派在局域網的IP地址,從而能在無公網IP的情況下,通過內網地址的映射和穿透將樹莓派web網頁上的數據都映射到公網上,實現遠程監控。
圖6 花生殼域名解析器配置圖