






摘 要:基于ESP32為主芯片設計環境監測系統,獲取環境中的溫濕度、光照強度、氣壓、海拔、紫外線強度、煙霧濃度、二氧化碳含量、甲醛含量、TVOC含量、PM2.5含量等一系列環境信息以及實時時鐘信息,通過LED燈、OLED屏實現環境信息的狀態顯示和信息值的屏幕顯示,基于語音合成模塊實現環境信息的語音播報,通過RS 232串口、串口轉USB、以太網、WiFi、藍牙等多種接口將環境信息報送至上位機,通過多種接口或調試指令對ESP32的工作狀態進行管理。詳細介紹了該系統的整體設計、硬件設計、軟件設計。通過聯調演示,證明該系統各項功能正常、運行穩定,可用于辦公室、農業大棚、儲物倉庫等場景的環境監測,也為同類方案或產品提供參考和借鑒。
關鍵詞:ESP32;傳感器;環境監測;屏幕顯示;語音播報;上位機
中圖分類號:TP29 文獻標識碼:A 文章編號:2095-1302(2024)05-00-04
0 引 言
ESP32是樂鑫信息科技提供的微控制器(Micro Control Unit, MCU)芯片,采用兩個哈佛結構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收發器和藍牙收發器,兼具功能強大、性能穩定、體積精巧、價格低廉的優勢[1]。本文將ESP32作為主芯片,結合一系列外部器件,設計一套環境監測系統,監測環境中的多項參數,可用于辦公室內、農業大棚、儲物倉庫等場景的環境監測,也為同類方案或產品提供參考和借鑒[2-4]。
1 系統整體設計
整個環境監測系統由供電模塊、主芯片、采集模塊、狀態顯示模塊、狀態上報接口、上位機組成[5-6],如圖1所示。
供電模塊負責提供主芯片及各種外圍設備工作所需的電壓。ESP32作為主芯片,片內充分利用處理器核、各種控制器、WiFi及藍牙收發器等資源,對外則驅動各種外圍設備。采集模塊包括AHT20溫濕度傳感器、BH1750光照強度傳感器、BMP180氣壓海拔傳感器、S12SD紫外線強度傳感器、MQ-2煙霧濃度傳感器、JW01模組二氧化碳甲醛總揮發性有機化合物(Total Volatile Organic Compounds, TVOC)含量三合一傳感器、ZPH02模組PM2.5含量傳感器等傳感器模塊,以及PCF8563實時時鐘、AT24C256存儲芯片、4路輸入按鍵。狀態顯示模塊包括綠、黃、紅狀態顯示LED燈,有源蜂鳴器,SSD1306-OLED顯示屏。狀態上報接口包括RS 232串口接口、串口轉USB接口、基于W5500實現的RJ 45以太網接口、基于SYN6658語音合成模塊實現的LINE音頻線接口和語音播報喇叭,以及ESP32提供的WiFi和藍牙接口。上位機可以是串口、網口、USB接口的PC,也可以是WiFi和藍牙接口的手機等無線設備。ESP32的上報接口同時提供CS(客戶端-服務器)和BS(瀏覽器-服務器)服務,上位機可以使用按協議設計的終端軟件,或者使用網頁瀏覽器,來訪問ESP32的狀態信息或對ESP32的工作狀態進行管理。
2 硬件設計
基于ESP32芯片模組與各外圍設備器件設計硬件平臺,各模塊的內部電路硬件均穩定,需要著重注意搭建時的硬件連接關系[7]。ESP32與各外圍設備的連接關系如圖2所示。
供電設計:調試階段可以使用MINI-USB接口為ESP32供電,MINI-USB聯合ESP32的電壓輸出管腳為采集模塊、狀態顯示模塊、狀態上報接口的各器件供電,調試完成后使用可充電鋰電池為主芯片和各外圍設備供電。
GPIO接口的外設:選用ESP32的4路IO實現數字輸入功能,外接輸入按鍵。選用ESP32的4路IO實現數字輸出功能,分別接綠色、黃色、紅色的LED燈和有源蜂鳴器。
ADC接口的外設:選用ESP32的2路IO實現ADC模擬輸入功能,分別外接S12SD紫外線強度傳感器、MQ-2煙霧濃度傳感器。ESP32以模擬量讀取ADC管腳的值,當管腳上的電壓為3.3 V時,讀值4095為最大值,當管腳上電壓為0 V時,讀值0為最小值,中間區域可作線性比例處理,從而獲取S12SD的紫外線強度和MQ-2的煙霧濃度。
I2C接口的外設:選用ESP32的2路IO管腳實現I2C總線,ESP32作為主機發出I2C時序控制一系列不同從機地址的I2C外圍設備,從而讀取AHT20的溫濕度信息、BH1750的光照強度信息、BMP180的氣壓信息,進一步計算出海拔信息,控制OLED顯示屏動態顯示各狀態信息,讀取或設置PCF8563的實時時間信息,訪問AT24C256存取工作參數。
UART接口的外設:ESP32片上有三個串口控制器(Serial0、Serial1、Serial2),通信波特率都配置為9 600 b/s,8位數據位,1位停止位,無校驗位。Serial0的輸出實現調試打印功能,便于調試觀測代碼流程,Serial0的輸入實現調試命令解析功能,解析出正確的指令后可以設置PCF8563的時間、設置ESP32的工作參數并存入AT24C256。Serial1、Serial2的RX線分別接JW01模組、ZPH02模組,這兩個模組正常工作時,會將獲取的環境信息按協議格式以串口格式的包發出,每包定常為8字節,且包頭有固定的標識,包尾有校驗值。ESP32收到模組的串口包后,基于狀態機即可解析出包中間的字節從而獲取環境信息。Serial1的TX線分成兩路,一路接串口轉USB器件,一路接TTL電平轉RS 232電平器件,分別對PC提供USB接口和RS 232接口的串口上報接口。Serial2的TX線接到SYN6658語音合成模塊,ESP32遵照協議通過串口向SYN6658發送待合成的文字信息,文字信息由固定的漢字編碼加變化的環境信息值合并而成,SYN6658實現文字轉語音的合成功能,輸出語音信息到LINE音頻線,LINE線可以進一步接音響或耳機,同時SYN6658通過所接的喇叭播報語音。
SPI接口的外設:選用ESP32的4路IO管腳實現SPI總線,通過SPI時序控制W5500模塊,W5500內部硬件集成TCP/IP協議棧,W5500模塊對外提供RJ 45以太網接口[8]。W5500提供了套接字編程接口,支持TCP和UDP協議。ESP32對W5500進行UDP編程,從而對上位機提供CS服務,ESP32對W5500進行TCP編程,實現HTTP服務功能,從而對上位機提供BS服務。
WiFi接口: ESP32運行片上WiFi的AP基站功能,ESP32的WiFi具備無線局域網(Wireless Local Area Networks, WLAN)網卡屬性且運行dhcpd服務程序。手機等無線設備通過WLAN接入ESP32后,ESP32為無線設備分配WLAN同網段的IP地址,在此基礎上ESP32與無線設備基于TCP/IP協議互聯,兩者能通過UDP和TCP協議進行網口套接字通信。
藍牙接口:ESP32可以將片上藍牙功能虛擬化為串口,手機等無線設備的藍牙也使用串口模式,ESP32與無線設備基于藍牙虛擬串口進行串口通信。
3 軟件設計
使用Arduino工具對ESP32進行軟件開發和燒寫,Arduino工具通過導入芯片包實現ESP32的底層驅動功能,用戶只需調用驅動層的接口函數,即可進行業務功能的應用層開發。Arduino工具提供程序框架,提供初始調用一次的setup函數和隨后輪詢調度的loop函數供用戶填充,用戶需在setup函數里填充初始化功能,在loop函數里填充需運行的業務功能[9]。
在setup函數里,需要執行的操作如圖3所示。首先初始化調試串口,然后依次初始化各類通信總線,以及對總線上所接的傳感器外設進行初始化[10]。還需從AT24C256讀取工作參數,例如訪問外設的時間間隔,默認100 ms,以及環境信息的告警閾值,例如溫度的告警上下限、二氧化碳含量的告警上下限等。初始化W5500后,配置以太網口的UDP和TCP套接字;初始化WiFi后,配置WLAN網口的UDP和TCP套接字;初始化藍牙后,配置藍牙虛擬串口。
在loop函數里執行業務流程如圖4所示。首先從各個傳感器讀取環境信息和時間信息,對于I2C接口的傳感器,讀寫交互后,從外設寄存器獲取信息;對于ADC接口的傳感器,讀ADC功能管腳的模擬值獲取信息;對于UART接口的傳感器,接收串口字節后基于狀態機解析后獲取信息。新讀的值與最近5次歷史值整合計算平均值,作為當前有效值,用結構體變量存儲。然后使用OLED顯示屏顯示環境信息,因OLED屏幕大小有限,每輪loop函數只顯示所有環境信息的其中幾條。同時通過LED燈顯示環境狀態,若環境狀態值均正常,則綠燈亮;如果環境狀態值稍微超出正常范圍,則黃燈亮;如果環境狀態值嚴重超出正常范圍,則紅燈亮,且蜂鳴器響,提醒人采取相應措施,例如通過通風降低二氧化碳含量。此外,如果檢測到按鍵有按下動作時,經軟件防抖處理后,運行相應的功能,按鍵1對應功能為語音播報時間信息,按鍵2對應功能為語音播報環境信息。再者,基于狀態機解析藍牙串口收到的字節,解析出命令包,基于套接字檢測是否收到WiFi或以太網口的UDP命令包,如果是查詢命令,則將環境信息結構體變量中的值按協議返回;如果是配置命令,則修改工作狀態;如果是HTTP的GET請求,則返回Web頁面的應答。之后,將本輪環境值通過串口報送給上位機。最后,判斷是否需執行Serial0調試命令,之后進行延時等待,退出本輪loop函數,進入下一輪loop函數。
參考Linux系統的shell命令行,對Serial0的輸入指令進行功能解析,當輸入的指令滿足一定格式時,則執行相應功能。例如“SETTIME:2023-04-10 10:53:00”是設置時間,“SETTEMPU:60”是設置溫度告警上限。
為了通過上位機對環境監測系統的狀態進行顯示和控制,可以在上位機開發終端軟件,使用軟件控件調用操作系統的API,基于串口或網口編程與ESP32通信,也可以不用終端軟件而直接使用網頁瀏覽器訪問ESP32。
4 聯調演示
基于ESP32芯片模組與各外圍設備器件實現演示板,按硬件設計連接各信號線,制作完整的演示板如圖5所示。
ESP32程序正常啟動運行后,LED狀態燈顯示正常,OLED屏翻頁逐條顯示各項環境信息的值,如圖6所示。
PC通過以太網口接入演示板,運行PC上設計的終端軟件,能更新顯示環境信息,且能對ESP32的工作狀態進行配置。在PC瀏覽器輸入ESP32的以太網IP地址,ESP32會返回環境信息。手機上能搜到并接入ESP32的WiFi信號,在手機瀏覽器輸入ESP32的WLAN的IP地址,ESP32會返回環境信息。上位機通過瀏覽器訪問ESP32的界面如圖7所示。
按下演示板上的按鍵1,喇叭會播報時間信息。按下演示板上的按鍵2,喇叭會播報環境信息。在調試串口輸入設置時間、設置工作參數等命令,演示板均有正常響應。
調整演示板所處環境的溫度、光照等狀態,演示板上顯示和上報的環境信息會隨之變化,且與溫度計等儀器測得的值接近一致,可見本系統各項功能均正常,且運行穩定。
5 結 語
本文設計了基于ESP32的環境監測系統,完成了多項環境信息的采集、多種方式的顯示、多種接口的上報,可用于辦公室內、農業大棚、儲物倉庫等場景的環境監測,也為同類方案或產品提供參考和借鑒。
本系統還可優化調整,例如,為了節省功耗,也許并不需要多個傳感器同時工作,也不需要多種上報接口同時工作,可以在硬件上添加使能設計,在軟件上規劃ESP32的工作參數,做合理調度;在運行過程中,按需動態地使能訪問各外圍設備。
參考文獻
[1]王忠. ESP32在物聯網通信課程教學中的應用[J].物聯網技術,2022,12(4):128-129.
[2]何經偉.基于ESP32的辦公環境信息監測系統[J].電子技術與軟件工程,2019,8(24):153-154.
[3]孔寧.基于ESP32的畜場環境監測系統設計與實現[J].現代牧業,2022,6(4):37-43.
[4]陳星星.基于ESP32的糧倉遠程溫濕度監控系統[J].電子技術與軟件工程,2018,7(14):94.
[5]肖鑫海.基于STM32的環境監測系統設計[J].化工自動化及儀表,2023,50(1):33-36.
[6]夏長權.基于STM32的環境監測系統設計[J].電子制作,2023,31(4):3-7.
[7]任肖麗.基于STM32的環境監測系統設計[J].集成電路應用,2021,38(8):14-15.
[8]王鵬.基于W5500以太網模塊的溫濕度實時在線采集系統設計[J].通訊世界,2020,27(3):67-68.
[9]謝明瑋.基于Arduino的物聯網家居硬件系統設計與實現[J].物聯網技術,2023,13(2):78-81.
[10]樂萬德. Arduino串口通信控制系統的研究[J].電子設計工程,2022,30(4):69-73.
作者簡介:張來洪(1989-),男,碩士,中級工程師, 研究方向為嵌入式技術、電臺主控及波形。
關海偉(1989-),男,碩士,中級工程師, 研究方向為嵌入式技術、電臺主控及波形。
魯 興(1992-),男,博士,中級工程師, 研究方向為嵌入式技術、通信技術。
張 揚(1993-),男,碩士,中級工程師, 研究方向為嵌入式技術、上位機軟件設計。
收稿日期:2023-05-07 修回日期:2023-06-05