INHOUDSOPGAWE:

Nog 'n slim weerstasie, maar : 6 stappe (met foto's)
Nog 'n slim weerstasie, maar : 6 stappe (met foto's)

Video: Nog 'n slim weerstasie, maar : 6 stappe (met foto's)

Video: Nog 'n slim weerstasie, maar : 6 stappe (met foto's)
Video: NAT DOEKJE werkt ALTIJD! Heb JIJ weleens iets GEBROKEN? 2024, November
Anonim
Image
Image
Nog 'n slim weerstasie, maar …
Nog 'n slim weerstasie, maar …
Nog 'n slim weerstasie, maar …
Nog 'n slim weerstasie, maar …
Nog 'n slim weerstasie, maar …
Nog 'n slim weerstasie, maar …

OK, ek weet daar is soveel sulke weerstasies oral beskikbaar, maar neem 'n paar minute om die verskil te sien …

  • Lae krag
  • 2 e-papier vertoon …
  • maar 10 verskillende skerms!
  • ESP32 gebaseer
  • versnellingsmeter en temperatuur / humiditeit sensors
  • Wifi -opdatering
  • 3D -gedrukte tas

en baie ander nuttige truuks …

Die belangrikste idee is om verskillende inligting op albei skerms te vertoon, afhangende van die oriëntasie van die boks. Die omhulsel is in die vorm van 'n parallelepipediese boks, 'n plaveiselsteen, met 'n soort gordel wat as voet dien.

Voorrade

Soos u kan sien, bestaan die stelsel uit 2 e-papierskerms en 'n 3D-gedrukte boks. Maar daar is baie dinge daarin:

  • 'N ESP32
  • Een MPU6050 versnellingsmeter
  • 'N DHT22 -sensor
  • 'N LiPo -battery
  • 'N PCB om die hele ding te verbind
  • Tuisgemaakte duPont -drade

en 'n Wi-Fi-verbinding. In werklikheid word 3 netwerke verklaar, die stelsel toets hulle een vir een totdat dit daarin slaag om aan te sluit.

Stap 1: Waarom nog 'n weerstasie?

Waarom nog 'n weerstasie?
Waarom nog 'n weerstasie?
Waarom nog 'n weerstasie?
Waarom nog 'n weerstasie?
Waarom nog 'n weerstasie?
Waarom nog 'n weerstasie?
Waarom nog 'n weerstasie?
Waarom nog 'n weerstasie?

Die idee is om verskillende soorte inligting op beide skerms te vertoon, afhangende van die oriëntasie van die boks. Die omhulsel is in die vorm van 'n parallelepipediese boks, 'n plaveiselsteen, met 'n soort gordel wat as ondersteuning dien om dit te laat staan.

Die versnellingsmeter bespeur beweging en oriëntasie en aktiveer vertonings.

Om energie te bespaar, het ek die e-papierskerms gekies (sien verwysings hieronder) wat die skerm behou, selfs al het hulle nie meer krag nie. Net so vir die ESP32, het ek die Lolin32-module gekies (bekend om sy spaarsaamheid) en ek moes leer hoe om diepe slaap te hanteer, en die wakker word met onderbreking wat deur die versnellingsmeter gegenereer word.

Die skerms is via SPI verbind, ek het nogal gesoek voordat ek die regte penne gekry het om dit aan die ESP32 te koppel, in die wete dat ek ook 'n I2C nodig het vir die versnellingsmeter, 'n speld om die DHT22 en 2 ander te lees vir die meting van die batteryspanning. Die ESP32 is byna vol gelaai! Omdat ek weet dat sommige penne alleen-leesbaar is (ek het dit vir die DHT-sensor gebruik), ander kan nie saam met Wifi gebruik word nie, was dit 'n bietjie ingewikkeld om die regte opset te vind.

Die boks kan in 4 rigtings gerig word, plus plat. Al met al maak dit 4*2+2 = 10 moontlike tipes inligting om met slegs 2 skerms te vertoon. Dit stel u dus in staat om baie dinge te vertoon:

  • Die datum en die heilige van die dag
  • Die huidige tyd
  • Vandag se weervoorspelling
  • Weervoorspellings vir die komende ure
  • Weervoorspellings vir die komende dae
  • Die battery laai vlak
  • En aangesien ek nog plek gehad het, 'n ewekansige aanhaling van 'n gespesialiseerde webwerf.

Stap 2: Wat het u nodig?

Wat het jy nodig ?
Wat het jy nodig ?
Wat het jy nodig ?
Wat het jy nodig ?
Wat het jy nodig ?
Wat het jy nodig ?
  • ESP32: Lolin32 -module (baie lae krag, toegerus met 'n batteryaansluiting, kan die battery laai via USB plus)
  • 2 skerms: 4,2 duim en 2,9 duim. Ek het die modelle in die Good Display -winkel gekies.
  • DHT22 sensor
  • MCU6050 versnellingsmeter - gyrometer I2C sensor
  • 'N LiPo -battery
  • Vir meting van batteryspanning: 2 10k weerstande, 1 100k weerstand, 1 100nF kondensator, 1 MOSFET transistor
  • Soldeersel en soldeerbout, printplaat
  • Toegang tot 'n 3D -drukker vir die saak

Die aangehegte prentjie toon die posisie van al die komponente op die printplaat: ek moes ruimte bespaar om in die tas te pas, wat nie te groot moes wees nie.

Om die weerdata te kry, moet u ook op die weer -API's registreer en u sleutels op die regte plekke in die 'Variables.h' lêer plaas (sien hieronder).

Weer webwerwe:

  • apixu
  • accuweather

Stap 3: Hierdie projek het my baie laat dink en geleer …

Hierdie projek het my baie laat dink en geleer …
Hierdie projek het my baie laat dink en geleer …
Hierdie projek het my baie laat dink en geleer …
Hierdie projek het my baie laat dink en geleer …
Hierdie projek het my baie laat dink en geleer …
Hierdie projek het my baie laat dink en geleer …

Hierdie stelsel was veronderstel om lae krag te hê, sodat u nie elke aand die battery hoef te laai nie … Om energie te bespaar, het ek die e-papierskerms gekies wat die skerm behou, selfs al is hulle nie meer aangedryf nie. Net so vir die ESP32, het ek die Lolin32-module gekies (bekend om sy spaarsaamheid) en ek moes leer hoe om diepe slaap te hanteer, en die wekroep na onderbreking wat deur die versnellingsmeter veroorsaak word.

Die boks kan in 4 rigtings gerig word, meer plat. Al met al maak dit 4*2+2 = 10 moontlike tipes inligting om te vertoon. Dit stel u in staat om baie dinge te doen: die datum en die heilige van die dag, die tyd, die weervoorspelling van vandag, weervoorspellings vir die komende ure of dae, die laaivlak van die battery en 'n ewekansige kwotasie van 'n gespesialiseerde webwerf.

Dit is baie om op te soek op die internet, en soos u weet: WiFi is die vyand van energiebesparing …

Ons moet dus die verbinding bestuur om bygewerkte inligting te vertoon, maar sonder om te veel tyd te spandeer om aan te sluit. Nog 'n taamlik ingewikkelde probleem: behou 'n redelike akkurate tyd. Ek het nie 'n RTC nodig nie, aangesien ek die tyd op die internet kan vind, maar die interne klok van die ESP32 dryf 'n bietjie, veral tydens slaapperiodes. Ek moes 'n manier vind om akkuraat genoeg te bly, terwyl ek wag om die klok via die internet terug te stel. Ek sinchroniseer dit elke uur op die internet.

Daar is dus 'n afweging tussen outonomie (die frekwensie van internetverbindings) en die akkuraatheid van die vertoonde inligting.

'N Ander probleem wat opgelos moet word, is die geheue. As die ESP32 diep slaap, gaan die geheue verlore, behalwe vir wat RTC RAM genoem word. Hierdie geheue is 4 MB breed, waarvan slegs 2 vir die program gebruik kan word. In hierdie geheue moet ek die verskillende programveranderlikes wat van die een uitvoering na die volgende gehou moet word, na 'n slaapfase stoor: weervoorspellings, tyd en datum, ikoonlêername, aanhalings, ens. Ek moes leer om dit te hanteer.

As ek oor ikone praat, word dit gestoor in die SPIFFS, die ESP32 -lêerstelsel. Na die sluiting van die gratis Wunderground -weer -API, moes ek ander gratis weerdata -verskaffers soek. Ek het twee gekies: een vir die weer van die huidige dag, met voorspellings van 12 uur, en 'n ander vir die meerdaagse voorspellings. Die ikone is nie dieselfde nie, en dit het my twee nuwe probleme veroorsaak:

  • Kies 'n ikoonstel
  • Pas hierdie ikone by die voorspellingskodes van die 2 webwerwe

Hierdie korrespondensie is ook in die RTC RAM gestoor sodat dit nie elke keer herlaai hoef te word nie.

Laaste probleem met ikone. Dit is onmoontlik om almal in die SPIFFS te stoor. Die spasie is te klein vir al my lêers. Dit was nodig om beeldkompressie te doen. Ek het 'n script in Python geskryf wat my ikoonlêers lees en dit in RLE saamdruk, en dan die saamgeperste lêers in SPIFFS stoor. Daar het dit gehou.

Maar die e-paper display biblioteek neem slegs BMP-lêers, nie saamgeperste beelde nie. Ek moes dus 'n ekstra funksie skryf om my ikone uit hierdie saamgeperste lêers te kon vertoon.

Die data wat op die internet gelees word, is dikwels in json -formaat: weerdata, Heilige van die dag. Ek gebruik die (groot) arduinoJson -biblioteek hiervoor. Maar aanhalings is nie so nie. Ek neem dit van 'n spesiale webwerf af, so ek moet dit lees deur direk na die inhoud van die webblad te kyk. Ek moes 'n spesifieke kode daarvoor skryf. Elke dag, omstreeks middernag, gaan die program na hierdie webwerf en lees ongeveer tien ewekansige aanhalings en stoor dit in die RTC RAM. Die een word willekeurig onder hulle vertoon as die behuising groot skerm na bo gerig is.

Ek gee u die probleem van die vertoon van karakters met aksent (jammer, maar aanhalings is in Frans) …

As die klein skerm op is, word die batteryspanning vertoon, met 'n tekening om die oorblywende vlak beter te sien. Dit was nodig om 'n elektroniese samestelling te maak om die batteryspanning te lees. Aangesien die meting nie die battery moet laai nie, het ek 'n diagram op die internet gebruik, wat 'n MOSFET -transistor as skakelaar gebruik om slegs stroom te gebruik wanneer die meting gedoen word.

Om hierdie kring te kon maak en alles in die boks te pas, wat ek die minste wou hê, moes ek 'n PCB maak om al die komponente van die stelsel aan te sluit. Dit is my eerste PCB. Ek was gelukkig, want alles het goed gewerk die eerste keer aan hierdie kant …

Sien inplantingskaart: die 'verbode gebied' is 'n gebied wat gereserveer is vir die aansluiting van die USB -kabel. Met die Lolin32 -module kan u die battery via USB herlaai: die battery word gelaai as die USB -kabel gekoppel is, en die module werk terselfdertyd.

Laaste punt: die lettertipes. Van verskillende groottes, vet of nie, moes hulle geskep en geberg word. Die Adafruit GFX -biblioteek sorg baie goed daarvoor as u die lettertipe -lêers in die regte gids geïnstalleer het. Om die lêers te skep, het ek die Font Converter -webwerf gebruik, baie gerieflik!

Maak seker dat u kies:

  • Voorskou -skerm: TFT 2.4"
  • Biblioteekweergawe: Adafruit GFX Font

Om op te som: 'n groot projek waarmee ek baie dinge kon leer

Stap 4: Gebruik E-papier-skerms

Die gebruik van e-papier vertoon
Die gebruik van e-papier vertoon

Die grootste nadeel van hierdie skerms is duidelik sigbaar op die video: die opdatering van die skerm duur een of twee sekondes en word gedoen deur te flikker (alternatiewe vertoning van die normale en omgekeerde weergawes van die twee skerms). Dit is aanvaarbaar vir weerinligting, want ek werk dit nie gereeld by nie (elke uur, behalwe as die rigting verander word). Maar nie vir die tyd nie. Daarom (en om die verbruik te beperk) gebruik ek steeds die HH: MM -skerm (nie die sekondes nie).

Ek moes dus 'n ander manier soek om die skerm op te dateer. Hierdie skerms (sommige van hulle) ondersteun 'n gedeeltelike opdatering (toegepas op 'n gedeelte van die skerm of op die hele skerm …), maar dit was nie goed vir my nie, want my groot skerm (wat die tyd aandui) hou die pixels van die pixels wat vervang word. Byvoorbeeld, as u van 10:12 na 10:13 gaan, is die '2' 'n bietjie sigbaar binne die '3', en word dit nog meer sigbaar na die '4', '5', ens. om daarop te wys dat dit die geval is met my skerm: ek het dit bespreek met die skrywer van die e-paper display biblioteek GxEPD2 wat vir my gesê het dat hy nie hierdie verskynsel met sy eie skerms waargeneem het nie. Ons het probeer om die parameters te verander sonder om daarin te slaag om spoke te jag.

Dus moes ons 'n ander oplossing vind: ek het voorgestel om 'n gedeeltelike dubbele verversing te doen, wat die probleem opgelos het (ten minste is dit vir my bevredigend). Die ure gaan verby sonder dat die skerm flikker en daar is geen spoke nie. Die omskakeling is egter nie onmiddellik nie: dit neem 'n bietjie meer as een sekonde om die tyd te verander.

Stap 5: Maak dit

Maak dit
Maak dit
Maak dit
Maak dit
Maak dit
Maak dit
Maak dit
Maak dit

Om te verseker dat niks na binne beweeg as die oriëntasie verander nie, word die verskillende komponente (skerms, elektroniese modules, PCB's, batterye) met 'n gomgeweer vasgeplak. Om die drade onder die PCB te plaas, het ek dit geïnstalleer op bene met afstandhouers, dieselfde geld vir die battery.

Ek sal binnekort 'n eksterne USB -mikrofoonaansluiting installeer, sodat ek nie die kassie hoef oop te maak om die battery te herlaai nie.

Miskien sal ek ook belangstel om by te werk deur OTA om dit alles te vervolmaak …

Stap 6: Die kode en die lêers

Image
Image

Drie argieflêers word voorsien:

  • Weather station.zip: die Arduino -kode om op te laai met die Arduino IDE
  • Boite ecran.zip: die CAD- en 3D -drukkerlêers vir die saak
  • data.zip: die lêers wat in die SPIFFS van die ESP32 opgelaai moet word.

As u nie weet hoe om lêers in die ESP32 se SPIFFS op te laai nie, lees net hierdie handleiding, wat 'n baie nuttige inprop bied en hoe u dit in die Arduino IDE kan gebruik.

Die diep slaapprogrammering verskil heelwat van die standaardprogrammering van 'n Arduino. Vir die ESP32 beteken dit dat die ESP32 wakker word en die opstelling uitvoer en dan gaan slaap. Die lusfunksie is dus leeg en word nooit uitgevoer nie.

Sommige initialiseringsfase moet slegs een keer uitgevoer word by die eerste uitvoering (soos om die tyd, die weerdata, aanhalings, ens.) Te kry, sodat die ESP32 moet weet of die huidige wakker die eerste is of nie: daarvoor moet die Die oplossing is om 'n veranderlike in die RTC RAM op te slaan (wat selfs tydens diepe slaapfases aktief bly) wat by elke wakker word verhoog. As dit gelyk is aan 1, is dit die eerste uitvoering en loop die ESP32 die inisialiseringsfase, anders word hierdie fase oorgeslaan.

Daar is verskeie moontlikhede om die ESP32 wakker te maak:

  • Timer wake-up: die kode bereken die duur van die diep slaap voordat u gaan slaap. Dit word gebruik om die tyd (elke 1, 2, 3 of 5 minute) of die weerdata (elke 3 of 4 uur) van die aanhalings en heilige van die dag (elke 24 uur) by te werk
  • Onderbreek wakker word: die versnellingsmeter stuur 'n sein wat gebruik word om die ESP32 wakker te maak. Dit word gebruik om 'n oriëntasieverandering op te spoor en die skerms by te werk
  • Raaksensor wakker word: die ESP32 is toegerus met verskeie penne wat as aanraaksensors optree, maar dit kan nie saam met tydopwekker gebruik word nie, so ek het dit nie gebruik nie.

Daar is ander programmeertruuks elders in die kode om die tyd akkuraat te hou terwyl u energie bespaar (dws nie die NTP -bediener elke minuut verbind nie), om die aksente te verwyder wat nie deur die Adafruit GFX -biblioteek ondersteun word nie, om te voorkom dat 'n skerm opgedateer word as dit is nie nodig om die versnellingsmeterparameters in te stel veral vir onderbrekings wakker word, die tyd om te slaap akkuraat te bereken in geval van 'n timer wakker word, vermy die gebruik van die seriële konsole as dit nie aan die IDE gekoppel is nie (om weer energie te bespaar) die wifi as dit nie nodig is nie, ens … en die kode is vol opmerkings wat die funksies help verstaan.

Dankie dat u hierdie Instructable (my heel eerste een) gelees het. Ek hoop dat u dit sal geniet en dit geniet om hierdie weerstasie te maak

Sensors -kompetisie
Sensors -kompetisie

Naaswenner in die Sensors -kompetisie

Aanbeveel: