Obsah:

Ještě jedna chytrá meteorologická stanice, ale : 6 kroků (s obrázky)
Ještě jedna chytrá meteorologická stanice, ale : 6 kroků (s obrázky)

Video: Ještě jedna chytrá meteorologická stanice, ale : 6 kroků (s obrázky)

Video: Ještě jedna chytrá meteorologická stanice, ale : 6 kroků (s obrázky)
Video: Když tě málem srazí na kole 2024, Listopad
Anonim
Image
Image
Další chytrá meteorologická stanice, ale…
Další chytrá meteorologická stanice, ale…
Další chytrá meteorologická stanice, ale…
Další chytrá meteorologická stanice, ale…
Další chytrá meteorologická stanice, ale…
Další chytrá meteorologická stanice, ale…

Dobře, vím, že všude je tolik takovýchto meteorologických stanic, ale věnujte pár minut tomu, abyste viděli rozdíl …

  • Nízký výkon
  • 2 displeje elektronického papíru…
  • ale 10 různých obrazovek!
  • Na bázi ESP32
  • akcelerometr a snímače teploty / vlhkosti
  • Aktualizace Wifi
  • 3D tištěné pouzdro

a spousta dalších užitečných triků …

Hlavní myšlenkou je zobrazit různé informace na obou displejích v závislosti na orientaci pole. Pouzdro je ve tvaru rovnoběžnostěnného boxu, dlažební kostky, s jakýmsi pásem, který slouží jako noha.

Zásoby

Jak vidíte, systém se skládá ze 2 obrazovek elektronického papíru a 3D tištěného boxu. Ale je v tom hodně věcí:

  • ESP32
  • Jeden akcelerometr MPU6050
  • Senzor DHT22
  • LiPo baterie
  • Deska plošných spojů k propojení celé věci
  • Domácí vlákna duPont

a připojení Wi-Fi. Ve skutečnosti jsou deklarovány 3 sítě, systém je testuje jednu po druhé, dokud se nepodaří připojit.

Krok 1: Proč další meteorologická stanice?

Proč další meteorologická stanice?
Proč další meteorologická stanice?
Proč další meteorologická stanice?
Proč další meteorologická stanice?
Proč další meteorologická stanice?
Proč další meteorologická stanice?
Proč další meteorologická stanice?
Proč další meteorologická stanice?

Cílem je zobrazit různé druhy informací na obou obrazovkách v závislosti na orientaci pole. Pouzdro má tvar rovnoběžnostěnného boxu, dlažební kostky, s jakýmsi pásem, který slouží jako opora, aby mohl stát.

Akcelerometr detekuje pohyb a orientaci a spouští displeje.

Abych šetřil energii, vybral jsem obrazovky z elektronického papíru (viz odkazy níže), které udržují displej, i když již nejsou napájeny. Podobně pro ESP32 jsem zvolil modul Lolin32 (proslulý svou skromností) a musel jsem se naučit zvládat hluboký spánek a probuzení při přerušení generované akcelerometrem.

Obrazovky jsou propojeny přes SPI, docela jsem hledal, než jsem našel správné piny pro jejich připojení k ESP32 s vědomím, že potřebuji také I2C pro akcelerometr, pin pro čtení DHT22 a 2 další pro měření napětí baterie. ESP32 je téměř plně nabitý! S vědomím, že některé piny jsou jen pro čtení (ty jsem použil pro snímač DHT), jiné nelze použít společně s Wifi, bylo trochu složité najít správnou konfiguraci.

Krabici lze orientovat ve 4 směrech a navíc rovnou. Celkově vzato je 4*2+2 = 10 možných typů informací zobrazeno pouze na 2 obrazovkách. Umožňuje vám tedy zobrazit spoustu věcí:

  • Datum a svatý den
  • Aktuální čas
  • Dnešní předpověď počasí
  • Předpověď počasí na další hodiny
  • Předpověď počasí na následující dny
  • Úroveň nabití baterie
  • A protože jsem měl ještě místo, náhodný citát ze specializovaného webu.

Krok 2: Co potřebujete?

Co potřebuješ ?
Co potřebuješ ?
Co potřebuješ ?
Co potřebuješ ?
Co potřebuješ ?
Co potřebuješ ?
  • ESP32: modul Lolin32 (velmi nízký výkon, vybaven konektorem pro baterii, může nabíjet baterii přes USB plus)
  • 2 displeje epaper: 4,2 palce a 2,9 palce. Vybral jsem modely z obchodu Good Display.
  • Snímač DHT22
  • Akcelerometr MCU6050 - gyrometr I2C senzor
  • LiPo baterie
  • Pro měření napětí baterie: 2 10k odpory, 1 100k odpor, 1 100nF kondenzátor, 1 tranzistor MOSFET
  • Páječka a páječka, plošný spoj
  • Přístup k 3D tiskárně pro případ

Přiložený obrázek ukazuje polohu všech součástek na DPS: Musel jsem ušetřit místo, aby se vešel do pouzdra, které by nemělo být příliš velké.

Abyste získali údaje o počasí, musíte se také zaregistrovat v API pro počasí a dát své klíče na správná místa v souboru 'Variables.h' (viz níže).

Webové stránky o počasí:

  • apixu
  • accuweather

Krok 3: Tento projekt mě přiměl hodně přemýšlet a naučit se…

Díky tomuto projektu jsem hodně přemýšlel a učil se…
Díky tomuto projektu jsem hodně přemýšlel a učil se…
Díky tomuto projektu jsem hodně přemýšlel a učil se…
Díky tomuto projektu jsem hodně přemýšlel a učil se…
Tento projekt mě přiměl hodně přemýšlet a učit se…
Tento projekt mě přiměl hodně přemýšlet a učit se…

Tento systém měl mít nízkou spotřebu, takže nemusíte každou noc nabíjet baterii … Abych šetřil energii, vybral jsem obrazovky z elektronického papíru, které udržují displej, i když již nejsou napájeny. Podobně pro ESP32 jsem zvolil modul Lolin32 (proslulý svou skromností) a musel jsem se naučit, jak zvládnout hluboký spánek a buzení při přerušení generované akcelerometrem.

Krabici lze orientovat do 4 směrů, více plochých. Celkově vzato je k zobrazení 4*2+2 = 10 možných typů informací. Umožňuje vám tedy dělat spoustu věcí: datum a světce dne, čas, dnešní předpověď počasí, předpovědi počasí na nadcházející hodiny nebo dny, úroveň nabití baterie a náhodný citát ze specializovaného webu.

Na internetu je toho hodně co hledat, a jak víte: WiFi je nepřítel úspor energie…

Musíme tedy spravovat připojení, abychom mohli zobrazovat aktuální informace, aniž bychom museli trávit příliš mnoho času připojováním. Další poměrně složitý problém: dodržování poměrně přesného času. Nepotřebuji RTC, protože si najdu čas na internetu, ale vnitřní hodiny ESP32 se dost posunují, zvláště během spánku. Musel jsem najít způsob, jak zůstat dostatečně přesný a čekat na resetování hodin přes internet. Resynchronizuji to na internetu každou hodinu.

Existuje tedy kompromis mezi autonomií (frekvencí připojení k internetu) a přesností zobrazovaných informací.

Dalším problémem, který je třeba vyřešit, je paměť. Když je ESP32 v hlubokém spánku, dojde ke ztrátě paměti, s výjimkou toho, čemu se říká RTC RAM. Tato paměť je široká 4 MB, z nichž lze pro program použít pouze 2. Do této paměti musím uložit různé programové proměnné, které musí být uchovávány od jednoho spuštění k druhému, po fázi spánku: předpovědi počasí, čas a datum, názvy souborů ikon, uvozovky atd. Musel jsem se s tím naučit vypořádat.

Když mluvíme o ikonách, jsou uloženy v SPIFFS, souborovém systému ESP32. Po uzavření bezplatného API pro počasí Wunderground jsem musel hledat další bezplatné poskytovatele údajů o počasí. Vybral jsem dva: jeden pro aktuální počasí, předpověď na 12 hodin a další pro vícedenní předpovědi. Ikony nejsou stejné, takže mi to způsobilo dva nové problémy:

  • Vyberte sadu ikon
  • Přiřaďte tyto ikony k předpovědním kódům 2 webů

Tato korespondence byla také uložena v paměti RTC RAM, aby ji nebylo nutné znovu načítat pokaždé.

Poslední problém s ikonami. Všechny je nelze uložit do SPIFFS. Prostor je příliš malý pro všechny mé soubory. Bylo nutné provést kompresi obrazu. Napsal jsem skript v Pythonu, který čte mé soubory ikon a komprimuje je do RLE, a pak komprimované soubory ukládám do SPIFFS. Tam to drželo.

Knihovna zobrazení elektronického papíru však přebírá pouze soubory typu BMP, nikoli komprimované obrázky. Musel jsem tedy napsat další funkci, abych mohl zobrazit své ikony z těchto komprimovaných souborů.

Data načtená na internetu jsou často ve formátu json: data o počasí, svatý dne. K tomu používám (skvělou) knihovnu arduinoJson. Citáty ale takové nejsou. Přebírám je z vyhrazeného webu, takže si je musím přečíst tak, že se podívám přímo do obsahu webové stránky. K tomu jsem musel napsat konkrétní kód. Každý den, kolem půlnoci, program přejde na tento web a přečte asi deset náhodných nabídek a uloží je do paměti RTC RAM. Jeden je mezi nimi zobrazen náhodně, když je pouzdro orientováno velkou obrazovkou nahoru.

Předávám vám problém zobrazení znaků s diakritikou (omlouvám se, ale uvozovky jsou ve francouzštině)….

Když je malá obrazovka nahoře, zobrazí se napětí baterie s nákresem, aby bylo lépe vidět zbývající úroveň. Bylo nutné vyrobit elektronickou sestavu pro čtení napětí baterie. Protože měření by nemělo vybít baterii, použil jsem diagram nalezený na internetu, který jako tranzistor používá tranzistor MOSFET, aby odebíral proud pouze při měření.

Abych mohl tento obvod vyrobit a vše vměstnat do krabice, kterou jsem chtěl co nejmenší, musel jsem vyrobit DPS pro připojení všech komponent systému. Toto je moje první PCB. Měl jsem štěstí, protože všechno poprvé fungovalo dobře na této straně …

Viz implantační mapa: „zakázaná zóna“je oblast vyhrazená pro připojení kabelu USB. Modul Lolin32 vám umožňuje dobít baterii přes USB: baterie je nabitá, pokud je připojen kabel USB, a modul pracuje současně.

Poslední bod: písma. Musely být vytvořeny a uloženy různé velikosti, tučné nebo ne. Knihovna Adafruit GFX se o to velmi dobře stará, jakmile nainstalujete soubory písem do správného adresáře. K vytvoření souborů jsem použil web Font Converter, velmi pohodlný!

Ujistěte se, že jste vybrali:

  • Náhledový displej: TFT 2,4"
  • Verze knihovny: Písmo Adafruit GFX

Abych to shrnul: velký projekt, který mi umožnil naučit se spoustu věcí

Krok 4: Používání displejů elektronického papíru

Používání displejů elektronického papíru
Používání displejů elektronického papíru

Hlavní nevýhoda těchto obrazovek je na videu jasně viditelná: aktualizace displeje trvá jednu nebo dvě sekundy a probíhá blikáním (alternativní zobrazení normální a obrácené verze obou obrazovek). To je pro informace o počasí přijatelné, protože je příliš často neaktualizuji (každou hodinu kromě změny orientace pole). Ale ne na čas. Proto (a abych omezil spotřebu) stále používám displej HH: MM (ne sekundy).

Musel jsem tedy hledat jiný způsob aktualizace displeje. Tyto obrazovky (některé z nich) podporují částečnou aktualizaci (aplikovanou buď na část obrazovky, nebo na celou obrazovku …), ale nebylo to pro mě dobré, protože moje velká obrazovka (která zobrazuje čas) udržuje duchy pixelů které jsou nahrazeny. Například při průchodu od 10:12 do 10:13 je '2' trochu vidět uvnitř '3' a je ještě viditelnější po '4', '5' atd. Chtěl bych poukázat na to, že toto je případ mé obrazovky: prodiskutoval jsem to s autorem knihovny zobrazení elektronického papíru GxEPD2, který mi řekl, že tento jev u svých vlastních obrazovek nepozoroval. Pokusili jsme se změnit parametry, aniž bychom uspěli v lovu duchů.

Museli jsme tedy najít jiné řešení: Navrhl jsem provést částečné dvojité občerstvení, které problém vyřešilo (alespoň je to pro mě uspokojivé). Hodiny plynou bez blikání obrazovky a bez duchů. Přechod však není okamžitý: změna času trvá o něco déle než jednu sekundu.

Krok 5: Výroba

Making It
Making It
Making It
Making It
Making It
Making It
Making It
Making It

Aby se při změně orientace uvnitř nic nepohybovalo, jsou různé součásti (displeje, elektronické moduly, desky plošných spojů, baterie) lepeny lepicí pistolí. Abych vedl dráty pod desku plošných spojů, nainstaloval jsem ji na nožičky vyrobené s rozpěrkami, to samé platí pro baterii.

Brzy nainstaluji konektor externího mikrofonu USB, abych nemusel otevírat pouzdro a dobíjet baterii.

Možná mě bude také zajímat aktualizace od OTA, abych to všechno zdokonalil….

Krok 6: Kód a soubory

Image
Image

K dispozici jsou tři archivní soubory:

  • Meteorologická stanice.zip: kód Arduino, který lze nahrát pomocí Arduino IDE
  • Boite ecran.zip: soubory CAD a 3D tiskárny pro případ
  • data.zip: soubory, které mají být nahrány do SPIFFS ESP32.

Pokud nevíte, jak nahrávat soubory do SPIFFS ESP32, přečtěte si tento návod, který představuje velmi užitečný plugin a jak jej používat v Arduino IDE.

Programování hlubokého spánku je zcela odlišné od standardního programování Arduina. U ESP32 to znamená, že se ESP32 probudí a provede nastavení, poté přejde do režimu spánku. Funkce smyčky je tedy prázdná a nikdy se nespouští.

Některá inicializační fáze musí být spuštěna pouze jednou při prvním spuštění (jako je získání času, údaje o počasí, uvozovky atd.), Takže ESP32 potřebuje vědět, zda je aktuální probuzení první nebo ne: za tímto účelem řešením je uložit proměnnou do paměti RTC RAM (která zůstává aktivní i během fází hlubokého spánku), která se zvyšuje při každém probuzení. Pokud se rovná 1, pak je to první spuštění a ESP32 spustí inicializační fázi, jinak je tato fáze vynechána.

K probuzení ESP32 existuje několik možností:

  • Časovač probuzení: kód vypočítá dobu hlubokého spánku před usnutím. To se používá k aktualizaci času (každých 1, 2, 3 nebo 5 minut) nebo údajů o počasí (každé 3 nebo 4 hodiny) uvozovek a světců dne (každých 24 hodin)
  • Přerušení probuzení: akcelerometr vysílá signál, který slouží k probuzení ESP32. Slouží k detekci změny orientace a aktualizaci displejů
  • Probuzení dotykovým senzorem: ESP32 je vybaven několika piny, které fungují jako dotykové senzory, ale nelze je použít s časovým probuzením, takže jsem to nepoužil.

Jinde v kódu existují další programovací triky, které udržují přesný čas a přitom šetří energii (tj. Nepřipojují NTP server každou minutu), odstraňují akcenty, které knihovna Adafruit GFX nepodporuje, aby se vyhnuli aktualizaci zobrazení, pokud není nutné nastavovat parametry akcelerometru zejména pro přerušení probuzení, přesně vypočítat čas do spánku v případě probuzení s časovačem, vyhýbat se používání sériové konzoly, pokud není připojeno k IDE (znovu šetřit energii), odpojit wifi, když není potřeba, atd … a kód je plný komentářů, které pomáhají porozumět funkcím.

Děkujeme, že jste si přečetli tento Instructable (můj úplně první). Doufám, že se vám bude líbit a užijete si výrobu této meteorologické stanice

Soutěž senzorů
Soutěž senzorů

Druhé místo v soutěži Senzory

Doporučuje: