Indholdsfortegnelse:

Endnu en smart vejrstation, men : 6 trin (med billeder)
Endnu en smart vejrstation, men : 6 trin (med billeder)

Video: Endnu en smart vejrstation, men : 6 trin (med billeder)

Video: Endnu en smart vejrstation, men : 6 trin (med billeder)
Video: Garmin Edge 540 vs 840 vs 1040 vs Explore 2 2024, Juni
Anonim
Image
Image
Endnu en smart vejrstation, men …
Endnu en smart vejrstation, men …
Endnu en smart vejrstation, men …
Endnu en smart vejrstation, men …
Endnu en smart vejrstation, men …
Endnu en smart vejrstation, men …

OK, jeg ved, at der er så mange sådanne vejrstationer tilgængelige overalt, men tag et par minutter at se forskellen …

  • Lav strøm
  • 2 e-papir displays …
  • men 10 forskellige skærme!
  • ESP32 baseret
  • accelerometer og temperatur / fugtighedsfølere
  • Wifi opdatering
  • 3D -trykt sag

og mange andre nyttige tricks …

Hovedideen er at vise forskellige oplysninger på begge skærme afhængigt af kassen. Sagen er i form af en parallelepipedisk kasse, en belægningssten, med en slags bælte, der fungerer som en fod.

Forbrugsvarer

Som du kan se, består systemet af 2 e-papirskærme og en 3D-trykt boks. Men der er mange ting i det:

  • En ESP32
  • Et MPU6050 accelerometer
  • En DHT22 sensor
  • Et LiPo batteri
  • Et printkort til at forbinde det hele
  • Hjemmelavede duPont -tråde

og en Wi-Fi-forbindelse. Faktisk erklæres 3 netværk, systemet tester dem en efter en, indtil det lykkes at oprette forbindelse.

Trin 1: Hvorfor endnu en vejrstation?

Hvorfor en anden vejrstation?
Hvorfor en anden vejrstation?
Hvorfor en anden vejrstation?
Hvorfor en anden vejrstation?
Hvorfor en anden vejrstation?
Hvorfor en anden vejrstation?
Hvorfor en anden vejrstation?
Hvorfor en anden vejrstation?

Ideen er at vise forskellige former for information på begge skærme afhængigt af kassen. Sagen er i form af en parallelepipedisk kasse, en belægningssten, med en slags bælte, der fungerer som en støtte for at få den til at stå.

Accelerometeret registrerer bevægelse og retning og udløser displays.

For at spare energi valgte jeg de e-papirskærme (se referencer herunder), der bevarer displayet, selvom de ikke længere er strømforsynede. På samme måde for ESP32 valgte jeg Lolin32-modulet (kendt for sin nøjsomhed), og jeg var nødt til at lære at håndtere dyb søvn og vågnen ved interrupt genereret af accelerometeret.

Skærmene er forbundet via SPI, jeg søgte en del, før jeg fandt de rigtige stifter til at forbinde dem med ESP32, vel vidende at jeg også har brug for en I2C til accelerometeret, en pin til at læse DHT22 og 2 andre til måling af batterispænding. ESP32 er næsten fuldt opladet! Da jeg vidste, at nogle stifter er skrivebeskyttede (jeg brugte dem til DHT-sensoren), andre ikke kan bruges sammen med Wifi, var det lidt kompliceret at finde den rigtige konfiguration.

Kassen kan orienteres i 4 retninger, plus flad. Alt i alt gør det 4*2+2 = 10 mulige informationstyper at vise med kun 2 skærme. Så det giver dig mulighed for at vise mange ting:

  • Datoen og dagens helgen
  • Den aktuelle tid
  • Dagens vejrudsigt
  • Vejrudsigter for de kommende timer
  • Vejrudsigter for de kommende dage
  • Batteriets opladningsniveau
  • Og da jeg stadig havde plads, et tilfældigt citat fra et specialiseret websted.

Trin 2: Hvad har du brug for?

Hvad har du brug for ?
Hvad har du brug for ?
Hvad har du brug for ?
Hvad har du brug for ?
Hvad har du brug for ?
Hvad har du brug for ?
  • ESP32: Lolin32 -modul (meget lav strøm, udstyret med et batteristik, kan oplade batteriet via USB plus)
  • 2 skærme: 4,2 tommer og 2,9 tommer. Jeg valgte modellerne fra Good Display -butikken.
  • DHT22 sensor
  • MCU6050 accelerometer - gyrometer I2C sensor
  • Et LiPo batteri
  • Til måling af batterispænding: 2 10k modstande, 1 100k modstand, 1 100nF kondensator, 1 MOSFET transistor
  • Lodde- og loddejern, printkort
  • Adgang til en 3D -printer til sagen

Det vedhæftede billede viser placeringen af alle komponenterne på printkortet: Jeg var nødt til at spare plads for at passe i etuiet, som ikke skulle være for stort.

For at få vejrdataene skal du også registrere dig på vejr -API'erne og placere dine nøgler de rigtige steder i filen 'Variables.h' (se nedenfor).

Vejrwebsteder:

  • apixu
  • accuweather

Trin 3: Dette projekt fik mig til at tænke og lære meget …

Dette projekt fik mig til at tænke og lære meget …
Dette projekt fik mig til at tænke og lære meget …
Dette projekt fik mig til at tænke og lære meget …
Dette projekt fik mig til at tænke og lære meget …
Dette projekt fik mig til at tænke og lære meget …
Dette projekt fik mig til at tænke og lære meget …

Dette system skulle have lav strøm, så du ikke behøver at oplade batteriet hver nat … For at spare energi valgte jeg de e-papirskærme, der bevarer displayet, selvom de ikke længere er strømforsynede. På samme måde for ESP32 valgte jeg Lolin32-modulet (kendt for sin nøjsomhed), og jeg var nødt til at lære at håndtere dyb søvn og vågneopkaldet ved afbrydelse genereret af accelerometeret.

Kassen kan orienteres i 4 retninger, mere flad. Alt i alt gør det 4*2+2 = 10 mulige informationstyper at vise. Så det giver dig mulighed for at gøre mange ting: Datoen og dagens helgen, tidspunktet, dagens vejrudsigt, vejrudsigter for de kommende timer eller dage, batteriets opladningsniveau og et tilfældigt tilbud fra et specialiseret websted.

Det er meget at kigge efter på Internettet, og som du ved: WiFi er fjenden til energibesparelse …

Så vi er nødt til at administrere forbindelsen for at vise opdaterede oplysninger, men uden at bruge for meget tid på at oprette forbindelse. Et andet ret komplekst problem: at holde et ret præcist tidspunkt. Jeg har ikke brug for en RTC, da jeg kan finde tiden på internettet, men ESP32s interne ur driver en del, især i søvnperioder. Jeg var nødt til at finde en måde at forblive præcis nok, mens jeg ventede på at nulstille uret via internettet. Jeg synkroniserer det på internettet hver time.

Så der er en afvejning mellem autonomi (hyppigheden af internetforbindelser) og nøjagtigheden af de viste oplysninger.

Et andet problem, der skal løses, er hukommelsen. Når ESP32 er i dyb søvn, går hukommelsen tabt, bortset fra det, der kaldes RTC RAM. Denne hukommelse er 4 MB bred, hvoraf kun 2 kan bruges til programmet. I denne hukommelse skal jeg gemme de forskellige programvariabler, der skal bevares fra den ene udførelse til den næste efter en søvnfase: vejrudsigter, tid og dato, ikonfilnavne, citater osv. Jeg var nødt til at lære at håndtere det.

Når vi taler om ikoner, gemmes de i SPIFFS, ESP32 -filsystemet. Efter lukningen af den gratis Wunderground -vejr -API måtte jeg lede efter andre gratis vejrdataudbydere. Jeg valgte to: en til den aktuelle dags vejr, med 12 timers prognoser og en anden til flerdagsprognoser. Ikonerne er ikke de samme, så det forårsagede mig to nye problemer:

  • Vælg et ikon sæt
  • Match disse ikoner med prognosekoderne for de 2 websteder

Denne korrespondance er også blevet gemt i RTC RAM, så den ikke skal genindlæses hver gang.

Sidste problem med ikoner. Umuligt at gemme dem alle i SPIFFS. Pladsen er for lille til alle mine filer. Det var nødvendigt at lave billedkomprimering. Jeg skrev et script i Python, der læser mine ikonfiler og komprimerer dem til RLE, og derefter gemmer de komprimerede filer i SPIFFS. Der holdt det.

Men e-paper display biblioteket tager kun filer af BMP-type, ikke komprimerede billeder. Så jeg var nødt til at skrive en ekstra funktion for at kunne vise mine ikoner fra disse komprimerede filer.

De data, der læses på internettet, er ofte i json -format: vejrdata, Saint of the day. Jeg bruger det (store) arduinoJson -bibliotek til dette. Men citater er ikke sådan. Jeg tager dem fra et dedikeret websted, så jeg er nødt til at læse dem ved at kigge direkte ind på webstedets indhold. Jeg var nødt til at skrive en bestemt kode til det. Hver dag, omkring midnat, går programmet til dette websted og læser omkring ti tilfældige citater og gemmer dem i RTC RAM. En vises tilfældigt blandt dem, når huset er orienteret stor skærm opad.

Jeg sender dig problemet med visning af tegn med accent (desværre, men citater er på fransk)….

Når den lille skærm er oppe, vises batterispændingen med en tegning for bedre at se det resterende niveau. Det var nødvendigt at lave en elektronisk samling for at aflæse batterispændingen. Da målingen ikke burde aflade batteriet, brugte jeg et diagram fundet på internettet, som bruger en MOSFET -transistor som switch for kun at forbruge strøm, når målingen er foretaget.

For at kunne lave dette kredsløb og passe alt ind i boksen, som jeg ville have mindst mulig, måtte jeg lave et printkort for at forbinde alle systemets komponenter. Dette er mit første PCB. Jeg var heldig, fordi alt fungerede godt første gang på denne side …

Se implantationskort: "forbudt zone" er et område, der er forbeholdt tilslutning af USB -kablet. Lolin32 -modulet giver dig mulighed for at genoplade batteriet via USB: batteriet oplades, hvis USB -kablet er tilsluttet, og modulet fungerer samtidigt.

Sidste punkt: skrifttyperne. Af forskellige størrelser, fed eller ej, skulle de oprettes og gemmes. Adafruit GFX -biblioteket tager sig meget godt af det, når du har installeret skrifttypefilerne i det rigtige bibliotek. For at oprette filerne brugte jeg Font Converter -webstedet, meget praktisk!

Sørg for at vælge:

  • Visningsvisning: TFT 2,4"
  • Bibliotekversion: Adafruit GFX Font

Så for at opsummere: et stort projekt, som tillod mig at lære en masse ting

Trin 4: Brug af E-papirdisplays

Brug af e-papirdisplays
Brug af e-papirdisplays

Den største ulempe ved disse skærme er tydeligt synlig på videoen: Opdateringen af displayet tager et eller to sekunder og udføres ved at blinke (alternativ visning af de normale og omvendte versioner af de to skærme). Dette er acceptabelt for vejrinformation, fordi jeg ikke opdaterer det særlig ofte (hver time bortset fra en ændring af kassen). Men ikke for tiden. Derfor (og for at begrænse forbruget) bruger jeg stadig HH: MM -displayet (ikke sekunderne).

Så jeg var nødt til at lede efter en anden måde at opdatere skærmen på. Disse skærme (nogle af dem) understøtter en delvis opdatering (anvendes enten på et område af skærmen eller på hele skærmen …), men det var ikke godt for mig, fordi min store skærm (som viser tiden) holder spøgelser i pixel der udskiftes. For eksempel, når man passerer fra 10:12 til 10:13, er '2' lidt synlig inde i '3', og den bliver endnu mere synlig efter '4', '5' osv. Jeg vil gerne at påpege, at dette er tilfældet for min skærm: Jeg diskuterede det med forfatteren af e-paper display biblioteket GxEPD2, der fortalte mig, at han ikke observerede dette fænomen med sine egne skærme. Vi forsøgte at ændre parametrene uden at det er lykkedes at jagte spøgelser.

Så vi var nødt til at finde en anden løsning: Jeg foreslog at lave en delvis dobbelt forfriskning, som løste problemet (det er i hvert fald tilfredsstillende for mig). Timerne går uden at skærmen blinker, og der er ingen spøgelser. Skiftet er dog ikke umiddelbart: Det tager lidt mere end et sekund at ændre tiden.

Trin 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

For at sikre, at intet bevæger sig indeni, når orienteringen ændres, limes de forskellige komponenter (displays, elektroniske moduler, printkort, batterier) med en limpistol. For at føre ledningerne under printkortet installerede jeg det på ben lavet med afstandsstykker, det samme gælder for batteriet.

Snart installerer jeg et eksternt USB -mikrofonstik, så jeg ikke behøver at åbne etuiet for at genoplade batteriet.

Måske vil jeg også være interesseret i at opdatere af OTA for at perfektionere det hele ….

Trin 6: Koden og filerne

Image
Image

Tre arkivfiler leveres:

  • Weather station.zip: Arduino -koden, der skal uploades ved hjælp af Arduino IDE
  • Boite ecran.zip: CAD- og 3D -printerfilerne til sagen
  • data.zip: de filer, der skal uploades i SPIFFS i ESP32.

Hvis du ikke ved, hvordan du uploader filer til ESP32's SPIFFS, skal du bare læse denne vejledning, der præsenterer et meget nyttigt plugin, og hvordan du bruger det i Arduino IDE.

Programmeringen af dyb søvn er ganske anderledes end standardprogrammeringen af en Arduino. For ESP32 betyder det, at ESP32 vågner og udfører opsætningen og derefter går i dvale. Så loop -funktionen er tom og udføres aldrig.

En eller anden initialiseringsfase må kun køres én gang ved den første udførelse (f.eks. At få tiden, vejrdata, citater osv.), Så ESP32 skal vide, om den aktuelle opvågning er den første eller ej: for det er løsning er at gemme en variabel i RTC RAM (som forbliver aktiv, selv under dybe søvnfaser), som øges ved hver vågning. Hvis det er lig med 1, er det den første eksekvering, og ESP32 kører initialiseringsfasen, ellers springes denne fase over.

For at vække ESP32 er der flere muligheder:

  • Timer wake-up: koden beregner varigheden af den dybe søvn, inden du går i seng. Dette bruges til at opdatere tidspunktet (hver 1, 2, 3 eller 5 minutter) eller vejrdataene (hver 3. eller 4. time) for tilbud og helgen på dagen (hver 24. time)
  • Afbryd vågning: accelerometeret sender et signal, der bruges til at vække ESP32. Dette bruges til at registrere en orienteringsændring og opdatere skærmene
  • Touch-sensor wake-up: ESP32 er udstyret med flere ben, der fungerer som berøringssensorer, men de kan ikke bruges med timer-wakeup, så jeg brugte ikke dette.

Der er andre programmeringstricks andre steder i koden, for at holde tiden nøjagtig og samtidig spare energi (dvs. ikke tilslutte NTP -serveren hvert minut), for at fjerne accenter, der ikke understøttes af Adafruit GFX -biblioteket, for at undgå at opdatere et display, hvis det er ikke nødvendigt at indstille accelerometerparametrene specielt til afbrydelse af vågning, nøjagtigt beregne den tid, der skal til at sove i tilfælde af timervækning, undgå at bruge seriekonsollen, hvis den ikke er tilsluttet IDE (for at spare energi igen), afbryd forbindelsen wifi, når det ikke er nødvendigt osv … og koden er fuld af kommentarer, der hjælper med at forstå funktionerne.

Tak fordi du læste denne Instructable (min allerførste). Jeg håber, at du kan lide det og nyde at lave denne vejrstation

Sensors konkurrence
Sensors konkurrence

Nummer to i sensorkonkurrencen

Anbefalede: