薛迪杰
(江西理工大學能源與機械工程學院,江西南昌,330013)
近年來,一種全新的網絡—物聯網(Internet of Things)隨著網絡電子技術的飛速發展,出現在公眾面前。作為互聯網領域的另一個拓展,物聯網很快被人們接受,并融入了人們生活、生產的方方面面[1]。在過去互聯網時代,現實生活中的很多信息在網絡上很難被感知和傳輸,然而物聯網的到來卻改變了這一現狀,并將用戶端延伸并擴展到了任何物體與物體之間的信息互換和交流,于是互聯網將世界萬物組成了一個巨大網絡。本文介紹了一種基于ESP8266的物聯網遠程控制系統,利用ESP8266模塊將傳感器設備、控制設備和檢測設備等接入了互聯網。本遠程控制系統利用STM32F103C8T6單片機作為主控制器,利用STM32F103C8T6單片機高速的數據處理能力和豐富的片上資源,可以完美驅動OLED屏幕,兼容ESP8266WIFI模塊和各種傳感器,并可解決傳輸速度問題[2]。本設計完成后,用戶通過手機中安裝的APP可以隨時隨地的進行實時監控,如:監測固定區域中PM2.5濃度,家中門窗是否關閉,家中天然氣濃度等,并且可以對相關設備進行遠程控制;本設計系統只要在有互聯網的地方均可工作,無論距離多遠,甚至在地球的另一端也能輕松的進行遠程監測和控制。
系統要實現網絡遠程控制,首先必須在互聯網上建立一個服務器。本系統直接選用互聯網上已經建好的貝殼物聯云端服務器,主要優點是方便快捷,無需自己再重新創建私人的服務器。其次對手機端進行配置,在手機上創建APP,并根據貝殼物聯云端服務器對手機中APP進行配置,使得手機與服務器建立起TCP連接。然后對終端物聯網ESP8266模塊進行配置,并使其也與云端服務器建立起TCP長連接[3]。
手機端和物聯網終端分別與云端服務器建立好連接后,接下來進行數據發收測試。在手機端使用JSON數據的網絡通信發送數據到服務器,服務器在接收到數據后,會把接收到的數據再轉發給終端物聯網控制和監測模塊。終端接收數據如果和發送數據一致,則通信正常。
然后在物聯網控制和監測模塊終端利用STM32F103 C8T6單片機控制ESP8266模塊發送數據到云端服務器,云端服務器在接收到數據后,將接收到的數據轉發至手機APP端,在手機終端APP上顯示。如果發送數據和接收數據一致,則通信正常。
系統利用云端服務器作為互聯網中間媒介,實現手機APP和物聯網終端互聯互通,從而完成數據傳輸,遠程控制和監測。
本系統通過ESP8266 WIFI模塊與互聯網連接,每個模塊均有獨立的設備ID及獨立的數據傳輸接口,數據傳輸接口數量可以在貝殼物聯官網自行添加或刪除。本系統在開機之后輸入需要連接的WIFI賬號及密碼,連接上網絡之后,各個設備開始工作,各個分設備通過網絡將需要采集的數據傳輸到主機設備上,用戶也可通過手機APP控制相應的設備,云端下傳到設備的數據通過CJson解碼,把需要的數據解析出來以用作控制相應的設備。系統在無人干預狀態下根據環境中天然氣含量判斷是否天然氣泄漏,如果檢測出天然氣泄漏,設備可自動關閉天然氣開關并向用戶發送天然氣泄漏信息。也可自主檢測環境溫濕度,當溫度過高時設備自主打開空調開關,當濕度過高或過低時,設備自主打開除濕機或霧化器,超過設定警報值主機設備通過語音自主播報。
本系統以貝殼物聯為中心,可根據官網上的貝殼物聯平臺通信協議連接云平臺。貝殼物聯云平臺提供的通信協議有TCP、UDP、HTTP、Websocket四種通信協議,本系統采用的是TCP協議。用戶可通過瀏覽器登陸官網、下載官方APP、建立微信通信協議及自行開發APP四種方式與云端進行連接,并傳遞數據。物聯網終端硬件設備主要以意法半導體的STM32F1系列芯片為主,通過ESP8266網絡模塊及其他外圍電路與云端進行連接,把主控單片機通過傳感器采集處理過的數據通過網絡模塊發向云端,通信數據格式為Json字符串,設備通過解碼獲得Json字符串中相應的鍵值。該系統以接口層用戶、中間層服務器及控制層設備組成一套基于ESP8266為基礎的遠程控制監測系統。總系統框圖如圖1所示。

圖1 總系統原理框圖
本系統硬件部分由STM32F103C8T6單片機構成主控,完成主要的傳感器數據處理,控制信號的產生以及控制語音模塊完成語音提示,并通過串口向ESP8266WIFI模塊發送AT指令控制其連接AP,實現設備與云端之間的通信。云端服務器與手機移動端APP的連接,把數據和相應設備上的傳感器感知的數據在移動端顯示出來。如:當家里沒人時可通過濕度傳感器檢測綠植是否需要澆水,需要澆水時可通過APP的控制小水泵對綠植進行澆水,類似的也可控制室內溫度,控制門窗等。系統硬件框圖如圖2所示。

圖2 系統硬件框圖
作為各個控制和檢測外設模塊的核心,主控芯片用來處理傳感器的數據和發送網絡模塊的控制信號。主控芯片具備高性能,低功耗的特點,其內部Cortex?-M3 32位的RISC內核,工作頻率最高可達到72MHz,使用時可用內部分頻器生成自己需要的相應頻率,內置高達64K字節的閃存和20K字節的SRAM,無需外擴存儲器,芯片具有充裕的I/O接口,方便用戶連接外設,并且還支持連接APB總線。STM32處理器具有睡眠模式、停機模式、待機模式三種低功耗模式,單片機在低功耗狀態下喚醒時間可以達到微秒級[4]。ST意法半導體公司為單片機提供了豐富的庫函數,用戶在使用時,可以方便靈活的調用相關庫函數和片上資源,大大提高了開發效率,縮短了開發周期。本設計中采用AT指令對ESP8266WIFI模塊進行控制聯網時,主要用到主控制芯片中的UART串口通信,主控制芯片UART串口多達3個,完全滿足每個設備的需求(系統所需最多3個串口,OLED顯示屏幕使用內置SPI資源)。系統主控STM32芯片使用方便、內部資源豐富、性價比高,非常適合作為本設計的主控芯片。
該模塊的處理器為樂鑫公司研發的專用于物聯網的一款芯片。用戶可以使用該WIFI模塊為現有的設備添加聯網功能,也可以夠構建獨立的網絡控制器[5]。該模塊供電范圍為3.0V~3.6V,供電電流需大于500mA。在給該模塊供電時,電源端需添加濾波電容,保證供電電壓的穩定性,供電接口處連接到3.3V的穩壓電路上,通信時必須保證電壓穩定,不然容易造成設備與云端出現斷連的情況。在檢測溫度的設備上,系統將溫度傳感器與網絡模塊分開布置,并且給網絡模塊安裝散熱器或開啟低功耗模式,避免該模塊運行時產生大量的熱量。如果不采取相應處理措施,會造成傳感器測量誤差加大,導致檢測數據不準確。ESP8266模塊電路原理圖如圖3所示。

圖3 ESP8266模塊電路原理圖
本系統選用0.96寸的OLED顯示屏作為顯示部件。該模塊具有無需背光、視角范圍廣、對比度高、低能耗、刷新反應速度快、全彩化高等優點。此模塊具有SPI通信接口,可以搭配主控單片機的SPI接口,從而節省主控制芯片I/O口;此外低耗電及高對比度不僅可以節能,更增加了可視化界面美觀性。結合主控制器的片上資源和該顯示屏的優點,選用該OLED作為顯示模塊。
編碼器電路作為輸入電路,用來修改所需要登陸的WIFI賬號和密碼,由于WIFI賬號和密碼多為英文字母和數字組成,所以事先在控制芯片中保存了26英文字母(可選擇大小寫)和0-9的數字,通過編碼器作為外部輸入設備來修改物聯網終端需要連接的無線網絡。因為輸入的信息較多,而STM32F103C8T6控制芯片的I/O有限,為了不占用主控單片機過多的I/0口,因此放棄使用矩陣鍵盤的輸入方式,改用編碼器選擇顯示屏的數據輸入方式,這樣能節省鍵盤掃描方式占用的I/O口,為外接其他設備保留更多的I/O接口。
本設計為了體現人性化設計,還加入了語音播報模塊,系統采用國外開源DFPlayer Mini MP3 Player mini音樂播放器模塊。每個外圍設備預先合成一種播報語音儲存在TF卡中,根據主控單片機芯片的計算與處理選擇相應需要播報的音頻,控制芯片通過簡單的UART接收指令即可完成播放指定的播報音頻,音量大小可通過外圍設計功率放大器和調節器件,完成音量大小的調節。
傳感器模塊部分設計為可拆卸替換模塊,不同用戶可以根據所需要檢測和控制的對象靈活進行更換,電路只要少許改變,源代碼稍作修改就可以變換不同的檢測傳感器模塊,從而對不同檢測對象進行測量。本系統設計可測量對象包括環境溫濕度、空氣PM2.5、環境亮暗度、光照強度、甲烷含量、漏水等測量對象。各個模塊可以相互替換,這種設計可以大大縮短PCB制版的時間。
控制模塊采用單片機控制繼電器的方式構成控制電路,在繼電器與I/O口之間添加光耦進行隔離,增加系統的穩定性。繼電器的控制端主要由物聯網終端主控單片機參照相關指令進行控制,繼電器的負載端用來連接相應的用電設備,如空調、加濕器、水泵等。
系統軟件部分主要由網絡模塊聯網、OLED顯示、編碼器讀取、語音播報、傳感器讀取、外圍設備控制幾個程序模塊組成,程序開始后先要對各個模塊進行初始化,然后進入監測控制程序,實時監測和控制被測對象,系統監測和控制部分程序流程圖如圖4所示。
系統程序開始運行后,需要先對ESP8266WiFi模塊進行初始化,先對WiFi模塊復位重啟,然后設置成AP工作模式,并啟動多連接,最后設置開啟服務器模式。WiFi模塊的波特率設置9600,和單片機串口連接,并保持一致。WiFi模塊初始化函數如下:

圖4 系統監測和控制部分程序流程圖
Void WIFI_Init(void)
{
ES = 0;
TI = 1;
printf(“AT+RST ”);
LED();
ms_delay(1000) ;
printf(“AT+CWMODE=3 ”);
LED();
ms_delay(1000) ;
printf(“AT+CIPMUX=1 ”);
LED();
ms_delay(1000) ;
printf(“AT+CIPSERVER=1,8080 ”);
LED();
ms_delay(1000) ;
printf("AT+CIOBAUD=9600 ");
// 設置與單片機一致的波特率
LED();
ms_delay(1000) ;
while(!TI);
TI = 0;
ES = 1;
}
安裝調試好系統后,在實驗室進行測試。在傳感器模塊裝上溫濕度檢測傳感器,并將繼電器負載接上空調和加濕器,分別進行制冷和加濕控制。系統開機運行后,可以實時在手機APP上看到室內溫度和濕度。測試手機APP在異地登錄控制系統,通過連上互聯網的手機可以遠程控制空調和加濕器的開啟和關閉,完全不受地理位置的限制,實現了遠程控制和監測。系統手機APP端運行界面如圖5所示。

圖5 系統手機APP端運行界面
該系統經過多次測試與運行,不斷改進以及不斷優化程序,目前已經可以穩定運行。系統可顯示數據波形圖,PC端可以與移動設備端同時在線控制,并且可以在此基礎上添加其他傳感器。系統在運行中,使用AT指令編程,通過串口通信控制WIFI模塊,通信數據經過物聯網平臺安全加密。本系統外圍傳感器模塊目前已設置有PM2.5檢測電路、甲烷檢測電路、溫濕度檢測電路、門窗控制電路。測試表明,整個系統監測數據準確,控制便捷,同時系統電路易于維護,達到預期目標。此外,整套系統成本較低,經濟實用,適合推廣。本系統還可以進一步加強其功能,將原有的AT配網更改為移動設備配網,開發方式由AT指令開發更改為SDK固件包開發,這樣系統可以節省外接單片機的成本且同樣能滿足系統需求。