



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