圖形化展示modbus溫濕度傳感器數(shù)據(jù)并通過(guò)滑條控制LED亮度
1 項(xiàng)目介紹
本項(xiàng)目基于STM32F469I-DISCO開發(fā)板,實(shí)現(xiàn)了一個(gè)完整的溫濕度監(jiān)測(cè)與LED亮度控制系統(tǒng)。系統(tǒng)通過(guò)溫度傳感器采集環(huán)境數(shù)據(jù),使用開發(fā)板的高性能LCD顯示屏圖形化展示實(shí)時(shí)數(shù)據(jù),同時(shí)通過(guò)PWM 信號(hào)控制LED亮度,提供直觀的環(huán)境監(jiān)測(cè)和燈光控制功能。
2 系統(tǒng)框圖
3 運(yùn)行流程圖
4 實(shí)現(xiàn)細(xì)節(jié)硬件配置
主控板:STM32F469I-DISCO
傳感器:溫度傳感器
顯示:開發(fā)板自帶480×800分辨率LCD觸摸屏
LED控制:使用板載LED或外接LED通過(guò)PWM控制
5 軟件功能
5.1 溫濕度數(shù)據(jù)采集
通過(guò)串口讀取modbus 傳感器數(shù)據(jù)
定時(shí)采集環(huán)境溫濕度數(shù)據(jù)
數(shù)據(jù)校驗(yàn)與錯(cuò)誤處理
5.2 圖形化顯示
實(shí)時(shí)數(shù)據(jù)顯示
5.3 LED亮度控制
觸摸屏滑動(dòng)條控制PWM占空比
6 具體步驟
使用touchGFX軟件創(chuàng)建工程
添加背景窗口
添加靜態(tài)顯示文本
溫濕度數(shù)據(jù)顯示控件添加
LED相關(guān)控件添加
至此圖形界面基礎(chǔ)部分已經(jīng)完成,燒錄程序
觀察初步效果
滑塊聯(lián)動(dòng)邏輯添加
接下來(lái)進(jìn)行相關(guān)代碼編輯工作,點(diǎn)擊生成代碼,并打開代碼所在文件夾
使用cubemx ide軟件打開工程文件
添加顯示數(shù)據(jù)更新相關(guān)函數(shù)
實(shí)現(xiàn)函數(shù)slider_light_change功能
階段性成果展示
接下來(lái)配置Arduino擴(kuò)展板D12引腳為PWM輸出模式
在代碼中開啟PWM輸出
更新model類
更新ModelListener類,添加接口函數(shù)
更新MainScreenPresenter類
view類更新
至此即可通過(guò)手指觸摸改變滑條位置并同步控制LED亮度,如下圖所示
低亮度
高亮度
接下來(lái)設(shè)置溫度傳感器相關(guān)代碼,此處我們選擇的時(shí)485溫濕度傳感器,需要通過(guò)開發(fā)板擴(kuò)展接口的USART6配合電平轉(zhuǎn)換模塊與傳感器進(jìn)行數(shù)據(jù)通訊
配置USART6,添加DMA及中斷使能
接下來(lái)到了很關(guān)鍵的一步,我們這里使用github上的一款成熟驅(qū)動(dòng)庫(kù),實(shí)現(xiàn)modbus數(shù)據(jù)讀取。
https://github.com/alejoseb/Modbus-STM32-HALFreeRTOS
接下來(lái)就到了實(shí)踐環(huán)節(jié)。
提前下載庫(kù)文件至本地。
將MODBUS-LIB文件夾拖動(dòng)到Middleware文件夾下,與FreeRTOS文件夾同級(jí)
選擇復(fù)制文件
添加頭文件目錄
復(fù)制ModbusConfi gTemplate.h到INC目錄下,并重命名為ModbusConfi g.h
添加modbus主站初始化代碼
創(chuàng)建modbus數(shù)據(jù)讀取線程
更新model類,添加溫濕度數(shù)據(jù)同步顯示刷新相關(guān)邏輯
至此代碼編輯工作已完成,燒錄觀察現(xiàn)象
吹口哈氣之后
7 項(xiàng)目特色
直觀的圖形化界面,數(shù)據(jù)展示生動(dòng)形象
觸摸屏交互,操作簡(jiǎn)便
低功耗設(shè)計(jì),適合長(zhǎng)期監(jiān)測(cè)
后續(xù)改進(jìn)方向
增加Wi-Fi/ 藍(lán)牙模塊實(shí)現(xiàn)遠(yuǎn)程監(jiān)控
添加數(shù)據(jù)存儲(chǔ)功能(SD 卡記錄)
開發(fā)手機(jī)APP 配套控制
增加更多環(huán)境傳感器(如CO2、PM2.5)
備注,最開始作者想直接通過(guò)GPIO 采集DHT11傳感器數(shù)據(jù),后來(lái)代碼在未經(jīng)git 托管的情況下,未跑通。
緊接著想通過(guò)ADC讀取LM35溫度傳感器數(shù)據(jù),后來(lái)這個(gè)ADC相關(guān)驅(qū)動(dòng)代碼也沒跑通。
最后靈機(jī)一動(dòng),手頭正好有485溫濕度傳感器,而且還是modbus協(xié)議的,最關(guān)鍵的是這個(gè)開源的驅(qū)動(dòng)庫(kù)筆者使用過(guò)好幾次,比較順手。簡(jiǎn)單寫幾行代碼就行了。
最后強(qiáng)調(diào),開發(fā)項(xiàng)目強(qiáng)烈建議使用git 進(jìn)行代碼管理。
(本文來(lái)源于《EEPW》202505)
評(píng)論