第1步:
這個想法是在兩個屏幕上顯示各種信息,具體取決于方框。表殼呈平行六面體形狀,《鋪路石,帶有一種皮帶,可作為支撐使其靜止。
加速度計檢測運動和方向并觸發(fā)顯示。
為了節(jié)省能源,我選擇了電子紙屏幕(參見下面的參考資料),即使它們不再供電,也能保持顯示。同樣對于ESP32,我選擇 Lolin32 模塊(以節(jié)儉而聞名),我必須學(xué)習如何管理深度睡眠,以及喚醒中斷由加速度計生成。
屏幕通過SPI連接,在找到正確的引腳將它們連接到ESP32之前我搜索了一下,知道我還需要一個用于加速度計的I2C,一個讀取DHT22的引腳和另外兩個用于電池的引腳電壓測量。 ESP32幾乎完全充電了!知道某些引腳只讀(我用過DHT傳感器),其他引腳不能與Wifi一起使用,它是一個找到正確的配置有點復(fù)雜。
盒子可以朝向4個方向,加上扁平??偠灾?,只需2個屏幕即可顯示4 * 2 + 2 = 10種可能類型的信息。所以它允許你展示很多東西:
日期和當天的圣人
當前時間
今天的天氣預(yù)報
未來幾小時的天氣預(yù)報
未來幾天的天氣預(yù)報
電池充電水平
因為我還有空間,來自專業(yè)網(wǎng)站的隨機引用。
第2步:你需要什么?




ESP32:Lolin32模塊(功率極低,配有電池連接器,可以通過USB加電池充電)
2 epaper顯示:4.2英寸和2.9英寸。我選擇Good Display商店的模型。
DHT22傳感器
LiPo電池
用于電池電壓測量:2個10k電阻,1個100k電阻,1個100nF電容,1個MOSFET晶體管
焊錫和烙鐵,印刷電路板
使用3D打印機進行外殼
附圖顯示了PCB上所有元件的位置:我必須節(jié)省空間以適應(yīng)外殼,不應(yīng)該太大。
In為了獲取天氣數(shù)據(jù),您還需要在天氣API上注冊并將您的密鑰放在‘Variables.h’文件中的正確位置(見下文)。
天氣網(wǎng)站:
apixu
accuweather
第3步:這個項目讓我思考和學(xué)習了很多。..。..


這個系統(tǒng)應(yīng)該是低功耗的,所以你不需要每晚給電池充電。..為了節(jié)省能源,我選擇了電子紙即使它們不再通電也能保持顯示的屏幕。同樣對于ESP32,我選擇了Lolin32模塊(以其節(jié)儉而聞名),我必須學(xué)習如何管理深度睡眠,以及中斷喚醒呼叫通過加速度計。
盒子可以朝向4個方向,更平坦??偠灾?,要顯示4 * 2 + 2 = 10種可能的信息類型。所以它允許你做很多事情:日期,當天的圣人,時間,今天的天氣預(yù)報,未來幾小時或幾天的天氣預(yù)報,電池充電水平以及專業(yè)網(wǎng)站的隨機報價。
在互聯(lián)網(wǎng)上尋找的東西很多,如你所知: WiFi是節(jié)能的敵人。..。..
所以我們必須管理連接,以便顯示最新信息,但不需要花太多時間連接。另一個相當復(fù)雜的問題:保持相當準確的時間。我不需要RTC,因為我可以在互聯(lián)網(wǎng)上找到時間,但ESP32的內(nèi)部時鐘漂移了很多,特別是在睡眠期間。我必須找到一種方法來保持足夠準確,同時等待通過互聯(lián)網(wǎng)重置時鐘。我每小時在互聯(lián)網(wǎng)上重新同步它。
因此,在自治(互聯(lián)網(wǎng)連接的頻率)與所顯示信息的準確性之間存在權(quán)衡。
另一個需要解決的問題是內(nèi)存。當ESP32處于深度睡眠狀態(tài)時,內(nèi)存將丟失,除了所謂的RTC RAM。該內(nèi)存寬4MB,其中只有2個可用于該程序。在這個內(nèi)存中,我必須存儲在睡眠階段之后必須保持從一次執(zhí)行到下一次執(zhí)行的各種程序變量:天氣預(yù)報,時間和日期,圖標文件名,引號等。我必須學(xué)會處理它。
說到圖標,它們存儲在ESP32文件系統(tǒng)的 SPIFFS 中。關(guān)閉免費的Wunderground天氣API后,我不得不尋找其他免費天氣數(shù)據(jù)提供商。我選擇了兩個:一個用于當天的天氣,有12個小時的預(yù)測,另一個用于多天的預(yù)測。圖標不一樣,所以它給我?guī)砹藘蓚€新問題:
選擇圖標集
將這些圖標與2個網(wǎng)站的預(yù)測代碼相匹配
此對應(yīng)關(guān)系也存儲在RTC RAM中,因此不必每次都重新加載。
圖標的最后一個問題。 無法將所有內(nèi)容存儲在SPIFFS中。這個空間太小,不適合我的所有文件。有必要進行圖像壓縮。我在 Python 中編寫了一個腳本,用于讀取我的圖標文件并將其壓縮為 RLE ,然后將壓縮文件存儲在SPIFFS中。在那里舉行。
但是電子紙顯示庫只采用BMP類型的文件,而不是壓縮圖像。所以我必須編寫一個額外的功能才能顯示這些壓縮文件中的圖標。
互聯(lián)網(wǎng)上讀取的數(shù)據(jù)通常是 json 格式:天氣數(shù)據(jù),當天的圣人。我使用了(偉大的) arduinoJson 庫。但報價不是那樣的。我從一個專門的網(wǎng)站上拿走它們,所以我必須直接查看網(wǎng)頁的內(nèi)容來閱讀它們。 我必須寫一個特定的代碼 t。每天午夜左右,程序進入該站點并讀取大約10個隨機引號,并將它們存儲在RTC RAM中。當外殼朝向大屏幕時,其中一個隨機顯示。
我告訴你顯示重音字符的問題(抱歉,但引號是法語)。..。
當小屏幕亮起時,《顯示strong》電池電壓,并使用圖紙更好地查看剩余電量。有必要制作一個電子組件來讀取電池電壓。由于測量不應(yīng)該對電池放電,我使用了互聯(lián)網(wǎng)上的圖表,該圖表使用 MOSFET晶體管作為開關(guān),以便僅在測量時消耗電流
為了能夠制作這個電路并將所有東西都安裝到盒子中,我想要盡可能小的,我必須制作一個PCB來連接系統(tǒng)的所有組件。 這是我的第一個PCB 。我很幸運,因為這一方面第一次運作良好。..
參見植入圖:“禁區(qū)”是保留用于連接USB線的區(qū)域。 Lolin32模塊允許您通過USB為電池充電:如果連接USB電纜,電池充電,模塊同時工作。
最后一點:字體。不同大小,不管是否大膽,都必須創(chuàng)建和存儲它們。一旦您在正確的目錄中安裝了字體文件,Adafruit GFX庫就可以很好地處理這個問題。為了創(chuàng)建文件,我使用了字體轉(zhuǎn)換器網(wǎng)站,非常方便!
請確保選擇:
預(yù)覽顯示:TFT 2.4“
圖書館版本:Adafruit GFX字體
所以總結(jié):一個大項目,讓我學(xué)到了很多東西。
步驟4:使用電子紙顯示
這些屏幕的主要缺點在視頻中清晰可見:顯示的更新需要一到兩秒,并通過閃爍(兩個屏幕的正常和反轉(zhuǎn)版本的替代顯示)完成。這對于天氣信息是可以接受的,因為我不經(jīng)常更新(每小時除了更改盒子的方向)。但不是時間。這就是為什么(并限制消費)我仍然使用HH:MM顯示(不是秒)。
所以我不得不尋找另一種更新顯示的方法。這些屏幕(其中一些)支持部分更新(應(yīng)用于屏幕區(qū)域或整個屏幕。..。..)但對我來說不好,因為我的大屏幕(顯示時間)保持被替換像素的重影。例如,當從10:12到10:13時,‘2’在‘3’內(nèi)部稍微可見,并且在‘4’,‘5’等之后變得更加明顯。我想要指出我的屏幕就是這種情況:我與電子紙顯示庫 GxEPD2 的作者討論了這一點,他告訴我他沒有用他自己的屏幕觀察這種現(xiàn)象。我們試圖改變參數(shù)而沒有成功狩獵幽靈。
所以我們必須找到另一個解決方案:我建議做一個部分雙重刷新,這解決了問題(至少這對我來說是令人滿意的)。時間過去沒有屏幕閃爍,沒有鬼魂。但是,轉(zhuǎn)換不是立即的:更改時間需要一秒多一點。
步驟5:實現(xiàn)

為了確保方向改變時內(nèi)部沒有任何東西移動,不同的組件(顯示器,電子模塊,PCB,電池)被膠合用膠槍。為了在PCB下面布線,我將它安裝在用墊片制成的支腿上,電池也是如此。
很快我將安裝一個外部USB麥克風連接器,所以我不必打開機箱給電池充電。
也許我也有興趣通過OTA進行更新來完善它。..。..
第6步:代碼和文件
提供了三個存檔文件:
Weather station.zip:使用Arduino IDE上傳的Arduino代碼
Boite ecran.zip:案例的CAD和3D打印機文件
data.zip:要在ESP32的SPIFFS中上傳的文件。
如果你不知道如何將文件上傳到ESP32的SPIFFS,只需閱讀本教程,它提供了一個非常有用的插件以及如何在Arduino IDE中使用它。
深度睡眠編程與Arduino的標準編程完全不同。對于ESP32,這意味著ESP32喚醒并執(zhí)行設(shè)置,然后進入睡眠狀態(tài)。所以,循環(huán)函數(shù)為空,永遠不會執(zhí)行。
某些初始化階段必須在第一次執(zhí)行時只運行一次(例如獲取時間,天氣數(shù)據(jù),引號等),所以ESP32需要知道當前的喚醒是否是第一個:為此,解決方案是將變量存儲在 RTC RAM 中(即使在深度睡眠階段),每次喚醒時都會增加。如果它等于1,則它是第一次執(zhí)行,ESP32運行初始化階段,否則跳過此階段。
要喚醒ESP32,有幾種可能性:
定時器喚醒:代碼計算睡眠前深度睡眠的持續(xù)時間。這用于更新時間(每1,2,3或5分鐘)或天氣數(shù)據(jù)(每3或4小時)和當天的圣人(每24小時)。
中斷喚醒:加速度計發(fā)送一個用于喚醒ESP32的信號。這用于檢測方向變化并更新顯示屏
觸摸傳感器喚醒:ESP32配備了幾個用作觸摸傳感器的引腳,但它們不能用于定時器喚醒,所以我沒有‘使用它。
在代碼的其他地方有其他編程技巧,以保持時間準確,同時節(jié)省能源(即每分鐘不連接NTP服務(wù)器) ),刪除Adafruit GFX庫不支持的重音,以避免在沒有必要時更新顯示,設(shè)置加速度計參數(shù)尤其是中斷喚醒,準確計算定時器喚醒時的睡眠時間 - 如果沒有連接到IDE,請避免使用串行控制臺(為了節(jié)省能源),在不需要時斷開wifi等等。..。..代碼中充滿了評論,有助于理解函數(shù)。
-
氣象站
+關(guān)注
關(guān)注
1文章
861瀏覽量
17085
發(fā)布評論請先 登錄
濕度傳感器模塊HW2200用于氣象站低濕度環(huán)境下的高精度精確監(jiān)測
便攜式氣象站:移動場景下的氣象“感知官”
超聲波氣象站:精準監(jiān)測的技術(shù)新選擇
小型自動氣象站:精細化氣象監(jiān)測的技術(shù)革新與應(yīng)用拓展
超聲波自動氣象站技術(shù)方案
光伏自動氣象站技術(shù)架構(gòu)與發(fā)電效率保障應(yīng)用
華為推出鴻蒙智能交通氣象站
北斗自動氣象站: 護航無網(wǎng)區(qū)的 “氣象信使”
防爆工業(yè)氣象站:工業(yè)場景的 “氣象監(jiān)測中樞”
智慧農(nóng)業(yè)氣象站技術(shù)方案
光伏實驗氣象站的技術(shù)架構(gòu)與應(yīng)用實踐
車載氣象站在多領(lǐng)域的應(yīng)用
智能氣象站的制作教程
評論