【RT-Thread作品秀】智能天氣小站
作者:AlgoIdeas
概述
嵌入式開發(fā)需要多動(dòng)手,多實(shí)踐才能不斷取得成長(zhǎng)和進(jìn)步。第一次接觸新的知識(shí),難免會(huì)遇到挫折和困難,只要有足夠的耐心和不斷探索的信心,并不斷學(xué)習(xí)和實(shí)踐,同時(shí)有所思考,就會(huì)有收獲。智能天氣小站是一個(gè)很好的切入點(diǎn),同時(shí)自己作為一名STM32新手,第一次接觸RT-Thread、也第一次接觸TouchGFX,感受頗多,收獲頗豐。
開發(fā)環(huán)境
硬件:ART-Pi
RT-Thread版本:4.0.3
開發(fā)工具及版本:RT-ThreadStudio 2.0
ART-Pi SDK版本: SDK v1.0.1
RT-Thread使用情況概述
項(xiàng)目主要基于ART-Pi SDK中的art_pi_factory例程,并在例程基礎(chǔ)上增加其他軟件基礎(chǔ)組件。
內(nèi)核采用RT-Thread原生內(nèi)核,版本RT-Thread v4.0.3
組件列表:
rt_ota_lib – 升級(jí)相關(guān)
touchgfx_lib – TouchGFX相關(guān)界面實(shí)現(xiàn)
wlan_wiced_lib – WLAN庫(kù)
涉及軟件包:
EasyFlash-v4.1.0 -- 輕量級(jí)物聯(lián)網(wǎng)存儲(chǔ)庫(kù)
adbd-v1.1.1 – ADB遠(yuǎn)程調(diào)試
btstack-v0.0.1 – 藍(lán)牙協(xié)議棧
cJSON-v1.0.2 – JSON庫(kù)
dht11-latest – DHT11溫度傳感器庫(kù)
fal-v0.5.0 -
gt9147-latest -- 觸摸驅(qū)動(dòng)
littlefs-v2.0.5 --
lwgps-latest -- 輕量級(jí)GPS解析庫(kù)
netutils-v1.2.0 – 網(wǎng)絡(luò)相關(guān)工具
webclient-v2.1.2 – WEB客戶端
webnet-v2.0.2 – web接口相關(guān)實(shí)現(xiàn)
注:gps和presssensor相關(guān)包或模塊可供二次開發(fā)
硬件框架
主控芯片:STM32H750XB (ART-Pi開發(fā)板)
圖形框架:TouchGFX
SD卡1張: 8G
溫濕度傳感器DHT11:使用GPIO獲取數(shù)據(jù)
網(wǎng)絡(luò):板端自帶的AP6212A WIFI+藍(lán)牙一體芯片
4.3寸電容屏:使用I2C總線驅(qū)動(dòng)觸摸(觸摸芯片GT9147),LCD使用RGB888格式
時(shí)間的獲?。豪套詭У腞TC+NTP自動(dòng)網(wǎng)絡(luò)對(duì)時(shí)
天氣的獲取:通過http客戶端的方式獲取網(wǎng)絡(luò)開放API接口的天氣數(shù)據(jù),目前主要從心知天氣(https://www.seniverse.com/api)獲取,
后續(xù)二次開發(fā),也可采用其他網(wǎng)站獲取,如openweathermap(https://api.openweathermap.org/data/2.5/)等
軟件框架說明
軟件如果需要通過網(wǎng)絡(luò)獲取天氣信息,需要先進(jìn)行聯(lián)網(wǎng),目前支持藍(lán)牙配網(wǎng)(具體請(qǐng)參考ART-Pi官方教程),目前僅支持本地預(yù)先設(shè)置好的地區(qū)的溫度的獲取,后續(xù)可以擴(kuò)展UI設(shè)計(jì),或通過GPS定位來(lái)獲取位置信息。
同時(shí),默認(rèn)支持DHT11數(shù)字溫度傳感器獲取本地的實(shí)時(shí)溫濕度數(shù)據(jù),并通過GUI進(jìn)行顯示。軟件主體框架如下圖所示:
系統(tǒng)設(shè)置界面,支持將溫濕度數(shù)據(jù)存儲(chǔ)為日志文件到SD卡(后續(xù)可以二次開發(fā),讀取歷史文件并直接在UI界面顯示歷史數(shù)據(jù)),可以開啟或關(guān)閉該功能,同時(shí)支持自動(dòng)關(guān)屏設(shè)置。
軟件模塊說明
UI設(shè)計(jì)
GUI采用TouchGFX來(lái)設(shè)計(jì),目前采用的版本是TouchGFX 4.15.0,主要分為3個(gè)主要界面:主頁(yè)、系統(tǒng)設(shè)置和歷史溫度數(shù)據(jù)分析,分別如下圖圖1、圖2和圖3所示。
TouchGFX官方介紹
TouchGFX 4.13 版本是繼TouchGFX 4.12 之后的又一重要版本。4.13版具備了將動(dòng)畫推到60FPS的功能,還增加了可緩存容器、不完全幀緩沖區(qū)以及新的L8壓縮格式等性能,這表明了 ToughGFX 不斷追求優(yōu)化性能和持續(xù)迭代的匠心。4.13版本還解決了另一個(gè)問題:嵌入式系統(tǒng)開發(fā)人員的用戶界面可訪問性。通過將TouchGFX Generator集成到 STM32CubeMX 中,經(jīng)驗(yàn)較少的工程師在使用 TouchGFX 4.13 時(shí),可以通過 STM32CubeMX 這個(gè)廣為流行的 ST 實(shí)用軟件程序快速啟動(dòng)項(xiàng)目。這樣做的目的在于降低開發(fā)者入門門檻,讓專業(yè)人士和愛好者都能受益于這個(gè)交互式的高效解決方案。
天氣數(shù)據(jù)獲取
-
通過DHT11數(shù)字溫濕度傳感器獲??;
-
通過注冊(cè)心知天氣(https://www.seniverse.com/),采用其Weather API,并配合web相關(guān)API獲取當(dāng)?shù)氐奶鞖猓?/span>
演示效果
視頻演示:
界面設(shè)計(jì)效果:
圖1 主頁(yè)
圖2 系統(tǒng)設(shè)置
圖3 溫度歷史數(shù)據(jù)與分析
比賽感悟
一次偶然翻看網(wǎng)頁(yè)的機(jī)會(huì),讓我看到了 RT-Thread x STM32 全連接創(chuàng)意創(chuàng)客大賽,于是順手點(diǎn)了進(jìn)去,并于第二天才最終確認(rèn)參加比賽。在這近一天的時(shí)間里,經(jīng)歷了比較糾結(jié)的思想歷程。
首先,工作雖然一直涉及到嵌入式Linux或Android,但未涉及過RT-Thread,且沒有任何STM32使用或開發(fā)經(jīng)驗(yàn),不清楚這個(gè)學(xué)習(xí)的過程需要多久,畢竟大賽1個(gè)月,除去平時(shí)還需要工作和周末的其他安排,時(shí)間倍感不夠。而且,這個(gè)過程是需要有一定的積累才能出好的作品。時(shí)間方面和學(xué)習(xí)成本方面,讓自己剛開始很猶豫,甚至不打算報(bào)名。
其次,報(bào)名前一天才去大概了解了下RT-Thread,是什么樣的一款RTOS,了解到RT-Thread是一個(gè)集實(shí)時(shí)操作系統(tǒng)(RTOS)內(nèi)核、中間件組件和開發(fā)者社區(qū)于一體的技術(shù)平臺(tái),具有極小內(nèi)核、穩(wěn)定可靠、簡(jiǎn)單易用、高度可伸縮、組件豐富等特點(diǎn)。
剛開始看到簡(jiǎn)介,最吸引我的還是,它是用C語(yǔ)言開發(fā)的,且包含豐富的組件,這一點(diǎn)于平時(shí)工作有著不可分割的關(guān)系。同時(shí),考慮到官方還提供了ART-Pi開發(fā)板,對(duì)于手上沒有任何STM32硬件開發(fā)板的我來(lái)說,無(wú)疑降低的入門硬件的門檻。
主要由于第二點(diǎn)與工作比較契合,第二天最終還是決定先報(bào)名參加比賽。
到比賽前作品的提交,自己其實(shí)算比較晚提交了。期間,利用空閑時(shí)間,從頭到尾,熟悉了STM32相關(guān)工具的使用,及UI設(shè)計(jì)工具TouchGFX Desinger的使用,同時(shí)也熟悉了官方的IDE工具 —— RT-Studio,以及最最核心的RT-Thread的使用,及一些設(shè)計(jì)理念。
作為一個(gè)新手或小白,第一次燒寫程序都存在問題,后面閱讀了相關(guān)文檔,才搞定。類似這樣的事情,期間也都通過查閱相關(guān)文檔,或通過網(wǎng)絡(luò)及熱心的網(wǎng)友才一一解決,在此表示感謝。
比賽前期,計(jì)劃是做一個(gè)功能強(qiáng)大的智能天氣助手,因此也申請(qǐng)了氣壓傳感器,剛開始接觸這款氣壓傳感器也是一頭霧水,不清楚如果使用,需要用到SPI,沒有現(xiàn)成的可以直接拿來(lái)用的驅(qū)動(dòng),后面經(jīng)過差不多幾天折騰,驅(qū)動(dòng)有了,但通信還是沒有成功,不得不調(diào)整方案,這一點(diǎn)是沒有預(yù)估到的,所以開發(fā)計(jì)劃得做詳細(xì)些,就像平時(shí)工作的項(xiàng)目開發(fā)一樣。
最終,作品通過DHT11和網(wǎng)絡(luò)獲取本地天氣,保留了定位功能,需要額外的硬件。雖然,在其他人看來(lái),難度不大,但是對(duì)于第一次接觸STM32、第一次接觸TouchGFX,第一次接觸RT-Thread的人來(lái)說,有些為難,甚至,遇到一些不知下手的BUG,曾一度想放棄提交作品,放棄比賽,即使放棄自己也學(xué)到了東西。還好自己通過不斷地自我反省,不斷的去學(xué)習(xí)相關(guān)知識(shí),和家人和同時(shí)的關(guān)切,才堅(jiān)持了下來(lái),才完成了此次比賽。在此,也謝謝他(她)們,相信通過此次比賽,未來(lái)在其他新的領(lǐng)域也會(huì)有所精進(jìn),也相信未來(lái)會(huì)有更加好的關(guān)于IOT,關(guān)于RT-Thread的作品,無(wú)論是生活上的,還是工作上的。
為了未來(lái),加油!加油!加油!