Inhoudsopgave:

Nog een ander slim weerstation, maar: 6 stappen (met afbeeldingen)
Nog een ander slim weerstation, maar: 6 stappen (met afbeeldingen)

Video: Nog een ander slim weerstation, maar: 6 stappen (met afbeeldingen)

Video: Nog een ander slim weerstation, maar: 6 stappen (met afbeeldingen)
Video: Bijtende hond terug in wijk van slachtoffer 2024, November
Anonim
Image
Image
Nog een ander slim weerstation, maar…
Nog een ander slim weerstation, maar…
Nog een ander slim weerstation, maar…
Nog een ander slim weerstation, maar…
Nog een ander slim weerstation, maar…
Nog een ander slim weerstation, maar…

OK, ik weet dat er overal zoveel van dergelijke weerstations beschikbaar zijn, maar neem een paar minuten de tijd om het verschil te zien…

  • Laag vermogen
  • 2 e-paper-displays…
  • maar 10 verschillende schermen!
  • ESP32 gebaseerd
  • versnellingsmeter en temperatuur-/vochtigheidssensoren
  • Wifi-update
  • 3D geprint hoesje

en tal van andere handige trucs…

Het belangrijkste idee is om verschillende informatie op beide displays weer te geven, afhankelijk van de oriëntatie van de doos. De kast heeft de vorm van een parallellepipedum, een straatsteen, met een soort riem die als voet dient.

Benodigdheden

Zoals je ziet bestaat het systeem uit 2 e-paper schermen en een 3D geprinte doos. Maar er zit veel in:

  • Een ESP32
  • Eén MPU6050 versnellingsmeter
  • Een DHT22-sensor
  • Een LiPo-batterij
  • Een PCB om het geheel aan te sluiten
  • Zelfgemaakte duPont garens

en een wifi-verbinding. In feite zijn er 3 netwerken gedeclareerd, het systeem test ze een voor een totdat het erin slaagt verbinding te maken.

Stap 1: Waarom nog een weerstation?

Waarom nog een weerstation?
Waarom nog een weerstation?
Waarom nog een weerstation?
Waarom nog een weerstation?
Waarom nog een weerstation?
Waarom nog een weerstation?
Waarom nog een weerstation?
Waarom nog een weerstation?

Het idee is om verschillende soorten informatie op beide schermen weer te geven, afhankelijk van de oriëntatie van de doos. De koffer heeft de vorm van een parallellepipedum, een straatsteen, met een soort riem die als steun dient om hem te laten staan.

De versnellingsmeter detecteert beweging en oriëntatie en activeert displays.

Om energie te besparen, heb ik gekozen voor de e-paper schermen (zie onderstaande referenties) die het scherm behouden, zelfs als ze niet langer worden gevoed. Op dezelfde manier koos ik voor de ESP32 voor de Lolin32-module (bekend om zijn zuinigheid) en ik moest leren omgaan met diepe slaap en het wakker worden bij interrupt gegenereerd door de versnellingsmeter.

De schermen zijn aangesloten via SPI, ik heb behoorlijk wat gezocht voordat ik de juiste pinnen vond om ze aan te sluiten op de ESP32, wetende dat ik ook een I2C nodig heb voor de accelerometer, een pin om de DHT22 uit te lezen en 2 andere voor de meting van de batterijspanning. De ESP32 is bijna volledig opgeladen! Wetende dat sommige pinnen alleen-lezen zijn (ik gebruikte die voor de DHT-sensor), andere kunnen niet samen met wifi worden gebruikt, het was een beetje ingewikkeld om de juiste configuratie te vinden.

De doos kan in 4 richtingen worden georiënteerd, plus plat. Al met al maakt dat 4*2+2 = 10 mogelijke soorten informatie om weer te geven met slechts 2 schermen. U kunt dus veel dingen weergeven:

  • De datum en de heilige van de dag
  • De huidige tijd
  • De weersvoorspelling van vandaag
  • Weersvoorspellingen voor de komende uren
  • Weersvoorspellingen voor de komende dagen
  • Het laadniveau van de batterij
  • En aangezien ik nog plek had, een willekeurige quote van een gespecialiseerde website.

Stap 2: Wat heb je nodig?

Wat heb je nodig ?
Wat heb je nodig ?
Wat heb je nodig ?
Wat heb je nodig ?
Wat heb je nodig ?
Wat heb je nodig ?
  • ESP32: Lolin32-module (zeer laag vermogen, uitgerust met een batterijconnector, kan de batterij opladen via USB plus)
  • 2 epaper-displays: 4,2 inch en 2,9 inch. Ik koos de modellen uit de Good Display-winkel.
  • DHT22-sensor
  • MCU6050 versnellingsmeter - gyrometer I2C-sensor
  • Een LiPo-batterij
  • Voor batterijspanningsmeting: 2 10k-weerstanden, 1 100k-weerstand, 1 100nF-condensator, 1 MOSFET-transistor
  • Soldeer en soldeerbout, printplaat
  • Toegang tot een 3D-printer voor de koffer

De bijgevoegde afbeelding toont de positie van alle componenten op de PCB: ik moest ruimte besparen om in de behuizing te passen, die niet te groot zou moeten zijn.

Om de weergegevens te krijgen, moet u zich ook registreren op de weer-API's en uw sleutels op de juiste plaatsen in het bestand 'Variables.h' plaatsen (zie hieronder).

Weerwebsites:

  • apixu
  • accuweer

Stap 3: Dit project heeft me aan het denken gezet en veel geleerd…

Dit project heeft me aan het denken gezet en veel geleerd…
Dit project heeft me aan het denken gezet en veel geleerd…
Dit project heeft me aan het denken gezet en veel geleerd…
Dit project heeft me aan het denken gezet en veel geleerd…
Dit project heeft me aan het denken gezet en veel geleerd…
Dit project heeft me aan het denken gezet en veel geleerd…

Dit systeem moest een laag stroomverbruik hebben, zodat je de batterij niet elke nacht hoeft op te laden… Om energie te besparen, koos ik voor de e-paper-schermen die het scherm behouden, zelfs als ze geen stroom meer hebben. Evenzo voor de ESP32 koos ik de Lolin32-module (bekend om zijn soberheid) en ik moest leren omgaan met diepe slaap en de wake-up call bij onderbrekingen die door de accelerometer werden gegenereerd.

De doos kan in 4 richtingen worden georiënteerd, meer plat. Al met al maakt dat 4*2+2 = 10 mogelijke soorten informatie om weer te geven. U kunt dus veel dingen doen: de datum en de heilige van de dag, de tijd, de weersvoorspelling van vandaag, weersvoorspellingen voor de komende uren of dagen, het laadniveau van de batterij en een willekeurige quote van een gespecialiseerde website.

Het is veel zoeken op internet, en zoals je weet: wifi is de vijand van energiebesparing…

We moeten dus de verbinding beheren om up-to-date informatie weer te geven, maar zonder al te veel tijd te besteden aan het verbinden. Een ander nogal complex probleem: het bijhouden van een redelijk nauwkeurige tijd. Ik heb geen RTC nodig omdat ik de tijd op internet kan vinden, maar de interne klok van de ESP32 drijft nogal wat, vooral tijdens slaapperioden. Ik moest een manier vinden om nauwkeurig genoeg te blijven, terwijl ik wachtte om de klok via internet te resetten. Ik synchroniseer het elk uur opnieuw op internet.

Er is dus een afweging tussen autonomie (de frequentie van internetverbindingen) en de nauwkeurigheid van de weergegeven informatie.

Een ander probleem dat moet worden opgelost, is het geheugen. Wanneer de ESP32 in diepe slaap is, gaat het geheugen verloren, behalve wat RTC RAM wordt genoemd. Dit geheugen is 4MB breed, waarvan er slechts 2 voor het programma gebruikt kunnen worden. In dit geheugen moet ik de verschillende programmavariabelen opslaan die van de ene uitvoering naar de andere moeten worden bewaard, na een slaapfase: weersvoorspellingen, tijd en datum, pictogrambestandsnamen, aanhalingstekens, enz. Ik moest ermee leren omgaan.

Over pictogrammen gesproken, ze worden opgeslagen in de SPIFFS, het ESP32-bestandssysteem. Na de sluiting van de gratis Wunderground-weer-API moest ik op zoek naar andere gratis aanbieders van weergegevens. Ik heb er twee geselecteerd: een voor het weer van de huidige dag, met 12-uursvoorspellingen, en een andere voor de meerdaagse voorspellingen. De pictogrammen zijn niet hetzelfde, dus het veroorzaakte twee nieuwe problemen:

  • Kies een pictogrammenset
  • Match deze pictogrammen met de voorspellingscodes van de 2 locaties

Ook deze correspondentie is in het RTC RAM opgeslagen, zodat deze niet telkens opnieuw hoeft te worden geladen.

Laatste probleem met pictogrammen. Onmogelijk om ze allemaal in de SPIFFS op te slaan. De ruimte is te klein voor al mijn bestanden. Het was noodzakelijk om beeldcompressie te doen. Ik schreef een script in Python dat mijn pictogrambestanden leest en comprimeert in RLE, en vervolgens de gecomprimeerde bestanden opslaat in SPIFFS. Daar hield het.

Maar de e-paper-displaybibliotheek accepteert alleen BMP-bestanden, geen gecomprimeerde afbeeldingen. Ik moest dus een extra functie schrijven om mijn pictogrammen uit deze gecomprimeerde bestanden te kunnen weergeven.

De gegevens die op internet worden gelezen, zijn vaak in json-formaat: weergegevens, heilige van de dag. Ik gebruik hiervoor de (geweldige) arduinoJson-bibliotheek. Maar citaten zijn niet zo. Ik haal ze van een speciale site, dus ik moet ze lezen door rechtstreeks in de inhoud van de webpagina te kijken. Daar moest ik een specifieke code voor schrijven. Elke dag, rond middernacht, gaat het programma naar deze site en leest ongeveer tien willekeurige aanhalingstekens, en slaat ze op in het RTC RAM. Een daarvan wordt willekeurig weergegeven wanneer de behuizing een groot scherm naar boven is gericht.

Ik geef je het probleem van de weergave van tekens met accenten door (sorry, maar de aanhalingstekens zijn in het Frans)….

Wanneer het kleine scherm omhoog staat, wordt de batterijspanning weergegeven, met een tekening om het resterende niveau beter te zien. Het was nodig om een elektronische assemblage te maken om de batterijspanning uit te lezen. Omdat de meting de batterij niet zou moeten ontladen, heb ik een diagram gebruikt dat op internet is gevonden en dat een MOSFET-transistor als schakelaar gebruikt om alleen stroom te verbruiken wanneer de meting wordt uitgevoerd.

Om dit circuit te kunnen maken en alles in de doos te kunnen passen, die ik zo klein mogelijk wilde hebben, moest ik een PCB maken om alle componenten van het systeem aan te sluiten. Dit is mijn eerste printplaat. Ik had geluk want alles werkte de eerste keer goed aan deze kant…

Zie implantatiekaart: de "verboden zone" is een gebied dat gereserveerd is voor het aansluiten van de USB-kabel. Met de Lolin32-module kun je de batterij opladen via USB: de batterij wordt opgeladen als de USB-kabel is aangesloten en de module werkt tegelijkertijd.

Laatste punt: de lettertypen. Van verschillende groottes, vetgedrukt of niet, ze moesten worden gemaakt en opgeslagen. De Adafruit GFX-bibliotheek zorgt daar heel goed voor, als je eenmaal de lettertypebestanden in de juiste map hebt geïnstalleerd. Om de bestanden te maken, heb ik de Font Converter-site gebruikt, erg handig!

Zorg ervoor dat u selecteert:

  • Voorbeeldweergave: TFT 2.4"
  • Bibliotheekversie: Adafruit GFX-lettertype

Dus om samen te vatten: een groot project, waar ik veel dingen heb geleerd

Stap 4: E-paper-displays gebruiken

E-paper-displays gebruiken
E-paper-displays gebruiken

Het grootste nadeel van deze schermen is duidelijk zichtbaar op de video: het updaten van het display duurt één of twee seconden en gebeurt door te knipperen (alternatieve weergave van de normale en omgekeerde versies van de twee schermen). Dit is acceptabel voor weersinformatie omdat ik deze niet vaak bijwerk (elk uur, behalve voor een verandering van oriëntatie van de doos). Maar niet voor die tijd. Daarom (en om het verbruik te beperken) gebruik ik nog steeds het HH:MM-display (niet de seconden).

Dus moest ik op zoek naar een andere manier om het scherm bij te werken. Deze schermen (sommige) ondersteunen een gedeeltelijke update (toegepast op een deel van het scherm, of op het hele scherm…) maar het was niet goed voor mij omdat mijn grote scherm (dat de tijd weergeeft) spoken van de pixels weergeeft die worden vervangen. Als u bijvoorbeeld van 10:12 naar 10:13 gaat, is de '2' een beetje zichtbaar binnen de '3', en wordt hij nog beter zichtbaar na de '4', de '5', enz. Ik zou graag om erop te wijzen dat dit het geval is voor mijn scherm: ik besprak het met de auteur van de e-paper display-bibliotheek GxEPD2 die me vertelde dat hij dit fenomeen niet met zijn eigen schermen had waargenomen. We hebben geprobeerd de parameters te veranderen zonder erin te slagen op spoken te jagen.

Dus moesten we een andere oplossing vinden: ik stelde voor om een gedeeltelijke dubbele verfrissing te doen, wat het probleem oploste (het is tenminste bevredigend voor mij). De uren gaan voorbij zonder dat het scherm knippert en er zijn geen spoken. De omschakeling is echter niet onmiddellijk: het duurt iets meer dan een seconde om de tijd te veranderen.

Stap 5: Het maken

Het maken
Het maken
Het maken
Het maken
Het maken
Het maken
Het maken
Het maken

Om ervoor te zorgen dat er niets naar binnen beweegt wanneer de oriëntatie verandert, worden de verschillende componenten (displays, elektronische modules, printplaten, batterijen) met een lijmpistool verlijmd. Om de draden onder de printplaat door te leiden, heb ik deze op poten gemonteerd met afstandhouders, hetzelfde geldt voor de batterij.

Binnenkort zal ik een externe USB-microfoonaansluiting installeren, zodat ik de behuizing niet hoef te openen om de batterij op te laden.

Misschien ben ik ook geïnteresseerd in een update door OTA om het allemaal te perfectioneren….

Stap 6: De code en de bestanden

Image
Image

Er zijn drie archiefbestanden beschikbaar:

  • Weerstation.zip: de Arduino-code, om te uploaden met behulp van de Arduino IDE
  • Boite ecran.zip: de CAD- en 3D-printerbestanden voor de case
  • data.zip: de bestanden die moeten worden geüpload in de SPIFFS van de ESP32.

Als je niet weet hoe je bestanden moet uploaden naar de SPIFFS van de ESP32, lees dan deze tutorial, die een zeer nuttige plug-in presenteert en hoe je deze in de Arduino IDE kunt gebruiken.

De deep sleep-programmering is heel anders dan de standaardprogrammering van een Arduino. Voor de ESP32 betekent dit dat de ESP32 wakker wordt en de installatie uitvoert en vervolgens gaat slapen. De lusfunctie is dus leeg en wordt nooit uitgevoerd.

Sommige initialisatiefasen moeten slechts één keer worden uitgevoerd bij de eerste uitvoering (zoals het ophalen van de tijd, de weergegevens, aanhalingstekens, enz.), dus de ESP32 moet weten of de huidige wake-up de eerste is of niet: daarvoor moet de oplossing is om een variabele op te slaan in de RTC RAM (die zelfs tijdens diepe slaapfasen actief blijft) die bij elke wake-up wordt verhoogd. Als het gelijk is aan 1 dan is het de eerste uitvoering en voert de ESP32 de initialisatiefase uit, anders wordt deze fase overgeslagen.

Om de ESP32 wakker te maken zijn er verschillende mogelijkheden:

  • Timer wake-up: de code berekent de duur van de diepe slaap voordat u gaat slapen. Dit wordt gebruikt om de tijd (elke 1, 2, 3 of 5 minuten) of de weergegevens (elke 3 of 4 uur) van de aanhalingstekens en heilige van de dag (elke 24 uur) bij te werken
  • Interrupt wake-up: de accelerometer stuurt een signaal dat wordt gebruikt om de ESP32 wakker te maken. Dit wordt gebruikt om een oriëntatieverandering te detecteren en de displays bij te werken
  • Touch sensor wake-up: de ESP32 is uitgerust met verschillende pinnen die als aanraaksensoren fungeren, maar ze kunnen niet worden gebruikt met timer wake-up, dus ik heb deze niet gebruikt.

Er zijn andere programmeertrucs elders in de code, om de tijd nauwkeurig te houden en tegelijkertijd energie te besparen (dwz sluit niet elke minuut de NTP-server aan), om de accenten te verwijderen die niet worden ondersteund door de Adafruit GFX-bibliotheek, om te voorkomen dat een scherm wordt bijgewerkt als het is niet nodig om de parameters van de accelerometer in te stellen, speciaal voor het ontwaken met onderbrekingen, de tijd om te slapen nauwkeurig te berekenen in geval van ontwaken door de timer, vermijd het gebruik van de seriële console als deze niet is aangesloten op de IDE (om weer energie te besparen), ontkoppel de wifi wanneer niet nodig, enz … en de code staat vol met opmerkingen die de functies helpen begrijpen.

Bedankt voor het lezen van deze Instructable (mijn allereerste). Ik hoop dat je het leuk vindt en geniet van het maken van dit weerstation

Sensoren wedstrijd
Sensoren wedstrijd

Tweede plaats in de sensorwedstrijd

Aanbevolen: