構(gòu)建基于STM32的環(huán)境監(jiān)測系統(tǒng),使用裸機驅(qū)動器讀取溫度和濕度,并顯示實時數(shù)據(jù)
我們的項目是一個實時溫濕度監(jiān)測系統(tǒng),使用STM32微控制器,AHT21溫濕度傳感器和帶有8080并行接口的ST7789液晶顯示器構(gòu)建。
系統(tǒng)通過AHT21傳感器連續(xù)測量周圍環(huán)境的溫度和濕度。STM32不使用內(nèi)置庫,而是通過定制軟件I2C(位敲擊)驅(qū)動程序與傳感器通信,從而完全控制時序和數(shù)據(jù)傳輸。
當測量被觸發(fā)時,STM32向AHT21傳感器發(fā)送所需的命令,并等待傳感器完成其內(nèi)部轉(zhuǎn)換。在接收到原始數(shù)據(jù)字節(jié)后,微控制器處理并將其轉(zhuǎn)換為可讀的溫度(°C)和濕度(%)值。
計算值然后實時顯示在LCD屏幕上。顯示器使用8位8080并行接口,由定制的STM32 LCD驅(qū)動程序驅(qū)動,該驅(qū)動程序以兩個8位傳輸方式發(fā)送16位RGB顏色數(shù)據(jù)。這允許快速和平滑的屏幕更新,而不依賴于外部圖形庫。
系統(tǒng)每秒刷新傳感器讀數(shù),提供穩(wěn)定、準確的環(huán)境數(shù)據(jù)。實現(xiàn)了一個輕量級的自定義GUI和位圖字體渲染器,以清晰有效地顯示值。
步驟1 -引腳映射和硬件配置
在編寫任何代碼之前,第一步是仔細分析RT-Spark (STM32F407)引腳,并了解外部組件如何連接到微控制器。
上圖顯示了在STM32CubeMX中配置的STM32引腳分配,突出顯示了用于AHT21傳感器和ST7789 LCD顯示器的引腳。
?AHT21傳感器連接(軟件I2C)
?PE0→AHT21_SDA(數(shù)據(jù)線)
?PE1→AHT21_SCL(時鐘線)
這些引腳配置為開漏GPIO輸出,以實現(xiàn)基于軟件的I2C(位敲打)接口。這允許完全控制I2C時序,而不是使用硬件I2C外設(shè),這對于學習和調(diào)試低級通信非常有用。
?LCD接口(FSMC - 8080并行總線)
?ST7789 LCD采用8080式并行接口,通過STM32的FSMC(柔性靜態(tài)存儲器控制器)連接。
?FSMC數(shù)據(jù)總線(LCD - 8位模式)
LCD顯示器以8位并行方式使用FSMC(柔性靜態(tài)存儲器控制器)連接。
?Pd14→fsmc_d0
?Pd15→fsmc_d1
?PD13→FSMC_A18用作LCD的控制/地址線(通常映射為RS / DC)
步驟2 -驅(qū)動程序?qū)崿F(xiàn)
編寫自定義驅(qū)動程序來控制傳感器和顯示器,而不使用外部庫。
?液晶驅(qū)動程序
?支持8位FSMC傳輸
?將16位RGB565顏色數(shù)據(jù)拆分為兩個8位寫入
?包括自定義繪圖、文本和位圖字體函數(shù)
LCD驅(qū)動支持8位FSMC傳輸拆分16位RGB565顏色數(shù)據(jù)為兩個8位寫入包括自定義繪圖,文本,和位圖字體功能
?AHT21司機
?實現(xiàn)軟件I2C協(xié)議(Start, Stop, ACK, Send/Read)
?發(fā)送測量命令并讀取原始傳感器數(shù)據(jù)
?將原始值轉(zhuǎn)換為溫度(°C)和濕度(%)
AHT21 driver實現(xiàn)軟件I2C協(xié)議(Start, Stop, ACK, Send/Read)發(fā)送測量命令,讀取原始傳感器數(shù)據(jù),將原始值轉(zhuǎn)換為溫度(°C)和濕度(%)
步驟3 -系統(tǒng)集成和測試
所有驅(qū)動程序都集成在main.c中,以創(chuàng)建一個完整的工作系統(tǒng)。
?每秒讀取傳感器數(shù)據(jù)
?移動平均濾波器平滑溫度和濕度值
?處理值實時顯示在LCD上
?心跳像素確認系統(tǒng)正在運行
?如果通信失敗,錯誤處理將復位傳感器
步驟4 -實時數(shù)據(jù)處理和顯示
上圖顯示了系統(tǒng)的運行情況,在ST7789液晶顯示器上顯示實時溫度和濕度讀數(shù)。STM32每秒持續(xù)與AHT21傳感器通信,應(yīng)用移動平均濾波器平滑數(shù)據(jù),并實時更新屏幕。
?溫度以紅色顯示,單位為℃。
?濕度以藍色顯示,單位為%。
角落里閃爍的小像素充當心跳指示燈,確認主程序循環(huán)正常運行。
如果傳感器讀取失敗,則短暫顯示錯誤消息(“read Err”),STM32自動重新初始化傳感器以保持連續(xù)運行。
這一步演示了硬件、驅(qū)動程序、過濾和顯示的集成,展示了系統(tǒng)如何提供穩(wěn)定、可讀和實時的環(huán)境數(shù)據(jù)。
本文編譯自hackster.io





