Innehållsförteckning:

Ännu en smart väderstation, men : 6 steg (med bilder)
Ännu en smart väderstation, men : 6 steg (med bilder)

Video: Ännu en smart väderstation, men : 6 steg (med bilder)

Video: Ännu en smart väderstation, men : 6 steg (med bilder)
Video: Настоящая мужская тумба. 2024, Juni
Anonim
Image
Image
Ännu en smart väderstation, men …
Ännu en smart väderstation, men …
Ännu en smart väderstation, men …
Ännu en smart väderstation, men …
Ännu en smart väderstation, men …
Ännu en smart väderstation, men …

OK, jag vet att det finns så många sådana väderstationer tillgängliga överallt, men ta några minuter att se skillnaden …

  • Låg effekt
  • 2 e-papper displayer …
  • men 10 olika skärmar!
  • ESP32 baserat
  • accelerometer och temperatur / fuktighetssensorer
  • Wifi -uppdatering
  • 3D -tryckt fodral

och många andra användbara knep …

Huvudidén är att visa olika information på båda skärmarna beroende på lådans riktning. Lådan är i form av en parallellpipedisk låda, en gatsten, med ett slags bälte som fungerar som en fot.

Tillbehör

Som du kan se består systemet av 2 e-pappersskärmar och en 3D-tryckt låda. Men det finns många saker i det:

  • En ESP32
  • En MPU6050 accelerometer
  • En DHT22 -sensor
  • Ett LiPo -batteri
  • Ett kretskort för att ansluta det hela
  • Hemmagjorda duPont -trådar

och en Wi-Fi-anslutning. Faktum är att 3 nätverk deklareras, systemet testar dem en efter en tills det lyckas ansluta.

Steg 1: Varför en annan väderstation?

Varför en annan väderstation?
Varför en annan väderstation?
Varför en annan väderstation?
Varför en annan väderstation?
Varför en annan väderstation?
Varför en annan väderstation?
Varför en annan väderstation?
Varför en annan väderstation?

Tanken är att visa olika typer av information på båda skärmarna beroende på lådans orientering. Fodralet är i form av en parallellpipedisk låda, en beläggningssten, med ett slags bälte som fungerar som ett stöd för att få det att stå.

Acceleratorn detekterar rörelse och orientering och utlöser displayer.

För att spara energi valde jag e-pappersskärmarna (se referenser nedan) som håller displayen även om de inte längre är drivna. På samma sätt för ESP32 valde jag Lolin32-modulen (känd för sin sparsamhet) och jag var tvungen att lära mig att hantera djup sömn och väckningen vid avbrott som genereras av accelerometern.

Skärmarna är anslutna via SPI, jag sökte ganska mycket innan jag hittade rätt stift för att ansluta dem till ESP32, med vetskap om att jag också behöver en I2C för accelerometern, en stift för att läsa DHT22 och 2 andra för batterispänningsmätningen. ESP32 är nästan fulladdat! Att veta att vissa stift är skrivskyddade (jag använde dem för DHT-sensorn), andra kan inte användas tillsammans med Wifi, det var lite komplicerat att hitta rätt konfiguration.

Lådan kan orienteras i 4 riktningar, plus platt. Sammantaget gör det 4*2+2 = 10 möjliga typer av information att visa med endast 2 skärmar. Så det låter dig visa många saker:

  • Datumet och dagens helgon
  • Den aktuella tiden
  • Dagens väderprognos
  • Väderprognoser för de kommande timmarna
  • Väderprognoser för de kommande dagarna
  • Batteriets laddningsnivå
  • Och eftersom jag fortfarande hade plats, ett slumpmässigt citat från en specialiserad webbplats.

Steg 2: Vad behöver du?

Vad behöver du ?
Vad behöver du ?
Vad behöver du ?
Vad behöver du ?
Vad behöver du ?
Vad behöver du ?
  • ESP32: Lolin32 -modul (mycket låg effekt, utrustad med batterikontakt, kan ladda batteriet via USB plus)
  • 2 skärmar: 4,2 tum och 2,9 tum. Jag valde modellerna från Good Display -butiken.
  • DHT22 -sensor
  • MCU6050 accelerometer - gyrometer I2C sensor
  • Ett LiPo -batteri
  • För batterispänningsmätning: 2 10k motstånd, 1 100k motstånd, 1 100nF kondensator, 1 MOSFET transistor
  • Löd- och lödkolv, kretskort
  • Tillgång till en 3D -skrivare för fodralet

Den bifogade bilden visar positionen för alla komponenter på kretskortet: Jag var tvungen att spara utrymme för att passa i fodralet, vilket inte borde vara för stort.

För att få väderdata måste du också registrera dig på väder -API: erna och placera dina nycklar på rätt platser i filen "Variables.h" (se nedan).

Väderwebbplatser:

  • apixu
  • accuweather

Steg 3: Detta projekt fick mig att tänka och lära mig mycket …

Detta projekt fick mig att tänka och lära mig mycket …
Detta projekt fick mig att tänka och lära mig mycket …
Detta projekt fick mig att tänka och lära mig mycket …
Detta projekt fick mig att tänka och lära mig mycket …
Detta projekt fick mig att tänka och lära mig mycket …
Detta projekt fick mig att tänka och lära mig mycket …

Det här systemet var tänkt att ha låg effekt, så att du inte behöver ladda batteriet varje kväll … För att spara energi valde jag e-pappersskärmar som håller displayen även om de inte längre är drivna. På samma sätt för ESP32 valde jag Lolin32-modulen (känd för sin sparsamhet) och jag var tvungen att lära mig att hantera djup sömn och väckarklockan vid avbrott som genereras av accelerometern.

Lådan kan orienteras i 4 riktningar, mer platt. Sammantaget gör det 4*2+2 = 10 möjliga typer av information att visa. Så det gör att du kan göra många saker: datumet och dagens helgon, tiden, dagens väderprognos, väderprognoser för de kommande timmarna eller dagarna, batteriladdningsnivån och ett slumpmässigt citat från en specialiserad webbplats.

Det är mycket att leta efter på Internet, och som du vet: WiFi är fienden till energibesparingar …

Så vi måste hantera anslutningen för att kunna visa aktuell information men utan att lägga alltför mycket tid på att ansluta. Ett annat ganska komplext problem: att hålla en ganska exakt tid. Jag behöver ingen RTC eftersom jag kan hitta tiden på internet, men ESP32: s interna klocka driver ganska mycket, särskilt under sömnperioder. Jag var tvungen att hitta ett sätt att hålla mig tillräckligt noggrann i väntan på att återställa klockan via internet. Jag synkroniserar det på internet varje timme.

Så det finns en avvägning mellan autonomi (frekvensen av internetanslutningar) och noggrannheten i den information som visas.

Ett annat problem som ska lösas är minnet. När ESP32 är i djup sömn förloras minnet, förutom vad som kallas RTC RAM. Detta minne är 4 MB brett, varav endast 2 kan användas för programmet. I detta minne måste jag lagra de olika programvariablerna som måste sparas från en körning till nästa, efter en vilofas: väderprognoser, tid och datum, ikonfilnamn, citat, etc. Jag var tvungen att lära mig hantera det.

På tal om ikoner, de lagras i SPIFFS, ESP32 -filsystemet. Efter stängningen av gratis Wunderground -väder -API fick jag leta efter andra gratis väderdataleverantörer. Jag valde två: en för dagens väder, med 12 timmars prognoser och en annan för flerdagarsprognoser. Ikonerna är inte desamma, så det gav mig två nya problem:

  • Välj en ikonuppsättning
  • Matcha dessa ikoner med prognoskoderna för de två webbplatserna

Denna korrespondens har också lagrats i RTC RAM så att den inte behöver laddas om varje gång.

Sista problemet med ikoner. Omöjligt att lagra dem alla i SPIFFS. Utrymmet är för litet för alla mina filer. Det var nödvändigt att göra bildkomprimering. Jag skrev ett skript i Python som läser mina ikonfiler och komprimerar dem till RLE och sedan lagrar de komprimerade filerna i SPIFFS. Där höll det.

Men biblioteket för e-papper visar bara filer av BMP-typ, inte komprimerade bilder. Så jag var tvungen att skriva en extra funktion för att kunna visa mina ikoner från dessa komprimerade filer.

Data som läses på internet är ofta i json -format: väderdata, Saint of the day. Jag använder det (stora) arduinoJson -biblioteket för detta. Men citat är inte så. Jag tar dem från en dedikerad webbplats, så jag måste läsa dem genom att titta direkt på innehållet på webbsidan. Jag var tvungen att skriva en specifik kod för det. Varje dag, runt midnatt, går programmet till den här webbplatsen och läser cirka tio slumpmässiga citat och lagrar dem i RTC RAM. En visas slumpmässigt bland dem när huset är orienterat stor skärm uppåt.

Jag passerar dig problemet med visning av accenttecken (förlåt, men citat är på franska)….

När den lilla skärmen är uppe visas batterispänningen, med en ritning för att bättre se den återstående nivån. Det var nödvändigt att göra en elektronisk montering för att läsa batterispänningen. Eftersom mätningen inte borde ladda ur batteriet använde jag ett diagram som hittades på internet, som använder en MOSFET -transistor som omkopplare för att först kunna förbruka ström när mätningen görs.

För att kunna göra denna krets och passa allt i lådan, som jag ville ha minsta möjliga, var jag tvungen att göra ett kretskort för att ansluta alla komponenter i systemet. Detta är min första PCB. Jag hade tur eftersom allt fungerade bra första gången på den här sidan …

Se implantationskarta: "förbjudna zonen" är ett område reserverat för anslutning av USB -kabeln. Lolin32 -modulen låter dig ladda batteriet via USB: batteriet laddas om USB -kabeln är ansluten och modulen fungerar samtidigt.

Sista punkten: teckensnitt. Av olika storlekar, fet eller inte, måste de skapas och lagras. Adafruit GFX -biblioteket tar hand om det mycket väl, när du har installerat teckensnittsfilerna i rätt katalog. För att skapa filerna använde jag Font Converter -webbplatsen, mycket bekvämt!

Se till att du väljer:

  • Förhandsvisning: TFT 2,4"
  • Bibliotekets version: Adafruit GFX Font

Så för att sammanfatta: ett stort projekt, som gjorde att jag fick lära mig mycket

Steg 4: Använda e-pappersdisplayer

Använda e-pappersdisplayer
Använda e-pappersdisplayer

Den största nackdelen med dessa skärmar är tydligt synlig på videon: uppdateringen av displayen tar en eller två sekunder och görs genom att blinka (alternativ visning av de normala och inverterade versionerna av de två skärmarna). Detta är acceptabelt för väderinformation eftersom jag inte uppdaterar det särskilt ofta (varje timme förutom en ändring av rutans orientering). Men inte för tiden. Det är därför (och för att begränsa förbrukningen) jag fortfarande använder HH: MM -displayen (inte sekunderna).

Så jag var tvungen att leta efter ett annat sätt att uppdatera displayen. Dessa skärmar (några av dem) stöder en delvis uppdatering (tillämpas antingen på ett område på skärmen eller på hela skärmen …) men det var inte bra för mig eftersom min stora skärm (som visar tiden) håller spöken i pixlarna som byts ut. Till exempel, när du passerar från 10:12 till 10:13, är '2' lite synlig inuti '3', och det blir ännu mer synligt efter '4', '5', etc. Jag skulle vilja att påpeka att så är fallet för min skärm: Jag diskuterade det med författaren till e-paper display biblioteket GxEPD2 som berättade för mig att han inte observerade detta fenomen med sina egna skärmar. Vi försökte ändra parametrarna utan att lyckas jaga spöken.

Så vi var tvungna att hitta en annan lösning: Jag föreslog att göra en delvis dubbel förfriskning, vilket löste problemet (åtminstone är det tillfredsställande för mig). Timmarna går utan att skärmen blinkar och det finns inga spöken. Ändringen är dock inte omedelbar: det tar lite mer än en sekund att ändra tiden.

Steg 5: Gör det

Gör det
Gör det
Gör det
Gör det
Gör det
Gör det
Gör det
Gör det

För att säkerställa att ingenting rör sig inuti när orienteringen ändras, limmas de olika komponenterna (displayer, elektroniska moduler, kretskort, batterier) med en limpistol. För att dra ledningarna under kretskortet installerade jag det på ben gjorda med distanser, detsamma gäller batteriet.

Snart installerar jag en extern USB -mikrofonkontakt så jag slipper öppna höljet för att ladda batteriet.

Kanske är jag också intresserad av att uppdatera av OTA för att göra allt perfekt….

Steg 6: Koden och filerna

Image
Image

Tre arkivfiler tillhandahålls:

  • Weather station.zip: Arduino -koden, för att ladda upp med Arduino IDE
  • Boite ecran.zip: CAD- och 3D -skrivarfilerna för fodralet
  • data.zip: filerna som ska laddas upp i SPIFFS för ESP32.

Om du inte vet hur du laddar upp filer till ESP32: s SPIFFS, läs bara den här självstudien, som presenterar ett mycket användbart plugin och hur du använder det i Arduino IDE.

Programmeringen av djup sömn skiljer sig ganska mycket från standardprogrammeringen för en Arduino. För ESP32 betyder det att ESP32 vaknar och utför installationen och sedan somnar. Så slingfunktionen är tom och körs aldrig.

Vissa initialiseringsfaser måste bara köras en gång vid den första körningen (som att få tid, väderdata, citat, etc.), så ESP32 behöver veta om den aktuella väckningen är den första eller inte: för det är det lösningen är att lagra en variabel i RTC RAM (som förblir aktiv även under djupa sömnfaser) som ökas vid varje väckning. Om den är lika med 1 är det den första körningen och ESP32 kör initialiseringsfasen, annars hoppas denna fas över.

För att väcka ESP32 finns det flera möjligheter:

  • Timer wake-up: koden beräknar varaktigheten av den djupa sömnen innan du somnar. Detta används för att uppdatera tiden (var 1, 2, 3 eller 5 minuter) eller väderdata (var 3 eller 4 timmar) för citat och helgon (var 24: e timme)
  • Avbryt väckning: accelerometern skickar en signal som används för att väcka ESP32. Detta används för att upptäcka en orienteringsändring och uppdatera bildskärmarna
  • Touch-sensorn väckning: ESP32 är utrustad med flera stift som fungerar som touch-sensorer, men de kan inte användas med timer-väckning, så jag använde inte detta.

Det finns andra programmeringstrick någon annanstans i koden, för att hålla tiden exakt samtidigt som du sparar energi (dvs. inte ansluta NTP -servern varje minut), för att ta bort accenter som inte stöds av Adafruit GFX -biblioteket, för att undvika att uppdatera en display om det är inte nödvändigt, för att ställa in accelerometerparametrarna speciellt för avbrott väckning, exakt beräkna tiden att sova vid timer väckning, undvik att använda seriekonsolen om den inte är ansluten till IDE (för att spara energi igen), koppla bort wifi när det inte behövs osv … och koden är full av kommentarer som hjälper till att förstå funktionerna.

Tack för att du läste denna Instructable (min allra första). Jag hoppas att du kommer att gilla det och njuta av att göra denna väderstation

Sensors tävling
Sensors tävling

Tvåa i sensortävlingen

Rekommenderad: