INHOUDSOPGAWE:
- Voorrade
- Stap 1: Waarom nog 'n weerstasie?
- Stap 2: Wat het u nodig?
- Stap 3: Hierdie projek het my baie laat dink en geleer …
- Stap 4: Gebruik E-papier-skerms
- Stap 5: Maak dit
- Stap 6: Die kode en die lêers
Video: Nog 'n slim weerstasie, maar : 6 stappe (met foto's)
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:25
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?
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?
- 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 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 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
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
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
Naaswenner in die Sensors -kompetisie
Aanbeveel:
Slim lessenaar LED -lig - Slim beligting met Arduino - Neopixels -werkruimte: 10 stappe (met foto's)
Slim lessenaar LED -lig | Slim beligting met Arduino | Neopixels Workspace: Ons spandeer deesdae baie tyd tuis, studeer en werk virtueel, so waarom nie ons werkruimte groter maak met 'n pasgemaakte en slim beligtingstelsel Arduino en Ws2812b LED's nie. Hier wys ek u hoe u u Smart bou LED -lessenaar op die tafel wat
YADPF (NOG nog 'n digitale prentraam): 7 stappe (met foto's)
YADPF (NOG 'n ander digitale prentraamwerk): ek weet dat dit nie nuwe dinge is nie. Alle fotorame wat ek gesien het, is mooi, maar ek was op soek na iets anders, ek is op soek na 'n baie mooi prentjie
NaTaLia Weerstasie: Arduino -sonkrag -weerstasie op die regte manier: 8 stappe (met foto's)
NaTaLia Weerstasie: Arduino -sonkrag -weerstasie op die regte manier: Na 1 jaar suksesvolle werking op 2 verskillende plekke deel ek my projekplanne met sonkrag -aangedrewe weerstasies en verduidelik hoe dit ontwikkel het tot 'n stelsel wat werklik oor 'n lang tyd kan voortbestaan tydperke van sonkrag. As jy volg
Koppelvlak Honeywell Vista alarm met slim hub (knipoog/slim): 7 stappe (met foto's)
Koppelvlak Honeywell Vista alarm met slim hub (knipoog/slim): Hallo daar! Ek wou 'n kort handleiding gee oor hoe ek my Honeywell Vista -alarmstelsel in my slim hub kan integreer. Ek gebruik Wink vir hierdie tutoriaal, maar dit behoort te werk met enige slim hub (Smartthings/Iris/ens.) Voordat ons begin, gaan
Nog 'n weerstasie (Y.A.W.S.): 18 stappe (met foto's)
Nog 'n weerstasie (Y.A.W.S.): Hierdie projek is my mening oor die immer gewilde weerstasie. Myne is gebaseer op 'n ESP8266, a.96 ” OLED -skerm en 'n BME280 omgewing sensor sensor skikking. Weerstasies blyk 'n baie gewilde projek te wees. Myne onderskei homself van die ander