Cuprins:

Încă o altă stație meteo inteligentă, dar : 6 pași (cu imagini)
Încă o altă stație meteo inteligentă, dar : 6 pași (cu imagini)

Video: Încă o altă stație meteo inteligentă, dar : 6 pași (cu imagini)

Video: Încă o altă stație meteo inteligentă, dar : 6 pași (cu imagini)
Video: TVneWs - O mama beata cade cu copilul în brate ! 2024, Iunie
Anonim
Image
Image
Încă o altă stație meteo inteligentă, dar …
Încă o altă stație meteo inteligentă, dar …
Încă o altă stație meteo inteligentă, dar …
Încă o altă stație meteo inteligentă, dar …
Încă o altă stație meteo inteligentă, dar …
Încă o altă stație meteo inteligentă, dar …

OK, știu că există atât de multe astfel de stații meteo disponibile peste tot, dar ia câteva minute pentru a vedea diferența …

  • Putere redusă
  • 2 afișaje de hârtie electronică …
  • dar 10 ecrane diferite!
  • Bazat pe ESP32
  • accelerometru și senzori de temperatură / umiditate
  • Actualizare Wifi
  • Carcasă imprimată 3D

și multe alte trucuri utile …

Ideea principală este de a afișa diverse informații pe ambele afișaje, în funcție de orientarea casetei. Carcasa are forma unei cutii paralelepipedice, o piatră de pavaj, cu un fel de centură care servește drept picior.

Provizii

După cum puteți vedea, sistemul este format din 2 ecrane de hârtie electronică și o cutie imprimată 3D. Dar există o mulțime de lucruri în ea:

  • Un ESP32
  • Un accelerometru MPU6050
  • Un senzor DHT22
  • O baterie LiPo
  • Un PCB pentru a conecta totul
  • Fire duPont de casă

și o conexiune Wi-Fi. De fapt sunt declarate 3 rețele, sistemul le testează pe rând până reușește să se conecteze.

Pasul 1: De ce o altă stație meteo?

De ce o altă stație meteo?
De ce o altă stație meteo?
De ce o altă stație meteo?
De ce o altă stație meteo?
De ce o altă stație meteo?
De ce o altă stație meteo?
De ce o altă stație meteo?
De ce o altă stație meteo?

Ideea este să afișați diferite tipuri de informații pe ambele ecrane, în funcție de orientarea casetei. Carcasa are forma unei cutii paralelepipedice, o piatră de pavaj, cu un fel de centură care servește drept suport pentru ao face să stea în picioare.

Accelerometrul detectează mișcarea și orientarea și declanșează afișaje.

Pentru a economisi energie, am ales ecranele de hârtie electronică (vezi referințele de mai jos) care păstrează afișajul chiar dacă acestea nu mai sunt alimentate. În mod similar pentru ESP32, am ales modulul Lolin32 (renumit pentru frugalitatea sa) și a trebuit să învăț cum să gestionez somnul profund și trezirea la întreruperea generată de accelerometru.

Ecranele sunt conectate prin SPI, am căutat destul de mult înainte de a găsi pinii potriviți pentru a le conecta la ESP32, știind că am nevoie și de un I2C pentru accelerometru, de un pin pentru a citi DHT22 și de alți 2 pentru măsurarea tensiunii bateriei. ESP32 este aproape complet încărcat! Știind că unii pini sunt doar de citire (eu i-am folosit pe cei pentru senzorul DHT), alții nu pot fi folosiți împreună cu Wifi, a fost puțin complicat să găsim configurația potrivită.

Cutia poate fi orientată în 4 direcții, plus plat. În general, ceea ce face ca 4 * 2 + 2 = 10 tipuri posibile de informații să fie afișate cu doar 2 ecrane. Deci, vă permite să afișați o mulțime de lucruri:

  • Data și sfântul zilei
  • Ora curentă
  • Prognoza meteo de astăzi
  • Prognoza meteo pentru următoarele ore
  • Prognoza meteo pentru zilele următoare
  • Nivelul de încărcare a bateriei
  • Și, deoarece încă mai aveam loc, un citat aleatoriu de pe un site web specializat.

Pasul 2: De ce ai nevoie?

De ce ai nevoie ?
De ce ai nevoie ?
De ce ai nevoie ?
De ce ai nevoie ?
De ce ai nevoie ?
De ce ai nevoie ?
  • ESP32: modul Lolin32 (putere foarte redusă, echipat cu un conector pentru baterie, poate încărca bateria prin USB plus)
  • 2 afișaje epaper: 4,2 inci și 2,9 inci. Am ales modelele din magazinul Good Display.
  • Senzor DHT22
  • MCU6050 accelerometru - girometru I2C senzor
  • O baterie LiPo
  • Pentru măsurarea tensiunii bateriei: 2 rezistențe 10k, 1 rezistor 100k, 1 condensator 100nF, 1 tranzistor MOSFET
  • Lipit și lipit, placă cu circuite imprimate
  • Acces la o imprimantă 3D pentru carcasă

Imaginea atașată arată poziția tuturor componentelor de pe PCB: a trebuit să economisesc spațiu pentru a se potrivi în carcasă, care nu ar trebui să fie prea mare.

Pentru a obține datele meteo, trebuie să vă înregistrați și pe API-urile meteo și să puneți cheile în locurile corecte din fișierul „Variables.h” (a se vedea mai jos).

Site-uri meteo:

  • apixu
  • accuweather

Pasul 3: Acest proiect m-a făcut să gândesc și să învăț mult …

Acest proiect m-a făcut să gândesc și să învăț mult …
Acest proiect m-a făcut să gândesc și să învăț mult …
Acest proiect m-a făcut să gândesc și să învăț mult …
Acest proiect m-a făcut să gândesc și să învăț mult …
Acest proiect m-a făcut să gândesc și să învăț mult …
Acest proiect m-a făcut să gândesc și să învăț mult …

Acest sistem trebuia să fie de consum redus, astfel încât să nu aveți nevoie să încărcați bateria în fiecare seară … Pentru a economisi energie, am ales ecranele de hârtie electronică care păstrează afișajul chiar dacă nu mai sunt alimentate. În mod similar pentru ESP32, am ales modulul Lolin32 (renumit pentru frugalitatea sa) și a trebuit să învăț cum să gestionez somnul profund și apelul de trezire la întreruperea generată de accelerometru.

Cutia poate fi orientată în 4 direcții, mai plană. În general, ceea ce face ca 4 * 2 + 2 = 10 tipuri posibile de informații să fie afișate. Deci, vă permite să faceți o mulțime de lucruri: data și sfântul zilei, ora, prognoza meteo de astăzi, prognozele meteo pentru următoarele ore sau zile, nivelul de încărcare a bateriei și o ofertă aleatorie de pe un site web specializat.

Este mult de căutat pe Internet și, după cum știți: WiFi este dușmanul economisirii de energie …

Deci, trebuie să gestionăm conexiunea, pentru a afișa informații actualizate, dar fără a petrece prea mult timp conectându-ne. O altă problemă destul de complexă: păstrarea unui timp destul de precis. Nu am nevoie de un RTC, deoarece pot găsi ora pe internet, dar ceasul intern al ESP32 derivă destul de puțin, mai ales în perioadele de somn. A trebuit să găsesc o modalitate de a rămâne suficient de exactă, în timp ce așteptam să resetez ceasul prin internet. Îl resincronizez pe internet la fiecare oră.

Deci, există un compromis între autonomie (frecvența conexiunilor la Internet) și acuratețea informațiilor afișate.

O altă problemă de rezolvat este memoria. Când ESP32 este în somn profund, memoria se pierde, cu excepția a ceea ce se numește RAM RTC. Această memorie are o lățime de 4 MB, dintre care doar 2 pot fi utilizate pentru program. În această memorie, trebuie să stochez diferitele variabile de program care trebuie păstrate de la o execuție la alta, după o fază de repaus: prognozele meteo, ora și data, numele fișierelor pictograme, ghilimele etc. A trebuit să învăț să mă descurc cu ea.

Apropo de pictograme, acestea sunt stocate în SPIFFS, sistemul de fișiere ESP32. După închiderea API-ului gratuit Wunderground pentru vreme, a trebuit să caut alți furnizori gratuiți de date meteo. Am selectat două: una pentru vremea din ziua curentă, cu prognoze de 12 ore, și alta pentru prognozele de mai multe zile. Pictogramele nu sunt aceleași, așa că mi-a cauzat două probleme noi:

  • Alegeți un set de pictograme
  • Potriviți aceste pictograme cu codurile de prognoză ale celor 2 site-uri

Această corespondență a fost, de asemenea, stocată în memoria RAM RTC, astfel încât să nu fie necesară reîncărcarea de fiecare dată.

Ultima problemă cu pictogramele. Imposibil de stocat pe toate în SPIFFS. Spațiul este prea mic pentru toate fișierele mele. A fost necesar să faceți compresie de imagine. Am scris un script în Python care îmi citește fișierele cu pictograme și le comprimă în RLE, apoi stochează fișierele comprimate în SPIFFS. Acolo a ținut.

Dar biblioteca de afișare a e-hârtiei acceptă doar fișiere de tip BMP, nu imagini comprimate. Așa că a trebuit să scriu o funcție suplimentară pentru a putea afișa pictogramele mele din aceste fișiere comprimate.

Datele citite pe internet sunt adesea în format json: date despre vreme, Sfântul zilei. Folosesc (excelentă) bibliotecă arduinoJson pentru asta. Dar citatele nu sunt așa. Le iau de pe un site dedicat, așa că trebuie să le citesc privind direct în conținutul paginii web. A trebuit să scriu un cod specific pentru asta. În fiecare zi, pe la miezul nopții, programul merge pe acest site și citește aproximativ zece citate aleatorii și le stochează în memoria RAM RTC. Unul este afișat la întâmplare printre ele atunci când carcasa este orientată pe ecran mare în sus.

Vă transmit problema afișării caracterelor accentuate (îmi pare rău, dar ghilimelele sunt în franceză) …

Când ecranul mic este sus, se afișează tensiunea bateriei, cu un desen pentru a vedea mai bine nivelul rămas. A fost necesar să se realizeze un ansamblu electronic pentru a citi tensiunea bateriei. Deoarece măsurarea nu ar trebui să descarce bateria, am folosit o diagramă găsită pe internet, care folosește un tranzistor MOSFET ca întrerupător pentru a consuma curent numai atunci când se face măsurarea.

Pentru a putea face acest circuit și a potrivi totul în cutie, că am vrut cât mai mic posibil, a trebuit să fac un PCB pentru a conecta toate componentele sistemului. Acesta este primul meu PCB. Am avut noroc pentru că totul a funcționat bine prima dată de această parte …

Vedeți harta de implantare: „zona interzisă” este o zonă rezervată pentru conectarea cablului USB. Modulul Lolin32 vă permite să reîncărcați bateria prin USB: bateria se încarcă dacă cablul USB este conectat, iar modulul funcționează în același timp.

Ultimul punct: fonturile. De diferite dimensiuni, îndrăznețe sau nu, acestea trebuiau create și stocate. Biblioteca Adafruit GFX se ocupă foarte bine de asta, după ce ați instalat fișierele de fonturi în directorul potrivit. Pentru a crea fișierele, am folosit site-ul Font Converter, foarte convenabil!

Asigurați-vă că selectați:

  • Previzualizare afișaj: TFT 2.4"
  • Versiune bibliotecă: Font Adafruit GFX

Deci pentru a rezuma: un proiect mare, care mi-a permis să învăț o mulțime de lucruri

Pasul 4: Utilizarea afișajelor de hârtie electronică

Utilizarea afișajelor de hârtie electronică
Utilizarea afișajelor de hârtie electronică

Principalul dezavantaj al acestor ecrane este clar vizibil pe videoclip: actualizarea afișajului durează una sau două secunde și se face prin intermitent (afișare alternativă a versiunilor normale și inversate ale celor două ecrane). Acest lucru este acceptabil pentru informațiile despre vreme, deoarece nu le actualizez foarte des (la fiecare oră, cu excepția unei schimbări de orientare a casetei). Dar nu pentru moment. De aceea (și pentru a limita consumul) mai folosesc afișajul HH: MM (nu secundele).

Așa că a trebuit să caut o altă modalitate de a actualiza afișajul. Aceste ecrane (unele dintre ele) acceptă o actualizare parțială (aplicată fie pe o zonă a ecranului, fie pe întregul ecran …), dar nu a fost bine pentru mine, deoarece ecranul meu mare (care afișează ora) păstrează fantomele pixelilor care sunt înlocuite. De exemplu, când treceți de la 10:12 la 10:13, „2” este puțin vizibil în interiorul „3” și devine și mai vizibil după „4”, „5” etc. Aș dori să subliniez că acesta este cazul ecranului meu: l-am discutat cu autorul bibliotecii de afișare a e-hârtiei GxEPD2 care mi-a spus că nu a observat acest fenomen cu propriile sale ecrane. Am încercat să schimbăm parametrii fără a reuși să vânăm fantome.

Așa că a trebuit să găsim o altă soluție: am propus să facem o dublă reîmprospătare parțială, care a rezolvat problema (cel puțin pentru mine este satisfăcătoare). Orele sunt trecute fără ca ecranul să clipească și nu există fantome. Cu toate acestea, trecerea nu este imediată: durează puțin mai mult de o secundă pentru a schimba timpul.

Pasul 5: Realizarea acestuia

Realizarea
Realizarea
Realizarea
Realizarea
Realizarea
Realizarea
Realizarea
Realizarea

Pentru a vă asigura că nimic nu se mișcă în interior atunci când orientarea se schimbă, diferitele componente (afișaje, module electronice, PCB-uri, baterii) sunt lipite cu un pistol de lipit. Pentru a direcționa firele sub PCB, l-am instalat pe picioarele realizate cu distanțieri, la fel se întâmplă și cu bateria.

În curând voi instala un conector de microfon USB extern, așa că nu va trebui să deschid carcasa pentru a reîncărca bateria.

Poate că voi fi, de asemenea, interesat să fac actualizări de către OTA pentru a le perfecționa pe toate …

Pasul 6: Codul și fișierele

Image
Image

Sunt furnizate trei fișiere de arhivă:

  • Weather station.zip: codul Arduino, pentru încărcare utilizând ID-ul Arduino
  • Boite ecran.zip: fișierele de imprimantă CAD și 3D pentru carcasă
  • data.zip: fișierele care trebuie încărcate în SPIFFS ale ESP32.

Dacă nu știți cum să încărcați fișiere în SPIFFS-ul ESP32, citiți doar acest tutorial, care prezintă un plugin foarte util și cum să-l utilizați în IDE-ul Arduino.

Programarea de somn profund este destul de diferită de programarea standard a unui Arduino. Pentru ESP32, înseamnă că ESP32 se trezește și execută setarea, apoi merge la culcare. Deci, funcția buclă este goală și nu este executată niciodată.

Unele faze de inițializare trebuie executate o singură dată la prima execuție (cum ar fi obținerea timpului, datele meteo, ghilimele etc.), astfel încât ESP32 trebuie să știe dacă trezirea curentă este sau nu prima: pentru aceasta, soluția este de a stoca o variabilă în memoria RAM RTC (care rămâne activă chiar și în timpul fazelor de somn profund) care este crescută la fiecare trezire. Dacă este egal cu 1, atunci este prima execuție și ESP32 rulează faza de inițializare, altfel această fază este omisă.

Pentru a trezi ESP32, există mai multe posibilități:

  • Temporizare trezire: codul calculează durata somnului profund înainte de a merge la culcare. Aceasta este utilizată pentru a actualiza ora (la fiecare 1, 2, 3 sau 5 minute) sau datele meteo (la fiecare 3 sau 4 ore) ale citatelor și sfântului zilei (la fiecare 24 de ore)
  • Întrerupeți trezirea: accelerometrul trimite un semnal care este utilizat pentru a trezi ESP32. Aceasta este utilizată pentru a detecta o modificare a orientării și a actualiza afișajele
  • Trezire senzor tactil: ESP32 este echipat cu mai mulți pini care acționează ca senzori tactili, dar nu pot fi folosiți cu trezire temporizată, așa că nu am folosit acest lucru.

Există alte trucuri de programare în altă parte în cod, pentru a menține timpul corect în timp ce economisiți energie (adică nu conectați serverul NTP în fiecare minut), pentru a elimina accentele care nu sunt acceptate de biblioteca Adafruit GFX, pentru a evita actualizarea unui afișaj dacă nu este necesar, pentru a seta parametrii accelerometrului în special pentru trezirea întreruperii, calculați cu exactitate timpul de somn în caz de trezire cu temporizator, evitați utilizarea consolei Seriale dacă nu este conectată la IDE (pentru a economisi din nou energia), deconectați wifi-ul atunci când nu este necesar, etc … și codul este plin de comentarii care ajută la înțelegerea funcțiilor.

Vă mulțumim că ați citit acest Instructable (chiar primul meu). Sper să vă placă și să vă bucurați de realizarea acestei stații meteo

Concurs de senzori
Concurs de senzori

Locul doi în concursul de senzori

Recomandat: