摘 要:針對(duì)普通的環(huán)境監(jiān)測(cè)系統(tǒng)存在感知信息不全面、監(jiān)測(cè)接口單一、開發(fā)不夠便捷等不足,文中基于ESP32設(shè)計(jì)了遠(yuǎn)程環(huán)境監(jiān)測(cè)系統(tǒng),充分發(fā)揮了ESP32管腳充足、控制器豐富、片內(nèi)集成WiFi收發(fā)器、開發(fā)便捷等優(yōu)勢(shì)。利用傳感器等采集環(huán)境中的溫度、濕度、光照強(qiáng)度、二氧化碳含量、TVOC含量、氣壓、海拔、磁偏角、紫外線強(qiáng)度、煙霧濃度、噪音強(qiáng)度、火焰告警狀態(tài)、風(fēng)力、雨量、地理位置、時(shí)間等信息;使用TFT彩色顯示屏實(shí)時(shí)顯示環(huán)境信息;借助片內(nèi)收發(fā)器及外接無線傳輸模塊實(shí)現(xiàn)WiFi近距離、LoRa遠(yuǎn)距離、GSM短信不限制距離的無線遠(yuǎn)程監(jiān)測(cè),并采用終端軟件或手機(jī)短信等方式對(duì)環(huán)境進(jìn)行遠(yuǎn)程監(jiān)測(cè)。實(shí)驗(yàn)結(jié)果表明:系統(tǒng)功能完善、運(yùn)行穩(wěn)定,可為同類方案提供參考和借鑒。
關(guān)鍵詞:ESP32;傳感器;遠(yuǎn)程環(huán)境監(jiān)測(cè);WiFi;LoRa;GSM
中圖分類號(hào):TP391 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2095-1302(2024)08-00-04
DOI:10.16667/j.issn.2095-1302.2024.08.008
0 引 言
隨著傳感器技術(shù)、微處理器技術(shù)、無線傳輸技術(shù)的發(fā)展,環(huán)境監(jiān)測(cè)系統(tǒng)的運(yùn)用變得更為廣泛,相應(yīng)方案或產(chǎn)品可用于室內(nèi)、城市、農(nóng)田、機(jī)房、倉(cāng)庫(kù)等場(chǎng)景,便于作業(yè)人員對(duì)環(huán)境進(jìn)行監(jiān)測(cè)并針對(duì)出現(xiàn)的異常采取相應(yīng)措施[1-5]。然而,目前的環(huán)境監(jiān)測(cè)系統(tǒng)仍然存在若干不足,例如文獻(xiàn)[2]選用單片機(jī)作為主芯片,因單片機(jī)管腳不足只能接少量傳感器導(dǎo)致感知信息不全。文獻(xiàn)[3]只外接窄帶物聯(lián)網(wǎng)模塊、文獻(xiàn)[4]只使用片上收發(fā)器,均導(dǎo)致監(jiān)測(cè)接口單一。文獻(xiàn)[5]選用樹莓派作為主芯片,需要先移植系統(tǒng)和驅(qū)動(dòng)才能開始業(yè)務(wù)代碼的編程,開發(fā)不夠便捷。
針對(duì)上述不足,文中基于ESP32設(shè)計(jì)了遠(yuǎn)程環(huán)境監(jiān)測(cè)系統(tǒng)。ESP32采用兩個(gè)哈佛結(jié)構(gòu)Xtensa LX6 CPU構(gòu)成雙核系統(tǒng),體積小,價(jià)格低,片上集成通用型輸入輸出(General Purpose Input/Output, GPIO)、通用異步收發(fā)傳輸器(Universal Asynchronous Reveiver Transmitter, UART)、集成電路總線 (Inter Integrated Circuit, I2C)、串行外設(shè)接口(Serial Peripheral Interface, SPI)、模數(shù)轉(zhuǎn)換(Analog to Digital Convert, ADC)等控制器以及WiFi收發(fā)器,芯片引出的管腳充足且多數(shù)管腳具備復(fù)用功能,利于外接其他功能模塊,支持Arduino集成開發(fā)環(huán)境下導(dǎo)入各種庫(kù)后直接進(jìn)行業(yè)務(wù)應(yīng)用程序的開發(fā),綜合優(yōu)勢(shì)顯著。
1 整體設(shè)計(jì)
文中設(shè)計(jì)的遠(yuǎn)程環(huán)境監(jiān)測(cè)系統(tǒng)由供電模塊、主芯片、參數(shù)存儲(chǔ)模塊、環(huán)境信息采集模塊、狀態(tài)顯示模塊、無線傳輸接口、上位機(jī)組成,如圖1所示[6-7]。
供電模塊提供系統(tǒng)所需的電壓。主芯片ESP32運(yùn)行業(yè)務(wù)代碼,驅(qū)動(dòng)調(diào)度所有外圍設(shè)備。參數(shù)存儲(chǔ)模塊的AT24C256存儲(chǔ)系統(tǒng)具備掉電后保持參數(shù)的特性。環(huán)境信息采集模塊包含各類傳感器,可獲取環(huán)境中的各項(xiàng)信息值。狀態(tài)顯示模塊包括3.5寸薄膜晶體管(Thin Film Transistor, TFT)彩色顯示屏和有源蜂鳴器,提供本地顯示和告警鳴響功能。無線傳輸接口具備三類不同距離的傳輸方式:基于WiFi實(shí)現(xiàn)近距離的信息傳輸,基于LoRa模塊實(shí)現(xiàn)遠(yuǎn)距離的信息傳輸,基于GSM模塊實(shí)現(xiàn)不限制距離的信息傳輸。上位機(jī)可以是手機(jī)、筆記本電腦、PC等,通過網(wǎng)頁(yè)瀏覽器、終端軟件、短信等對(duì)ESP32進(jìn)行訪問和控制。
2 硬件設(shè)計(jì)
采用12 V直流降壓模塊作為系統(tǒng)的下位機(jī)供電電源,
12 V直流電壓經(jīng)降壓后得到5 V和3.3 V電壓,供主芯片和各外設(shè)模塊工作。
I2C接口的外設(shè)包括AHT20溫濕度傳感器、BH1750光照傳感器、SGP30二氧化碳及總揮發(fā)性有機(jī)化合物(Total Volatile Organic Compounds, TVOC)含量傳感器、BMP180氣壓海拔傳感器、HMC5883磁偏角傳感器以及AT24C256存儲(chǔ)芯片。供電模塊為各I2C接口的外設(shè)提供3.3 V電壓,ESP32選用2個(gè)數(shù)字I/O管腳產(chǎn)生I2C時(shí)序,利用I2C總線一對(duì)多的特點(diǎn),與多個(gè)從機(jī)外設(shè)通信。時(shí)鐘、數(shù)據(jù)信號(hào)線上均設(shè)計(jì)上拉電阻。硬件連接關(guān)系如圖2(a)所示。
ADC接口的外設(shè)包括紫外線傳感器、煙霧傳感器、噪音傳感器、火焰?zhèn)鞲衅?、風(fēng)力傳感器、雨量傳感器,供電模塊為各ADC接口的傳感器提供5 V電壓。ESP32選用6個(gè)模擬I/O管腳作為輸入管腳,分別讀取各傳感器的模擬輸出值。硬件連接關(guān)系如圖2(b)所示。
GPIO接口的外設(shè)包括蜂鳴器。ESP32選用1個(gè)數(shù)字I/O
管腳作為輸出管腳驅(qū)動(dòng)蜂鳴器。硬件連接關(guān)系如圖2(c)
所示。
SPI接口的外設(shè)包括分辨率為320×480的3.5寸TFT顯示屏、供電模塊(為顯示屏提供5 V電壓)。ESP32選用3個(gè)
數(shù)字I/O管腳產(chǎn)生SPI時(shí)序控制顯示屏,額外用到3個(gè)數(shù)字I/O管腳產(chǎn)生復(fù)位等信號(hào)。硬件連接關(guān)系如圖2(d)
所示。
UART接口的外設(shè)包括GPS模塊、LoRa模塊、GSM模塊。ESP32內(nèi)有3個(gè)串口控制器,Serial0的發(fā)送管腳TX作為調(diào)試打印管腳,Serial0的接收管腳RX接GPS模塊,型號(hào)為GY-NEO-6M,供電模塊為GPS模塊提供3.3 V電壓。硬件連接關(guān)系如圖2(e)所示。
系統(tǒng)用到一對(duì)LoRa模塊,型號(hào)為正點(diǎn)原子ATK-MW1268D,其中一個(gè)與ESP32的Serial1串口連接,另一個(gè)由PC通過USB轉(zhuǎn)串口連接。ATK-MW1268D配置射頻參數(shù)且工作為串口透?jìng)髂J剑瑑蓚€(gè)模塊正常配對(duì)工作后,向一個(gè)模塊的RX腳寫入的字節(jié)將從另一個(gè)模塊的TX腳發(fā)出,使得ESP32的Serial1與PC的USB轉(zhuǎn)串口能通過無線信道實(shí)現(xiàn)遠(yuǎn)程互通。硬件連接關(guān)系如圖2(f)所示。
ESP32的Serial2連接GSM模塊,型號(hào)為SIM900A,供電模塊為SIM900A提供5 V和3.3 V電壓,SIM900A模塊插入SIM卡后可接入移動(dòng)通信等網(wǎng)絡(luò)。ESP32通過對(duì)SIM900A發(fā)送AT命令實(shí)現(xiàn)短信功能,使得ESP32與手機(jī)能通過移動(dòng)網(wǎng)絡(luò)實(shí)現(xiàn)短信互通。硬件連接關(guān)系如圖2(g)所示。
ESP32片上集成WiFi收發(fā)器,可以配置為AP-Station模式提供無線局域網(wǎng)(Wireless Local Area Networks, WLAN)服務(wù)和DHCP服務(wù),手機(jī)、筆記本電腦等通過WLAN接入ESP32后能實(shí)現(xiàn)TCP/IP協(xié)議的網(wǎng)絡(luò)互通。
3 軟件設(shè)計(jì)
3.1 業(yè)務(wù)流程
在Arduino集成開發(fā)環(huán)境下,遵循setup-loop軟件框架設(shè)計(jì)原則,使用C語(yǔ)言對(duì)ESP32進(jìn)行軟件程序設(shè)計(jì)。Arduino工具為開發(fā)者提供了豐富的函數(shù)庫(kù),使得開發(fā)人員不必關(guān)注系統(tǒng)移植和驅(qū)動(dòng)編程,而只需遵循軟件框架進(jìn)行應(yīng)用層業(yè)務(wù)程序開發(fā)即可[8]。系統(tǒng)的業(yè)務(wù)流程如圖3所示。在初始化的setup函數(shù)中,首先初始化調(diào)試串口、通信串口、I2C總線,通過AT24C256存儲(chǔ)芯片讀取工作參數(shù)后初始化各傳感器外設(shè),配置模擬輸入管腳和數(shù)字輸出管腳,并初始化SPI總線和TFT顯示屏,然后開啟WiFi的AP基站功能,最后進(jìn)入循環(huán)loop函數(shù)。在輪循執(zhí)行的loop函數(shù)中,首先從各傳感器讀取環(huán)境信息,然后在TFT彩色顯示屏更新顯示,并依次判斷是否從WLAN網(wǎng)口、LoRa模塊、GSM短信模塊收到有效命令,若是,則執(zhí)行命令并返回響應(yīng),按需向上位機(jī)報(bào)送告警信息。
3.2 外圍設(shè)備驅(qū)動(dòng)
Arduino集成開發(fā)環(huán)境下有大量應(yīng)用編程接口(Application Programming Interface, API)函數(shù)可以調(diào)用,例如analogRead可以讀取ADC接口傳感器的模擬管腳電壓值,進(jìn)一步換算為環(huán)境信息強(qiáng)度等級(jí);Serial.read和Serial.write可以通過串口收字節(jié)或發(fā)字節(jié);digitalWrite可以寫數(shù)字管腳的輸出電平驅(qū)動(dòng)蜂鳴器和顯示屏;Wire.begin、Wire.read、Wire.write系列的API用于驅(qū)動(dòng)I2C接口的外設(shè)。
3.3 GPS定位信息解析功能
GPS模塊接收衛(wèi)星信號(hào)并定位成功后,每秒通過串口輸出美國(guó)國(guó)家海事電子協(xié)會(huì) (National Marine Electronics Association, NMEA)協(xié)議的一系列字符串信息給ESP32,ESP32通過Serial2.read()函數(shù)接收GPS模塊發(fā)出的全部字節(jié),基于狀態(tài)機(jī)分析$GPRMC信息,解析出經(jīng)度、緯度、時(shí)間等[9]。
3.4 LoRa傳輸功能
LoRa模塊需配置成透?jìng)髂J?,?dāng)ESP32利用LoRa模塊與PC的USB串口通信時(shí),為便于串行數(shù)據(jù)分包被正確解析,需將通信內(nèi)容進(jìn)一步封裝,對(duì)于N字節(jié)待傳內(nèi)容,添加2字節(jié)頭部表示內(nèi)容長(zhǎng)度,添加2字節(jié)尾部表示內(nèi)容校驗(yàn),然后將(2+N+2)字節(jié)通過串行線路(Serial Line Internet Protocal, SLIP)幀協(xié)議轉(zhuǎn)換后發(fā)送。接收方收到字節(jié)后,先解析SLIP幀,再解析出其中的內(nèi)容進(jìn)行分析和反饋,反饋內(nèi)容也遵循2+N+2協(xié)議[10]。
3.5 短信收發(fā)功能
ESP32通過AT命令對(duì)GSM模塊進(jìn)行控制,本系統(tǒng)使用的是字符短信功能[11]。在初始化時(shí),ESP32發(fā)送AT+CSCS=\"GSM\"和AT+CMGF=1指令設(shè)置字符集為英文,發(fā)送AT+CNMI=2, 1指令,SIM卡收到短信后告知ESP32。ESP32需要發(fā)短信時(shí),先發(fā)送AT+CMGS=\"{11位電話號(hào)碼}\"指令設(shè)置目標(biāo)電話號(hào)碼,然后輸入英文字符串的短信內(nèi)容再發(fā)送0x1A,告知GSM模塊開始發(fā)送短信。發(fā)送完成后,GSM模塊向ESP32回復(fù)+CMGS指令表示發(fā)送短信成功。當(dāng)GSM模塊收到短信后,向ESP32報(bào)送+CMTI:\"SM\", n指令,表明收到新的短信且存儲(chǔ)在SIM卡的n位置,ESP32發(fā)送AT+CMGR=n讀取SIM卡n位置處的短信內(nèi)容,GSM模塊的回復(fù)+CMGR指令傳送給ESP32。+CMGR指令后跟來源電話號(hào)碼、短信時(shí)間、短信內(nèi)容等信息,ESP32從中解析出所需信息,然后ESP32發(fā)出AT+CMGD=n,刪除SIM卡位置n處的短信內(nèi)容,便于下一次接收短信。在實(shí)現(xiàn)了收短信、發(fā)短信功能的基礎(chǔ)上,ESP32對(duì)收到的短信中信息部分的內(nèi)容進(jìn)行解析,如果是特定的協(xié)議內(nèi)容,則回復(fù)
短信。
3.6 WiFi訪問功能
ESP32使用WiFi.softAP函數(shù)開啟WiFi功能,定義全局變量WiFi udp和WiFiServer tcp,通過tcp.begin和udp.begin函數(shù)分別開啟一個(gè)UDP和TCP的套接字。基于UDP編程實(shí)現(xiàn)自定義協(xié)議通信,當(dāng)udp.parsePacket函數(shù)返回成功則表明收到UDP包,調(diào)用udp.read 函數(shù)讀取UDP內(nèi)容,如果是特定的命令內(nèi)容,則構(gòu)成反饋包后調(diào)用udp.write函數(shù)返回發(fā)出,UDP包的用戶數(shù)據(jù)部分與LoRa傳輸時(shí)的2+N+2協(xié)議格式一致?;赥CP編程實(shí)現(xiàn)HTTP協(xié)議最終實(shí)現(xiàn)Web服務(wù)功能,當(dāng)tcp.hasClient及tcp.available函數(shù)返回成功,則表明TCP鏈接成功,調(diào)用tcp.read函數(shù)讀取TCP包的內(nèi)容。如果是HTTP協(xié)議格式的包,則構(gòu)成反饋包后調(diào)用tcp.write發(fā)出,然后調(diào)用tcp.stop函數(shù)斷開TCP連接,便于下一次連入[12]。
3.7 上位機(jī)軟件設(shè)計(jì)
使用Visual Studio開發(fā)PC計(jì)算機(jī)終端軟件。調(diào)用USB串口利用LoRa模塊的透?jìng)鞴δ芟駿SP32發(fā)送串口命令,收到反饋信息后,根據(jù)協(xié)議內(nèi)容更新顯示界面。
4 聯(lián)調(diào)演示
基于前述設(shè)計(jì)制作遠(yuǎn)程環(huán)境監(jiān)測(cè)系統(tǒng)演示板,如圖4所示。GSM模塊插入SIM卡,GPS天線放置到能接收到衛(wèi)星信號(hào)的地方,演示板正常工作后采集環(huán)境信息并在顯示屏顯示。手機(jī)搜索演示板的WiFi信號(hào)并接入熱點(diǎn)后,通過瀏覽器訪問演示板從而顯示環(huán)境信息,如圖5所示。PC運(yùn)行上位機(jī)終端軟件,通過LoRa模塊與演示板通信,從而顯示環(huán)境信息以及控制演示板的工作狀態(tài),如圖6所示。使用手機(jī)的短信功能向演示板上GSM模塊的SIM卡電話號(hào)碼發(fā)送特定短信指令,能收到演示板的回復(fù)短信,如圖7所示。經(jīng)測(cè)試,系統(tǒng)各項(xiàng)功能正常,與設(shè)計(jì)相符。
5 結(jié) 語(yǔ)
文中設(shè)計(jì)的基于ESP32的遠(yuǎn)程環(huán)境監(jiān)測(cè)系統(tǒng),使用傳感器采集了多項(xiàng)環(huán)境信息值并通過彩色屏顯示,同時(shí)提供了多種遠(yuǎn)程監(jiān)測(cè)接口。基于WiFi實(shí)現(xiàn)了近距離手機(jī)網(wǎng)頁(yè)瀏覽器監(jiān)測(cè)、基于LoRa實(shí)現(xiàn)了遠(yuǎn)距離PC終端軟件監(jiān)測(cè)、基于GSM模塊實(shí)現(xiàn)了不限制距離手機(jī)短信監(jiān)測(cè)。本系統(tǒng)感知信息全面、監(jiān)測(cè)接口多樣、開發(fā)便捷,可為同類方案或產(chǎn)品提供參考與借鑒。
參考文獻(xiàn)
[1]王忠. ESP32在物聯(lián)網(wǎng)通信課程教學(xué)中的應(yīng)用[J].物聯(lián)網(wǎng)技術(shù),2022,12(4):128-129.
[2]陳達(dá).基于單片機(jī)的室內(nèi)環(huán)境監(jiān)測(cè)設(shè)計(jì)[J].電子測(cè)試,2018,25(z1):25-26.
[3]徐思燕.基于窄帶物聯(lián)網(wǎng)的城市環(huán)境監(jiān)測(cè)系統(tǒng)設(shè)計(jì)[J].物聯(lián)網(wǎng)技術(shù),2021,11(4):31-33.
[4]李國(guó)利.基于ESP32的溫室大棚環(huán)境遠(yuǎn)程監(jiān)控系統(tǒng)設(shè)計(jì)[J].中國(guó)農(nóng)機(jī)化學(xué)報(bào),2022,43(3):47-52.
[5]朱林.基于樹莓派的通信機(jī)房溫濕度監(jiān)控系統(tǒng)設(shè)計(jì)[J].電聲技術(shù),2022,46(10):98-100.
[6]肖鑫海.基于STM32的環(huán)境監(jiān)測(cè)系統(tǒng)設(shè)計(jì)[J].化工自動(dòng)化及儀表,2023,50(1):33-36.
[7]夏長(zhǎng)權(quán).基于STM32的環(huán)境監(jiān)測(cè)系統(tǒng)設(shè)計(jì)[J].電子制作,2023,31(4):3-7.
[8]吳越.基于Arduino和LabVIEW的家居環(huán)境測(cè)量報(bào)警系統(tǒng)[J].現(xiàn)代信息科技,2023,7(10):150-153.
[9]楊栩生.基于STM8的低成本GPS數(shù)據(jù)幀解析與定位系統(tǒng)設(shè)計(jì)[J].電子技術(shù),2023,52(4):31-33.
[10]李逸楠.一種基于SLIP協(xié)議的串行數(shù)據(jù)解析方法[J].科技與創(chuàng)新,2019,23(12):25-28.
[11]李建杰.一種基于SIM800C通信模塊的遠(yuǎn)程防盜報(bào)警器設(shè)計(jì)[J].電子設(shè)計(jì)工程,2022,30(23):130-133.
[12]汪海兵.基于TCP/IP硬件協(xié)議棧的嵌入式HTTP服務(wù)器設(shè)計(jì)與實(shí)現(xiàn)[J].電氣自動(dòng)化,2018,40(5):8-9.
收稿日期:2023-07-26 修回日期:2023-08-29
作者簡(jiǎn)介:張來洪(1989—),男,碩士,工程師,研究方向?yàn)榍度胧郊夹g(shù)、電臺(tái)主控及波形。
魯 興(1992—),男,博士,工程師,研究方向?yàn)榍度胧郊夹g(shù)、通信技術(shù)。
黃正宏(1989—),男,碩士,工程師,研究方向?yàn)榍度胧郊夹g(shù)、硬件設(shè)計(jì)。
葉 ?。?988—),女,碩士,工程師,研究方向?yàn)榍度胧郊夹g(shù)、通信技術(shù)。