Obsah:

Ešte jedna inteligentná meteorologická stanica, ale : 6 krokov (s obrázkami)
Ešte jedna inteligentná meteorologická stanica, ale : 6 krokov (s obrázkami)

Video: Ešte jedna inteligentná meteorologická stanica, ale : 6 krokov (s obrázkami)

Video: Ešte jedna inteligentná meteorologická stanica, ale : 6 krokov (s obrázkami)
Video: ZLO V ANTARKTICE (a UFO na Aljašce) - Vysoká podivnost 2024, Jún
Anonim
Image
Image
Ešte jedna inteligentná meteorologická stanica, ale …
Ešte jedna inteligentná meteorologická stanica, ale …
Ešte jedna inteligentná meteorologická stanica, ale …
Ešte jedna inteligentná meteorologická stanica, ale …
Ešte jedna inteligentná meteorologická stanica, ale …
Ešte jedna inteligentná meteorologická stanica, ale …

Dobre, viem, že všade je k dispozícii toľko takýchto meteorologických staníc, ale venujte pár minút rozdielu…

  • Slaby prud
  • 2 displeje na elektronický papier…
  • ale 10 rôznych obrazoviek!
  • Na báze ESP32
  • akcelerometer a snímače teploty / vlhkosti
  • Aktualizácia Wifi
  • 3D tlačené puzdro

a mnoho ďalších užitočných trikov …

Hlavnou myšlienkou je zobraziť rôzne informácie na oboch displejoch v závislosti od orientácie poľa. Puzdro má tvar rovnobežnostenného boxu, dlažby, s akýmsi pásom, ktorý slúži ako noha.

Zásoby

Ako vidíte, systém sa skladá z 2 obrazoviek elektronického papiera a 3D tlačenej škatule. Ale je v tom veľa vecí:

  • ESP32
  • Jeden akcelerometer MPU6050
  • Senzor DHT22
  • LiPo batéria
  • DPS na prepojenie celej veci
  • Domáce vlákna duPont

a pripojenie Wi-Fi. V skutočnosti sú deklarované 3 siete, systém ich testuje jednu po druhej, kým sa mu nepodarí pripojiť.

Krok 1: Prečo iná meteorologická stanica?

Prečo ďalšia meteorologická stanica?
Prečo ďalšia meteorologická stanica?
Prečo ďalšia meteorologická stanica?
Prečo ďalšia meteorologická stanica?
Prečo ďalšia meteorologická stanica?
Prečo ďalšia meteorologická stanica?
Prečo ďalšia meteorologická stanica?
Prečo ďalšia meteorologická stanica?

Cieľom je zobraziť rôzne druhy informácií na oboch obrazovkách v závislosti od orientácie poľa. Puzdro má tvar rovnobežnostenného boxu, dlažby, s akýmsi pásom, ktorý slúži ako podpera, aby mohol stáť.

Akcelerometer zisťuje pohyb a orientáciu a spúšťa displeje.

Aby som šetril energiu, vybral som obrazovky z elektronického papiera (pozri odkazy nižšie), ktoré udržujú displej, aj keď už nie sú napájané. Podobne pre ESP32 som si vybral modul Lolin32 (známy svojou šetrnosťou) a musel som sa naučiť ovládať hlboký spánok a budenie pri prerušení generované akcelerometrom.

Obrazovky sú prepojené cez SPI, dosť som toho hľadal, kým som našiel správne piny na ich pripojenie k ESP32 s vedomím, že potrebujem aj I2C pre akcelerometer, pin na čítanie DHT22 a 2 ďalšie na meranie napätia batérie. ESP32 je takmer úplne nabitý! Vediac, že niektoré piny sú len na čítanie (použil som ich na snímač DHT), iné nemožno použiť spoločne s Wifi, bolo trochu ťažké nájsť správnu konfiguráciu.

Krabicu je možné orientovať v 4 smeroch plus plochú. Celkovo vzaté, 4*2+2 = 10 možných typov informácií, ktoré je možné zobraziť iba na 2 obrazovkách. Umožňuje vám teda zobraziť veľa vecí:

  • Dátum a svätý dňa
  • Aktuálny čas
  • Dnešná predpoveď počasia
  • Predpovede počasia na nasledujúce hodiny
  • Predpovede počasia na nasledujúce dni
  • Úroveň nabitia batérie
  • A keďže som mal ešte miesto, náhodný citát zo špecializovanej webovej stránky.

Krok 2: Čo potrebujete?

Čo potrebuješ ?
Čo potrebuješ ?
Čo potrebuješ ?
Čo potrebuješ ?
Čo potrebuješ ?
Čo potrebuješ ?
  • ESP32: modul Lolin32 (veľmi nízky výkon, vybavený konektorom pre batériu, môže nabíjať batériu cez USB plus)
  • 2 displeje epaper: 4,2 palca a 2,9 palca. Vybral som modely z obchodu Good Display.
  • Snímač DHT22
  • Akcelerometer MCU6050 - gyrometer I2C snímač
  • LiPo batéria
  • Na meranie napätia batérie: 2 10k odpory, 1 100k odpor, 1 100nF kondenzátor, 1 tranzistor MOSFET
  • Spájkovačka a spájkovačka, doska s plošnými spojmi
  • Prístup k 3D tlačiarni puzdra

Priložený obrázok ukazuje polohu všetkých komponentov na doske plošných spojov: Musel som ušetriť miesto, aby sa zmestilo do puzdra, ktoré by nemalo byť príliš veľké.

Aby ste získali údaje o počasí, musíte sa tiež zaregistrovať v API pre počasie a vložiť kľúče na správne miesta v súbore „Variables.h“(pozri nižšie).

Webové stránky o počasí:

  • apixu
  • accuweather

Krok 3: Tento projekt ma prinútil veľa premýšľať a naučiť sa …

Tento projekt ma prinútil veľa premýšľať a naučiť sa…
Tento projekt ma prinútil veľa premýšľať a naučiť sa…
Tento projekt ma prinútil veľa premýšľať a naučiť sa…
Tento projekt ma prinútil veľa premýšľať a naučiť sa…
Tento projekt ma prinútil veľa premýšľať a naučiť sa…
Tento projekt ma prinútil veľa premýšľať a naučiť sa…

Tento systém mal mať nízky výkon, takže batériu nemusíte nabíjať každú noc … Aby som šetril energiu, vybral som obrazovky z elektronického papiera, ktoré udržia displej, aj keď už nie sú napájané. Podobne pre ESP32 som si vybral modul Lolin32 (známy svojou šetrnosťou) a musel som sa naučiť ovládať hlboký spánok a budenie pri prerušení generované akcelerometrom.

Krabicu je možné orientovať do 4 smerov, viac plochých. Celkovo vzaté, 4*2+2 = 10 možných typov informácií, ktoré sa majú zobraziť. Umožňuje vám teda urobiť veľa vecí: dátum a svätého dňa, čas, dnešnú predpoveď počasia, predpoveď počasia na nasledujúce hodiny alebo dni, úroveň nabitia batérie a náhodný citát zo špecializovanej webovej stránky.

Na internete je toho veľa čo hľadať, a ako iste viete: WiFi je nepriateľ úspory energie …

Musíme teda spravovať pripojenie, aby sme zobrazovali aktuálne informácie, ale bez toho, aby sme s pripojením trávili príliš veľa času. Ďalší pomerne zložitý problém: dodržanie pomerne presného času. Nepotrebujem RTC, pretože môžem nájsť čas na internete, ale vnútorné hodiny ESP32 sa dosť pohybujú, najmä počas spánku. Musel som nájsť spôsob, ako zostať dostatočne presný a čakať na resetovanie hodín cez internet. Resynchronizujem to na internete každú hodinu.

Existuje teda kompromis medzi autonómiou (frekvenciou internetových pripojení) a presnosťou zobrazovaných informácií.

Ďalším problémom, ktorý treba vyriešiť, je pamäť. Keď je ESP32 v hlbokom spánku, pamäť sa stratí, okrem toho, čo sa nazýva RTC RAM. Táto pamäť je široká 4 MB, z ktorých na program možno použiť iba 2. Do tejto pamäte musím uložiť rôzne programové premenné, ktoré je potrebné uchovávať od jedného spustenia k ďalšiemu po fáze spánku: predpovede počasia, čas a dátum, názvy súborov ikon, citáty atď. Musel som sa s tým naučiť vyrovnať.

Keď už hovoríme o ikonách, sú uložené v súborovom systéme SPIFFS, ESP32. Po zatvorení bezplatného API pre počasie Wunderground som musel hľadať ďalších bezplatných poskytovateľov údajov o počasí. Vybral som dva: jeden pre počasie na aktuálny deň s 12-hodinovými predpoveďami a druhý pre viacdenné predpovede. Ikony nie sú rovnaké, takže mi to spôsobilo dva nové problémy:

  • Vyberte sadu ikon
  • Priraďte tieto ikony k predpovedným kódom týchto dvoch webov

Táto korešpondencia bola tiež uložená v pamäti RTC RAM, aby sa nemusela vždy znova načítať.

Posledný problém s ikonami. Nie je možné uložiť všetky do SPIFFS. Priestor je príliš malý pre všetky moje súbory. Bolo potrebné vykonať kompresiu obrazu. Napísal som skript v Pythone, ktorý načíta moje súbory ikon a skomprimuje ich do formátu RLE a potom komprimované súbory uloží do formátu SPIFFS. Tam to držalo.

Knižnica na zobrazenie elektronického papiera však používa iba súbory typu BMP, nie komprimované obrázky. Preto som musel napísať dodatočnú funkciu, aby som mohol zobrazovať svoje ikony z týchto komprimovaných súborov.

Údaje načítané na internete sú často vo formáte json: údaje o počasí, svätý dňa. Na to používam (skvelú) knižnicu arduinoJson. Citáty však také nie sú. Prevzal som ich z vyhradeného webu, takže si ich musím prečítať tak, že sa pozriem priamo na obsah webovej stránky. Na to som musel napísať konkrétny kód. Každý deň, okolo polnoci, program prejde na túto stránku a prečíta asi desať náhodných úvodzoviek a uloží ich do pamäte RTC RAM. Jeden je medzi nimi náhodne zobrazený, keď je puzdro orientované veľkou obrazovkou nahor.

Predávam vám problém zobrazenia znakov s diakritikou (prepáčte, ale úvodzovky sú vo francúzštine)….

Keď je malá obrazovka zapnutá, zobrazí sa napätie batérie s kresbou, aby bolo lepšie vidieť zostávajúcu úroveň. Na čítanie napätia batérie bolo potrebné vyrobiť elektronickú zostavu. Pretože meranie by nemalo vybíjať batériu, použil som diagram nájdený na internete, ktorý používa ako spínač tranzistor MOSFET, aby spotreboval prúd iba vtedy, keď sa vykonáva meranie.

Aby som mohol vytvoriť tento obvod a zmestiť všetko do škatule, ktorý som chcel čo najmenší, musel som vyrobiť DPS na pripojenie všetkých komponentov systému. Toto je moja prvá PCB. Mal som šťastie, pretože všetko po prvýkrát v tejto stránke fungovalo dobre …

Pozrite si mapu implantácie: „zakázaná zóna“je oblasť vyhradená na pripojenie kábla USB. Modul Lolin32 vám umožňuje nabíjať batériu cez USB: batéria je nabitá, ak je pripojený kábel USB, a modul súčasne funguje.

Posledný bod: písma. Rôzne veľkosti, tučné alebo nie, museli byť vytvorené a uložené. Knižnica Adafruit GFX sa o to veľmi dobre stará, keď máte nainštalované súbory písem do správneho adresára. Na vytvorenie súborov som použil web Font Converter, veľmi pohodlný!

Uistite sa, že ste vybrali:

  • Náhľadový displej: TFT 2,4"
  • Verzia knižnice: Písmo Adafruit GFX

Aby som to zhrnul: veľký projekt, ktorý mi umožnil naučiť sa veľa vecí

Krok 4: Používanie displejov elektronického papiera

Používanie displejov elektronického papiera
Používanie displejov elektronického papiera

Hlavná nevýhoda týchto obrazoviek je na videu jasne viditeľná: aktualizácia displeja trvá jednu alebo dve sekundy a prebieha blikaním (alternatívne zobrazenie normálnej a obrátenej verzie týchto dvoch obrazoviek). To je pre informácie o počasí prijateľné, pretože ich veľmi často neaktualizujem (každú hodinu okrem zmeny orientácie poľa). Ale nie na čas. Preto (a aby som obmedzil spotrebu) stále používam displej HH: MM (nie sekundy).

Musel som teda hľadať iný spôsob, ako aktualizovať displej. Tieto obrazovky (niektoré z nich) podporujú čiastočnú aktualizáciu (aplikovanú buď na oblasť obrazovky alebo na celú obrazovku …), ale nebolo to pre mňa dobré, pretože moja veľká obrazovka (ktorá zobrazuje čas) uchováva duchov pixelov. ktoré sú nahradené. Napríklad pri prechode od 10:12 do 10:13 je „2“trochu viditeľné vo vnútri „3“a ešte lepšie je to viditeľné po „4“, „5“atď. Chcel by som poukázať na to, že toto je prípad mojej obrazovky: prediskutoval som to s autorom knižnice zobrazovania elektronických papierov GxEPD2, ktorý mi povedal, že tento jav na svojich obrazovkách nepozoroval. Pokúsili sme sa zmeniť parametre bez toho, aby sme uspeli v love duchov.

Museli sme teda nájsť iné riešenie: Navrhol som urobiť čiastočné dvojité občerstvenie, ktoré problém vyriešilo (aspoň je to pre mňa uspokojivé). Hodiny plynú bez toho, aby blikala obrazovka a neboli tu žiadni duchovia. Prepnutie však nie je okamžité: zmena času trvá o niečo viac ako jednu sekundu.

Krok 5: Vytvorenie

Robiť to
Robiť to
Robiť to
Robiť to
Robiť to
Robiť to
Robiť to
Robiť to

Aby sa pri zmene orientácie nič nepohybovalo dovnútra, sú rôzne súčiastky (displeje, elektronické moduly, dosky plošných spojov, batérie) prilepené lepiacou pištoľou. Na vedenie vodičov pod DPS som ho nainštaloval na nožičky vyrobené s rozperami, to isté platí pre batériu.

Čoskoro nainštalujem konektor externého mikrofónu USB, aby som nemusel otvárať puzdro na dobíjanie batérie.

Možno by ma tiež zaujímalo aktualizovanie prostredníctvom OTA, aby som to všetko zdokonalil….

Krok 6: Kód a súbory

Image
Image

K dispozícii sú tri archívne súbory:

  • Meteorologická stanica.zip: kód Arduino, ktorý sa má nahrať pomocou IDE Arduino
  • Boite ecran.zip: súbory CAD a 3D tlačiarne pre prípad
  • data.zip: súbory, ktoré sa majú nahrať do SPIFFS systému ESP32.

Ak neviete, ako nahrať súbory do SPIFFS ESP32, prečítajte si tento návod, ktorý predstavuje veľmi užitočný doplnok a ako ho používať v IDE Arduino.

Programovanie v hlbokom spánku sa úplne líši od štandardného programovania v Arduine. Pre ESP32 to znamená, že ESP32 sa prebudí a vykoná nastavenie a potom prejde do režimu spánku. Funkcia slučky je teda prázdna a nikdy sa nevykonáva.

Niektoré inicializačné fázy je potrebné pri prvom spustení spustiť iba raz (napríklad získať čas, údaje o počasí, úvodzovky atď.), Takže ESP32 potrebuje vedieť, či je aktuálne prebudenie prvé alebo nie: Na tento účel riešením je uložiť do pamäte RTC RAM premennú (ktorá zostáva aktívna aj počas fáz hlbokého spánku), ktorá sa zvyšuje pri každom prebudení. Ak sa rovná 1, je to prvé spustenie a ESP32 spustí inicializačnú fázu, inak sa táto fáza preskočí.

Ak chcete ESP32 prebudiť, existuje niekoľko možností:

  • Časovač prebudenia: kód vypočítava trvanie hlbokého spánku pred spánkom. Používa sa na aktualizáciu času (každých 1, 2, 3 alebo 5 minút) alebo údajov o počasí (každé 3 alebo 4 hodiny) citátov a svätých dňa (každých 24 hodín)
  • Prerušenie prebudenia: akcelerometer vysiela signál, ktorý sa používa na prebudenie ESP32. Slúži na detekciu zmeny orientácie a aktualizáciu displejov
  • Prebudenie dotykovým senzorom: ESP32 je vybavený niekoľkými kolíkmi, ktoré slúžia ako dotykové senzory, ale nemožno ich použiť s prebudením pomocou časovača, takže som to nepoužil.

Na inom mieste v kóde sú ďalšie programovacie triky na udržanie presného času pri úspore energie (tj nepripojenie servera NTP každú minútu), odstránenie akcentov, ktoré knižnica Adafruit GFX nepodporuje, aby sa zabránilo aktualizácii zobrazenia, ak nie je potrebné nastavovať parametre akcelerometra špeciálne pre prerušované prebúdzanie, presne vypočítať čas do spánku v prípade budenia s časovačom, vyhýbať sa používaniu sériovej konzoly, ak nie je pripojený k IDE (opäť šetrí energiu), odpojiť wifi, keď nie je potrebná, atď … a kód je plný komentárov, ktoré pomáhajú porozumieť funkciám.

Ďakujem, že ste si prečítali tento návod (môj úplne prvý). Dúfam, že sa vám bude páčiť a užijete si výrobu tejto meteorologickej stanice

Súťaž senzorov
Súťaž senzorov

Druhé miesto v súťaži senzorov

Odporúča: