第1步:
這個(gè)想法是在兩個(gè)屏幕上顯示各種信息,具體取決于方框。表殼呈平行六面體形狀,《鋪路石,帶有一種皮帶,可作為支撐使其靜止。
加速度計(jì)檢測(cè)運(yùn)動(dòng)和方向并觸發(fā)顯示。
為了節(jié)省能源,我選擇了電子紙屏幕(參見(jiàn)下面的參考資料),即使它們不再供電,也能保持顯示。同樣對(duì)于ESP32,我選擇 Lolin32 模塊(以節(jié)儉而聞名),我必須學(xué)習(xí)如何管理深度睡眠,以及喚醒中斷由加速度計(jì)生成。
屏幕通過(guò)SPI連接,在找到正確的引腳將它們連接到ESP32之前我搜索了一下,知道我還需要一個(gè)用于加速度計(jì)的I2C,一個(gè)讀取DHT22的引腳和另外兩個(gè)用于電池的引腳電壓測(cè)量。 ESP32幾乎完全充電了!知道某些引腳只讀(我用過(guò)DHT傳感器),其他引腳不能與Wifi一起使用,它是一個(gè)找到正確的配置有點(diǎn)復(fù)雜。
盒子可以朝向4個(gè)方向,加上扁平??偠灾?,只需2個(gè)屏幕即可顯示4 * 2 + 2 = 10種可能類型的信息。所以它允許你展示很多東西:
日期和當(dāng)天的圣人
當(dāng)前時(shí)間
今天的天氣預(yù)報(bào)
未來(lái)幾小時(shí)的天氣預(yù)報(bào)
未來(lái)幾天的天氣預(yù)報(bào)
電池充電水平
因?yàn)槲疫€有空間,來(lái)自專業(yè)網(wǎng)站的隨機(jī)引用。
第2步:你需要什么?
ESP32:Lolin32模塊(功率極低,配有電池連接器,可以通過(guò)USB加電池充電)
2 epaper顯示:4.2英寸和2.9英寸。我選擇Good Display商店的模型。
DHT22傳感器
LiPo電池
用于電池電壓測(cè)量:2個(gè)10k電阻,1個(gè)100k電阻,1個(gè)100nF電容,1個(gè)MOSFET晶體管
焊錫和烙鐵,印刷電路板
使用3D打印機(jī)進(jìn)行外殼
附圖顯示了PCB上所有元件的位置:我必須節(jié)省空間以適應(yīng)外殼,不應(yīng)該太大。
In為了獲取天氣數(shù)據(jù),您還需要在天氣API上注冊(cè)并將您的密鑰放在‘Variables.h’文件中的正確位置(見(jiàn)下文)。
天氣網(wǎng)站:
apixu
accuweather
第3步:這個(gè)項(xiàng)目讓我思考和學(xué)習(xí)了很多。..。..
這個(gè)系統(tǒng)應(yīng)該是低功耗的,所以你不需要每晚給電池充電。..為了節(jié)省能源,我選擇了電子紙即使它們不再通電也能保持顯示的屏幕。同樣對(duì)于ESP32,我選擇了Lolin32模塊(以其節(jié)儉而聞名),我必須學(xué)習(xí)如何管理深度睡眠,以及中斷喚醒呼叫通過(guò)加速度計(jì)。
盒子可以朝向4個(gè)方向,更平坦??偠灾@示4 * 2 + 2 = 10種可能的信息類型。所以它允許你做很多事情:日期,當(dāng)天的圣人,時(shí)間,今天的天氣預(yù)報(bào),未來(lái)幾小時(shí)或幾天的天氣預(yù)報(bào),電池充電水平以及專業(yè)網(wǎng)站的隨機(jī)報(bào)價(jià)。
在互聯(lián)網(wǎng)上尋找的東西很多,如你所知: WiFi是節(jié)能的敵人。..。..
所以我們必須管理連接,以便顯示最新信息,但不需要花太多時(shí)間連接。另一個(gè)相當(dāng)復(fù)雜的問(wèn)題:保持相當(dāng)準(zhǔn)確的時(shí)間。我不需要RTC,因?yàn)槲铱梢栽诨ヂ?lián)網(wǎng)上找到時(shí)間,但ESP32的內(nèi)部時(shí)鐘漂移了很多,特別是在睡眠期間。我必須找到一種方法來(lái)保持足夠準(zhǔn)確,同時(shí)等待通過(guò)互聯(lián)網(wǎng)重置時(shí)鐘。我每小時(shí)在互聯(lián)網(wǎng)上重新同步它。
因此,在自治(互聯(lián)網(wǎng)連接的頻率)與所顯示信息的準(zhǔn)確性之間存在權(quán)衡。
另一個(gè)需要解決的問(wèn)題是內(nèi)存。當(dāng)ESP32處于深度睡眠狀態(tài)時(shí),內(nèi)存將丟失,除了所謂的RTC RAM。該內(nèi)存寬4MB,其中只有2個(gè)可用于該程序。在這個(gè)內(nèi)存中,我必須存儲(chǔ)在睡眠階段之后必須保持從一次執(zhí)行到下一次執(zhí)行的各種程序變量:天氣預(yù)報(bào),時(shí)間和日期,圖標(biāo)文件名,引號(hào)等。我必須學(xué)會(huì)處理它。
說(shuō)到圖標(biāo),它們存儲(chǔ)在ESP32文件系統(tǒng)的 SPIFFS 中。關(guān)閉免費(fèi)的Wunderground天氣API后,我不得不尋找其他免費(fèi)天氣數(shù)據(jù)提供商。我選擇了兩個(gè):一個(gè)用于當(dāng)天的天氣,有12個(gè)小時(shí)的預(yù)測(cè),另一個(gè)用于多天的預(yù)測(cè)。圖標(biāo)不一樣,所以它給我?guī)?lái)了兩個(gè)新問(wèn)題:
選擇圖標(biāo)集
將這些圖標(biāo)與2個(gè)網(wǎng)站的預(yù)測(cè)代碼相匹配
此對(duì)應(yīng)關(guān)系也存儲(chǔ)在RTC RAM中,因此不必每次都重新加載。
圖標(biāo)的最后一個(gè)問(wèn)題。 無(wú)法將所有內(nèi)容存儲(chǔ)在SPIFFS中。這個(gè)空間太小,不適合我的所有文件。有必要進(jìn)行圖像壓縮。我在 Python 中編寫了一個(gè)腳本,用于讀取我的圖標(biāo)文件并將其壓縮為 RLE ,然后將壓縮文件存儲(chǔ)在SPIFFS中。在那里舉行。
但是電子紙顯示庫(kù)只采用BMP類型的文件,而不是壓縮圖像。所以我必須編寫一個(gè)額外的功能才能顯示這些壓縮文件中的圖標(biāo)。
互聯(lián)網(wǎng)上讀取的數(shù)據(jù)通常是 json 格式:天氣數(shù)據(jù),當(dāng)天的圣人。我使用了(偉大的) arduinoJson 庫(kù)。但報(bào)價(jià)不是那樣的。我從一個(gè)專門的網(wǎng)站上拿走它們,所以我必須直接查看網(wǎng)頁(yè)的內(nèi)容來(lái)閱讀它們。 我必須寫一個(gè)特定的代碼 t。每天午夜左右,程序進(jìn)入該站點(diǎn)并讀取大約10個(gè)隨機(jī)引號(hào),并將它們存儲(chǔ)在RTC RAM中。當(dāng)外殼朝向大屏幕時(shí),其中一個(gè)隨機(jī)顯示。
我告訴你顯示重音字符的問(wèn)題(抱歉,但引號(hào)是法語(yǔ))。..。
當(dāng)小屏幕亮起時(shí),《顯示strong》電池電壓,并使用圖紙更好地查看剩余電量。有必要制作一個(gè)電子組件來(lái)讀取電池電壓。由于測(cè)量不應(yīng)該對(duì)電池放電,我使用了互聯(lián)網(wǎng)上的圖表,該圖表使用 MOSFET晶體管作為開(kāi)關(guān),以便僅在測(cè)量時(shí)消耗電流
為了能夠制作這個(gè)電路并將所有東西都安裝到盒子中,我想要盡可能小的,我必須制作一個(gè)PCB來(lái)連接系統(tǒng)的所有組件。 這是我的第一個(gè)PCB 。我很幸運(yùn),因?yàn)檫@一方面第一次運(yùn)作良好。..
參見(jiàn)植入圖:“禁區(qū)”是保留用于連接USB線的區(qū)域。 Lolin32模塊允許您通過(guò)USB為電池充電:如果連接USB電纜,電池充電,模塊同時(shí)工作。
最后一點(diǎn):字體。不同大小,不管是否大膽,都必須創(chuàng)建和存儲(chǔ)它們。一旦您在正確的目錄中安裝了字體文件,Adafruit GFX庫(kù)就可以很好地處理這個(gè)問(wèn)題。為了創(chuàng)建文件,我使用了字體轉(zhuǎn)換器網(wǎng)站,非常方便!
請(qǐng)確保選擇:
預(yù)覽顯示:TFT 2.4“
圖書(shū)館版本:Adafruit GFX字體
所以總結(jié):一個(gè)大項(xiàng)目,讓我學(xué)到了很多東西。
步驟4:使用電子紙顯示
這些屏幕的主要缺點(diǎn)在視頻中清晰可見(jiàn):顯示的更新需要一到兩秒,并通過(guò)閃爍(兩個(gè)屏幕的正常和反轉(zhuǎn)版本的替代顯示)完成。這對(duì)于天氣信息是可以接受的,因?yàn)槲也唤?jīng)常更新(每小時(shí)除了更改盒子的方向)。但不是時(shí)間。這就是為什么(并限制消費(fèi))我仍然使用HH:MM顯示(不是秒)。
所以我不得不尋找另一種更新顯示的方法。這些屏幕(其中一些)支持部分更新(應(yīng)用于屏幕區(qū)域或整個(gè)屏幕。..。..)但對(duì)我來(lái)說(shuō)不好,因?yàn)槲业拇笃聊唬@示時(shí)間)保持被替換像素的重影。例如,當(dāng)從10:12到10:13時(shí),‘2’在‘3’內(nèi)部稍微可見(jiàn),并且在‘4’,‘5’等之后變得更加明顯。我想要指出我的屏幕就是這種情況:我與電子紙顯示庫(kù) GxEPD2 的作者討論了這一點(diǎn),他告訴我他沒(méi)有用他自己的屏幕觀察這種現(xiàn)象。我們?cè)噲D改變參數(shù)而沒(méi)有成功狩獵幽靈。
所以我們必須找到另一個(gè)解決方案:我建議做一個(gè)部分雙重刷新,這解決了問(wèn)題(至少這對(duì)我來(lái)說(shuō)是令人滿意的)。時(shí)間過(guò)去沒(méi)有屏幕閃爍,沒(méi)有鬼魂。但是,轉(zhuǎn)換不是立即的:更改時(shí)間需要一秒多一點(diǎn)。
步驟5:實(shí)現(xiàn)
為了確保方向改變時(shí)內(nèi)部沒(méi)有任何東西移動(dòng),不同的組件(顯示器,電子模塊,PCB,電池)被膠合用膠槍。為了在PCB下面布線,我將它安裝在用墊片制成的支腿上,電池也是如此。
很快我將安裝一個(gè)外部USB麥克風(fēng)連接器,所以我不必打開(kāi)機(jī)箱給電池充電。
也許我也有興趣通過(guò)OTA進(jìn)行更新來(lái)完善它。..。..
第6步:代碼和文件
提供了三個(gè)存檔文件:
Weather station.zip:使用Arduino IDE上傳的Arduino代碼
Boite ecran.zip:案例的CAD和3D打印機(jī)文件
data.zip:要在ESP32的SPIFFS中上傳的文件。
如果你不知道如何將文件上傳到ESP32的SPIFFS,只需閱讀本教程,它提供了一個(gè)非常有用的插件以及如何在Arduino IDE中使用它。
深度睡眠編程與Arduino的標(biāo)準(zhǔn)編程完全不同。對(duì)于ESP32,這意味著ESP32喚醒并執(zhí)行設(shè)置,然后進(jìn)入睡眠狀態(tài)。所以,循環(huán)函數(shù)為空,永遠(yuǎn)不會(huì)執(zhí)行。
某些初始化階段必須在第一次執(zhí)行時(shí)只運(yùn)行一次(例如獲取時(shí)間,天氣數(shù)據(jù),引號(hào)等),所以ESP32需要知道當(dāng)前的喚醒是否是第一個(gè):為此,解決方案是將變量存儲(chǔ)在 RTC RAM 中(即使在深度睡眠階段),每次喚醒時(shí)都會(huì)增加。如果它等于1,則它是第一次執(zhí)行,ESP32運(yùn)行初始化階段,否則跳過(guò)此階段。
要喚醒ESP32,有幾種可能性:
定時(shí)器喚醒:代碼計(jì)算睡眠前深度睡眠的持續(xù)時(shí)間。這用于更新時(shí)間(每1,2,3或5分鐘)或天氣數(shù)據(jù)(每3或4小時(shí))和當(dāng)天的圣人(每24小時(shí))。
中斷喚醒:加速度計(jì)發(fā)送一個(gè)用于喚醒ESP32的信號(hào)。這用于檢測(cè)方向變化并更新顯示屏
觸摸傳感器喚醒:ESP32配備了幾個(gè)用作觸摸傳感器的引腳,但它們不能用于定時(shí)器喚醒,所以我沒(méi)有‘使用它。
在代碼的其他地方有其他編程技巧,以保持時(shí)間準(zhǔn)確,同時(shí)節(jié)省能源(即每分鐘不連接NTP服務(wù)器) ),刪除Adafruit GFX庫(kù)不支持的重音,以避免在沒(méi)有必要時(shí)更新顯示,設(shè)置加速度計(jì)參數(shù)尤其是中斷喚醒,準(zhǔn)確計(jì)算定時(shí)器喚醒時(shí)的睡眠時(shí)間 - 如果沒(méi)有連接到IDE,請(qǐng)避免使用串行控制臺(tái)(為了節(jié)省能源),在不需要時(shí)斷開(kāi)wifi等等。..。..代碼中充滿了評(píng)論,有助于理解函數(shù)。
-
氣象站
+關(guān)注
關(guān)注
1文章
776瀏覽量
16225
發(fā)布評(píng)論請(qǐng)先 登錄

解密交通氣象站:數(shù)據(jù)驅(qū)動(dòng)的交通氣象服務(wù)革新

智慧校園:氣象站引領(lǐng)氣象知識(shí)科普
自動(dòng)氣象站的工作原理與應(yīng)用
綠色校園,智慧氣象:走進(jìn)我們的氣象站
自動(dòng)超聲波氣象站:智慧氣象的重要組成部分
校園內(nèi)環(huán)境監(jiān)測(cè)氣象站
交通氣象站:實(shí)時(shí)監(jiān)測(cè)道路氣象環(huán)境

車載小型氣象站:實(shí)時(shí)、準(zhǔn)確地監(jiān)測(cè)氣象
自動(dòng)氣象站組成和功能特點(diǎn)

區(qū)域生態(tài)自動(dòng)氣象站:數(shù)據(jù)監(jiān)測(cè)與傳輸

校園氣象站高校科普論文氣象站多功能氣象站

基于啟揚(yáng)IMX8MPlus核心板的自動(dòng)氣象站應(yīng)用解決方案

評(píng)論