Tartalomjegyzék:
- Kellékek
- 1. lépés: Miért érdemes másik meteorológiai állomás?
- 2. lépés: Mire van szüksége?
- 3. lépés: Ez a projekt elgondolkodtatott és sokat tanult…
- 4. lépés: E-papír kijelzők használata
- 5. lépés: Készítsd el
- 6. lépés: A kód és a fájlok
Videó: Még egy intelligens időjárás -állomás, de : 6 lépés (képekkel)
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:41
Rendben, tudom, hogy nagyon sok ilyen időjárás -állomás áll rendelkezésre mindenhol, de szánjon néhány percet, hogy lássa a különbséget …
- Alacsony fogyasztású
- 2 e-papír kijelző …
- de 10 különböző képernyő!
- ESP32 alapú
- gyorsulásmérő és hőmérséklet / páratartalom érzékelők
- Wifi frissítés
- 3D nyomtatott tok
és sok más hasznos trükk …
A fő ötlet az, hogy különböző információkat jelenítsen meg mindkét kijelzőn a doboz tájolásától függően. A tok paralelpipedikus doboz, térkő alakú, egyfajta övvel, amely lábként szolgál.
Kellékek
Mint látható, a rendszer 2 e-papír képernyőről és egy 3D nyomtatott dobozból áll. De sok minden van benne:
- ESP32
- Egy MPU6050 gyorsulásmérő
- DHT22 érzékelő
- LiPo akkumulátor
- NYÁK az egész csatlakoztatásához
- Házi duPont szálak
és Wi-Fi kapcsolat. Valójában 3 hálózat van deklarálva, a rendszer egyenként teszteli őket, amíg sikerül csatlakozni.
1. lépés: Miért érdemes másik meteorológiai állomás?
Az ötlet az, hogy különböző információkat jelenítsen meg mindkét képernyőn a doboz tájolásától függően. A tok párhuzamos csöves doboz, térkő alakú, egyfajta övvel, amely támaszként szolgál az álláshoz.
A gyorsulásmérő érzékeli a mozgást és a tájolást, és megjeleníti a kijelzőket.
Az energiatakarékosság érdekében az e-papír képernyőt választottam (lásd az alábbi hivatkozásokat), amely akkor is megőrzi a kijelzőt, ha már nincs áram. Hasonlóan az ESP32-hez, a Lolin32 modult választottam (a takarékosságáról híres), és meg kellett tanulnom, hogyan kell kezelni a mély alvást és a gyorsulásmérő által generált megszakítást.
A képernyők SPI -n keresztül vannak összekötve, elég sokat kerestem, mielőtt megtaláltam a megfelelő csapokat az ESP32 -hez való csatlakoztatáshoz, tudva, hogy szükségem van egy I2C -re a gyorsulásmérőre, egy tűre a DHT22 leolvasásához és 2 másikra az akkumulátor feszültségméréséhez. Az ESP32 szinte teljesen fel van töltve! Tudva, hogy egyes tűk csak olvashatóak (én a DHT-érzékelőhöz használtam), mások nem használhatók a Wifivel együtt, kissé bonyolult volt megtalálni a megfelelő konfigurációt.
A doboz 4 irányba állítható, ráadásul lapos. Mindent összevetve, ami 4*2+2 = 10 lehetséges információtípust tesz lehetővé csak 2 képernyővel. Így sok mindent megjeleníthet:
- A dátum és a nap szentje
- A jelenlegi idő
- A mai időjárás -előrejelzés
- Időjárás -előrejelzés a következő órákra
- Időjárás -előrejelzés a következő napokra
- Az akkumulátor töltöttségi szintje
- És mivel még volt helyem, egy véletlenszerű idézet egy speciális webhelyről.
2. lépés: Mire van szüksége?
- ESP32: Lolin32 modul (nagyon alacsony energiafogyasztás, akkumulátorcsatlakozóval felszerelve, az USB -n keresztül töltheti az akkumulátort)
- 2 e -papír kijelző: 4,2 hüvelyk és 2,9 hüvelyk. A Good Display áruházból választottam a modelleket.
- DHT22 érzékelő
- MCU6050 gyorsulásmérő - girométer I2C érzékelő
- LiPo akkumulátor
- Az akkumulátor feszültségének méréséhez: 2 10 k ellenállás, 1 100 000 ellenállás, 1 100 nF kondenzátor, 1 MOSFET tranzisztor
- Forrasztó és forrasztópáka, nyomtatott áramköri lap
- Hozzáférés egy 3D nyomtatóhoz a tokhoz
A mellékelt képen az összes alkatrész helyzete látható a NYÁK -on: helyet kellett spórolnom, hogy elférjen a tokban, ami nem lehet túl nagy.
Az időjárási adatok megszerzéséhez regisztrálnia kell az időjárási API -kra is, és a kulcsokat a "Variables.h" fájl megfelelő helyére kell helyeznie (lásd alább).
Időjárás weboldalak:
- apixu
- accuweather
3. lépés: Ez a projekt elgondolkodtatott és sokat tanult…
Ennek a rendszernek alacsony energiaigényűnek kellett lennie, így nem kell minden este töltenie az akkumulátort… Az energiatakarékosság érdekében az e-papír képernyőt választottam, amely megőrzi a kijelzőt, még akkor is, ha már nincs áram. Hasonlóan az ESP32-hez, a Lolin32 modult választottam (a takarékosságáról híres), és meg kellett tanulnom, hogyan kell kezelni a mély alvást, és a gyorsulásmérő által generált megszakítás ébresztését.
A doboz 4 irányba állítható, laposabb. Mindent összevetve, ami 4*2+2 = 10 megjeleníthető információtípust tesz lehetővé. Így sok mindent elvégezhet: a dátumot és a nap szentjét, az időt, a mai időjárás -előrejelzést, az időjárás -előrejelzéseket az elkövetkező órákra vagy napokra, az akkumulátor töltöttségi szintjét és egy véletlenszerű idézetet egy speciális webhelyről.
Sokat kell keresni az interneten, és mint tudod: a WiFi az energiatakarékosság ellensége…
Tehát kezelnünk kell a kapcsolatot, hogy naprakész információkat jelenítsünk meg, de ne töltsünk túl sok időt a kapcsolódással. Egy másik meglehetősen összetett probléma: meglehetősen pontos idő. Nincs szükségem RTC -re, mivel megtalálom az időt az interneten, de az ESP32 belső órája eléggé eltolódik, különösen alvási időszakokban. Meg kellett találnom a módot arra, hogy elég pontos maradjak, miközben az óra internetre való visszaállítására vártam. Óránként újraszinkronizálom az interneten.
Tehát kompromisszum van az autonómia (az internetkapcsolatok gyakorisága) és a megjelenített információk pontossága között.
Egy másik megoldandó probléma a memória. Amikor az ESP32 mély alvásban van, a memória elveszik, kivéve az úgynevezett RTC RAM -ot. Ez a memória 4 MB széles, ebből csak 2 használható a programhoz. Ebben a memóriában kell tárolnom a különböző programváltozókat, amelyeket az egyik végrehajtásról a másikra kell tárolni egy alvási fázis után: időjárás -előrejelzések, idő és dátum, ikonfájlnevek, idézetek stb. Meg kellett tanulnom kezelni..
Ha már az ikonoknál tartunk, azokat a SPIFFS, az ESP32 fájlrendszer tárolja. Az ingyenes Wunderground időjárási API bezárását követően más ingyenes időjárási adatszolgáltatókat kellett keresnem. Kettőt választottam: egyet az aktuális napi időjáráshoz, 12 órás előrejelzéssel, egyet a többnapos előrejelzéshez. Az ikonok nem egyformák, ezért két új problémát okozott nekem:
- Válasszon egy ikonkészletet
- Párosítsa ezeket az ikonokat a két webhely előrejelző kódjaival
Ezt a levelezést az RTC RAM is tárolta, hogy ne kelljen minden alkalommal újratölteni.
Utolsó probléma az ikonokkal. Lehetetlen tárolni mindegyiket a SPIFFS -ben. A hely túl kicsi az összes fájlom számára. Szükséges volt a képek tömörítése. Írtam egy szkriptet a Python -ban, amely elolvassa az ikonfájljaimat, és tömöríti őket RLE -be, majd a tömörített fájlokat SPIFFS -ben tárolja. Ott tartott.
De az e-papír kijelző könyvtár csak BMP típusú fájlokat vesz fel, tömörített képeket nem. Tehát egy további funkciót kellett írnom ahhoz, hogy megjeleníthessem az ikonjaimat ezekből a tömörített fájlokból.
Az interneten olvasott adatok gyakran json formátumúak: időjárási adatok, a nap szentje. Ehhez a (nagy) arduinoJson könyvtárat használom. De az idézetek nem ilyenek. Egy dedikált webhelyről szedem őket, ezért el kell olvasnom őket, közvetlenül a weboldal tartalmába nézve. Ehhez konkrét kódot kellett írnom. Minden nap éjfél körül a program erre az oldalra megy, és körülbelül tíz véletlenszerű idézetet olvas, és tárolja azokat az RTC RAM -ban. Az egyik véletlenszerűen jelenik meg közöttük, amikor a ház nagy képernyőn felfelé van irányítva.
Átadom az ékezetes karakterek megjelenítésének problémáját (bocs, de az idézetek franciául vannak)….
Amikor a kis képernyő fent van, megjelenik az akkumulátor feszültsége, rajzzal, hogy jobban lássa a hátralévő szintet. Az akkumulátor feszültségének leolvasásához elektronikus szerelvényt kellett készíteni. Mivel a mérésnek nem szabad lemerítenie az akkumulátort, az interneten található diagramot használtam, amely MOSFET tranzisztort használ kapcsolóként, hogy csak akkor vegye fel az áramot, ha a mérés megtörtént.
Annak érdekében, hogy elkészíthessem ezt az áramkört, és mindent beilleszthessek a dobozba, és a lehető legkisebbet akartam, PCB -t kellett készítenem a rendszer összes összetevőjének csatlakoztatásához. Ez az első PCB -m. Szerencsém volt, mert először minden jól működött ezen az oldalon…
Lásd az implantációs térképet: a "tiltott zóna" az USB -kábel csatlakoztatására fenntartott terület. A Lolin32 modul lehetővé teszi az akkumulátor újratöltését USB -n keresztül: az akkumulátor feltöltődik, ha az USB -kábel csatlakoztatva van, és a modul egyszerre működik.
Utolsó pont: a betűtípusok. Különböző méretűek, akár vastagon, akár nem, létre kellett hozni és tárolni. Az Adafruit GFX könyvtár nagyon jól gondoskodik erről, miután telepítette a betűtípus fájlokat a megfelelő könyvtárba. A fájlok létrehozásához a Font Converter webhelyet használtam, nagyon kényelmes!
Feltétlenül válassza ki:
- Előnézeti kijelző: 2.4 "TFT
- Könyvtári verzió: Adafruit GFX betűtípus
Tehát összefoglalva: egy nagy projekt, amely lehetővé tette számomra, hogy sok mindent megtanuljak
4. lépés: E-papír kijelzők használata
Ezeknek a képernyőknek a fő hátránya jól látható a videón: a kijelző frissítése egy vagy két másodpercig tart, és villogással történik (a két képernyő normál és fordított verziójának alternatív megjelenítése). Ez elfogadható az időjárási információkkal kapcsolatban, mert nem gyakran frissítem (minden órában, kivéve a doboz tájolásának megváltoztatását). De nem egy időre. Ezért (és a fogyasztás korlátozására) továbbra is a HH: MM kijelzőt használom (nem a másodperceket).
Így más módot kellett keresnem a kijelző frissítésére. Ezek a képernyők (némelyikük) részleges frissítést támogatnak (vagy a képernyő egy részére, vagy a teljes képernyőre vonatkoznak …), de nem volt jó nekem, mert a nagy képernyőm (amely megjeleníti az időt) megőrzi a képpontok szellemét amelyeket kicserélnek. Például, amikor 10: 12 -ről 10: 13 -ra halad, a „2” egy kicsit látható a „3” belsejében, és még jobban látható lesz a „4”, az „5” stb. Után. Szeretném hogy rámutassak, a képernyőm esetében ez a helyzet: megbeszéltem a GxEPD2 e-papír kijelző könyvtár szerzőjével, aki elmondta, hogy nem figyelte meg ezt a jelenséget a saját képernyőjén. Megpróbáltuk megváltoztatni a paramétereket anélkül, hogy sikerült volna szellemeket vadásznunk.
Tehát más megoldást kellett találnunk: javasoltam egy részleges kettős frissítést, ami megoldotta a problémát (legalábbis számomra kielégítő). Az órák a képernyő villogása nélkül telnek, és nincsenek szellemek. Az átállás azonban nem azonnali: valamivel több, mint egy másodperc szükséges az idő megváltoztatásához.
5. lépés: Készítsd el
Annak érdekében, hogy semmi ne mozduljon el a tájolás változásakor, a különböző alkatrészeket (kijelzők, elektronikus modulok, NYÁK -ok, elemek) ragasztópisztollyal ragasztják. A vezetékek elvezetéséhez a NYÁK alá telepítettem távtartókkal készített lábakra, ugyanez vonatkozik az akkumulátorra is.
Hamarosan telepítek egy külső USB mikrofoncsatlakozót, így nem kell kinyitnom a tokot az akkumulátor feltöltéséhez.
Talán engem is érdekelne az OTA frissítése, hogy minden tökéletes legyen….
6. lépés: A kód és a fájlok
Három archív fájl áll rendelkezésre:
- Weather station.zip: az Arduino kód, amelyet az Arduino IDE segítségével lehet feltölteni
- Boite ecran.zip: a tok CAD és 3D nyomtató fájljai
- data.zip: a feltöltendő fájlok az ESP32 SPIFFS fájljában.
Ha nem tudja, hogyan töltsön fel fájlokat az ESP32 SPIFFS -jébe, akkor csak olvassa el ezt az oktatóanyagot, amely egy nagyon hasznos bővítményt és annak használatát mutatja be az Arduino IDE -ben.
A mély alvás programozása teljesen különbözik az Arduino szabványos programozásától. Az ESP32 esetében ez azt jelenti, hogy az ESP32 felébred és végrehajtja a beállítást, majd alszik. Tehát a ciklusfüggvény üres, és soha nem hajtódik végre.
Bizonyos inicializálási fázist csak egyszer kell végrehajtani az első végrehajtáskor (például az idő, az időjárási adatok, az idézetek stb. Lekérése), így az ESP32 -nek tudnia kell, hogy az aktuális ébresztés az első vagy sem: ehhez a A megoldás az, hogy egy változót tárol az RTC RAM-ban (amely mély alvási fázisokban is aktív marad), amelyet minden ébresztéskor növel. Ha 1, akkor ez az első végrehajtás, és az ESP32 futtatja az inicializálási fázist, különben ez a fázis kihagyásra kerül.
Az ESP32 felébresztésére számos lehetőség kínálkozik:
- Időzítő felébresztés: a kód kiszámítja a mély alvás időtartamát elalvás előtt. Ez az idő (1, 2, 3 vagy 5 perc) vagy az időjárási adatok (3 vagy 4 óránként) frissítésére szolgál a napi idézetek és a szent (24 óránként)
- Ébresztés megszakítása: a gyorsulásmérő olyan jelet küld, amely az ESP32 felébresztésére szolgál. Ez a tájolásváltozás észlelésére és a kijelzők frissítésére szolgál
- Érintésérzékelő felébresztése: az ESP32 több érintkezővel ellátott érintkezővel van felszerelve, de nem használhatók időzítő felébresztéssel, ezért ezt nem használtam.
Vannak más programozási trükkök is máshol a kódban, hogy az idő pontos maradjon, miközben energiát takarít meg (azaz ne csatlakoztassa az NTP -kiszolgálót percenként), és távolítsa el az ékezeteket, amelyeket az Adafruit GFX könyvtár nem támogat, hogy elkerülje a kijelző frissítését, ha nem szükséges a gyorsulásmérő paramétereinek beállítása, különösen az ébresztés megszakításakor, az időzítéses ébresztés esetén pontosan kiszámítani az alvási időt, kerülje a soros konzol használatát, ha nincs csatlakoztatva az IDE-hez (az energiatakarékosság érdekében) a wifi, amikor nincs rá szükség, stb … és a kód tele van megjegyzésekkel, amelyek segítenek megérteni a funkciókat.
Köszönöm, hogy elolvasta ezt az utasítást (az elsőt). Remélem tetszeni fog és élvezni fogja ezt az időjárás -állomást
Második hely az érzékelők versenyében
Ajánlott:
Intelligens beltéri növényfigyelő - Tudja meg, mikor kell növényét öntözni: 8 lépés (képekkel)
Intelligens beltéri növényfigyelő - Tudja meg, amikor a növénynek öntözésre van szüksége: Néhány hónappal ezelőtt készítettem egy talajnedvesség -ellenőrző botot, amely elemmel működik, és beragasztható a beltéri növény cserépébe, hogy hasznos információkat kapjon a talajról a nedvességszint és a villogó LED -ek jelzik, mikor kell várni
Roberts RM33 Raspberry Pi internetes rádió (még egy…): 8 lépés (képekkel)
Roberts RM33 Raspberry Pi Internet Radio (Még egy…): Igen, ez egy másik Raspberry Pi internetrádió -konstrukció, és nem is az első. Nem vagyok biztos benne, hogy ez a konstrukció miért olyan népszerű még mindig, de még mindig élvezem, és nem mondhatom, hogy ez lesz az utolsó is. Nagyon szeretem Robert kinézetét
YADPF (MÉG egy másik digitális képkeret): 7 lépés (képekkel)
YADPF (MÉG egy másik digitális képkeret): Tudom, hogy ez nem újdonság, tudom, láttam itt néhány ilyen projektet, de mindig is szerettem volna saját digitális képkeretet építeni. Minden képkeret, amit láttam, szép, de valami mást kerestem, igazán szép fotót keresek
Még egy Nixie óra: 6 lépés (képekkel)
Még egy Nixie Clock: Mindig is szerettem volna egy nixie órát, csak van valami ezekben az izzó számokban, ami lenyűgöz. Így amikor az ebayen találtam néhány nem túl drága IN12 -et, megvettem őket, és amikor megkaptam, csodálkoztam rajtuk, de hamar rájöttem, hogy
Még egy intelligens kocka (YASD): 8 lépés
Még egy intelligens kocka (YASD): Mi az a YASD? Még egy új elektronikus kocka intelligens funkciókkal? Igen és nem. Igen - A YASD LED -eket használ a véletlenszerűen generált számok megjelenítéséhez kocka stílusban. Nem - a YASD önmagában nem késztermék. Inkább azt kell megmutatni, hogy melyik nyomtatott áramköri lapot