Indholdsfortegnelse:

En ESP-Now Home Weather Station: 9 trin (med billeder)
En ESP-Now Home Weather Station: 9 trin (med billeder)

Video: En ESP-Now Home Weather Station: 9 trin (med billeder)

Video: En ESP-Now Home Weather Station: 9 trin (med billeder)
Video: Defendant collapses in court after guilty verdict 2024, November
Anonim
En ESP-Now Home Weather Station
En ESP-Now Home Weather Station

Jeg ville have en hjemmevejrstation i et godt stykke tid, og en som alle i familien let kunne kontrollere for temperatur og fugtighed. Ud over at overvåge de ydre forhold ville jeg også overvåge bestemte rum i huset og mit garageværksted. Det ville give os besked, når det er et godt tidspunkt at lufte huset eller køre affugteren (det regner meget her om vinteren). Det, jeg har oprettet, er et ESP-Now baseret sensorsystem, der rapporterer til en lokal webserver, som alle kan kontrollere fra deres computer eller telefon. Til telefonen skrev jeg som en simpel Android -app for at gøre det endnu lettere.

Trin 1: Designdetaljer

Design detaljer
Design detaljer

Jeg ville have forskellige sensorstationer, jeg kunne placere forskellige steder, og få dem til at rapportere tilbage til en hovedstation (eller hub), der ville gemme oplysningerne. Efter at have prøvet forskellige ideer besluttede jeg at bruge Espressifs ESP-Now-protokol, da det muliggjorde hurtig kommunikation direkte mellem enheder. Du kan læse lidt om ESP-Now her, og denne GitHub-repo var en stor del af min inspiration.

Det første billede viser systemets layout. Hver sensor rapporterer sine målinger til en gateway -enhed, der videresender dataene til hovedserveren ved hjælp af en seriel forbindelse. Grunden til dette er, at ESP-Now-protokollen ikke kan være aktiv samtidig med WIFI-forbindelsen. For at en bruger kan få adgang til websiden, skal WIFI være tændt hele tiden, og det gør det derefter umuligt at bruge ESP-Now-kommunikationen på den samme enhed. Selvom gateway-enheden skal være en Espressif-baseret enhed (i stand til ESP-Now), kan hovedserveren være enhver enhed, der kan køre en webside.

Nogle sensorstationer ville køre batterier (eller solopladede batterier), og andre ville simpelthen have strøm. Jeg ville dog have, at alle brugte så lidt strøm som muligt, og det er her, "deepsleep" -funktionen, der er tilgængelig for ESP8266 og ESP32 -enheder, er yderst nyttig. Sensorstationerne vågner med jævne mellemrum, tager målinger og sender dem til gatewayenheden og går i dvale i en forudprogrammeret periode. Deres vågne periode på kun cirka 300 ms hvert 5. minut (i mit tilfælde) reducerer deres strømforbrug betydeligt.

Trin 2: Sensorer

Sensorer
Sensorer
Sensorer
Sensorer

Der er forskellige sensorer at vælge imellem til måling af miljøparametre. Jeg besluttede kun at holde mig til I2C -kommunikationsdygtige sensorer, da det tillod hurtige målinger og ville fungere på alle de enheder, jeg havde. I stedet for at arbejde med IC'er direkte, søgte jeg efter moduler, der havde samme pin-outs, der var klar til brug, for at forenkle mine designs. Jeg startede med kun at ville måle temperatur og fugtighed og valgte derfor et SI7021 -baseret modul. Senere ville jeg have en sensor, der også kunne måle tryk, og besluttede mig for at prøve de BME280 -baserede sensormoduler. Nogle steder ville jeg endda overvåge lysniveauerne, og BH1750 -modulet var ideelt til dette som et separat sensormodul. Jeg købte mine sensormoduler fra ebay, og det er de moduler, jeg modtog:

  • BME280 (GY-BMP/E280), måler temperatur, fugtighed og tryk
  • SI7021 (GY-21), måler temperatur og fugtighed
  • BH1750 (GY-302), måler lys

Der findes to stilarter af GY-BMP/E280 PCB-modulerne. Begge deler den samme pin ud for ben 1 til 4. Et modul har to ekstra ben, CSB og SDO. Disse to ben er tilsluttet på forhånd med 4-benet versionen af modulet. Niveauet på SDO -pin bestemmer I2C -adressen (Ground = standard på 0x76, VCC = 0x77). CSB -stiften skal tilsluttes VCC for at vælge I2C -grænsefladen. Jeg foretrækker 4 -pins modulet, da det er klar til brug, som det er til mit formål.

Generelt er disse moduler meget bekvemme at bruge, da de allerede har pull-up-modstande installeret til kommunikationslinjerne og alle kører på 3,3V, så de er kompatible med ESP8266-baserede kort. Bemærk, at benene på disse sensor -IC'er generelt ikke er 5V -tolerante, så grænseflade dem direkte med noget som en Arduino Uno kan beskadige dem permanent.

Trin 3: Sensorstationer

Sensorstationer
Sensorstationer

Som nævnt vil sensorstationerne alle være Espressif-enheder, der bruger ESP-Now-kommunikationsprotokollen. Fra tidligere projekter og eksperimenter havde jeg flere forskellige enheder til rådighed til at udføre mine første tests og indarbejde dem i det endelige design. Jeg havde følgende enheder til rådighed:

  • to ESP-01 moduler
  • to Wemos D1 mini udviklingsplader
  • et Lolin ESP8266 udviklingsbræt
  • et ESP12E serielt WIFI kit bord
  • et GOOUUU ESP32 -kort (et 38 -pin udviklingsbord)

Jeg havde også et Wemos D1 R2 -udviklingsbord, men der var problemer med det, der ikke tillod det at vågne op fra dyb søvn, og som en gateway -enhed ville det gå ned og ikke genstarte korrekt. Jeg reparerede det senere, og det blev en del af projektet Garage Door opener. For at "deepsleep" kan fungere, skal RST -stiften på ESP8266 sluttes til GPIO16 -stiften, så sleep -timeren kan vække enheden. Ideelt set bør denne forbindelse foretages med en Schottky-diode (katode til GPIO16), så den manuelle nulstilling via USB-TLL-forbindelsen under programmering stadig fungerer. Imidlertid kan en lav værdi (300-ish Ohm) modstand eller endda direkte ledningsforbindelse stadig være vellykket.

ESP-01-moduler giver ikke let adgang til GPIO16-stiften, og man skal lodde direkte til IC. Dette er ikke en simpel opgave, og jeg vil ikke anbefale dette til alle. ESP12E serielt WIFI kit bord var lidt af en nyhed og krævede en del ændringer for at det kunne være nyttigt til mit formål. De nemmeste tavler at bruge var Wemos D1 mini -tavler og Lolin -tavlen. ESP32 -enheder kræver ingen ændringer for at deepsleep kan fungere. Andreas Spiess har en god Instructable om dette.

Trin 4: ESP-01 sensorstation

ESP-01 sensorstation
ESP-01 sensorstation
ESP-01 sensorstation
ESP-01 sensorstation
ESP-01 sensorstation
ESP-01 sensorstation

På alle sensorstationer er sensormodulerne monteret lodret for at reducere mængden af støv, der kan samle sig på dem. Ikke alle er i kabinetter, og jeg må ikke montere dem i kabinetter. Årsagen til dette er, at enhederne kan varme op og påvirke temperatur- og fugtighedsmålingerne i ikke tilstrækkeligt ventilerede.

ESP-01-kort er meget kompakte og har få digitale IO-ben til at arbejde med, men det er nok til I2C-grænsefladen. Brædderne kræver dog en vanskelig ændring for at tillade "deepsleep" at fungere. På det viste foto blev en ledning loddet fra hjørnestiften (GPIO16) til RST -stiften på overskriften. Tråden, jeg brugte, er isoleret "reparation" -tråd med en diameter på 0,1 mm. Isoleringsbelægningen smelter væk ved opvarmning, så den kan loddes til reparation af spor osv. I printkort og stadig ikke bekymre dig om at skabe shorts, hvor ledningen kommer i kontakt med andre komponenter. Dens størrelse gør det svært at arbejde med, og jeg lodde denne ledning på plads under et (hobby-/frimærkesamlerstil) mikroskop. Husk, at overskriften i højre side har en afstand på 0,1 "(2,54 mm). Det ville slet ikke være let at installere en Schottky -diode her, så jeg besluttede mig for bare at prøve ledningen alene, og begge enheder har kørt for over måned uden problemer.

Modulerne blev installeret på to prototype boards, jeg lavede. Den ene (#1) er en programmeringskort, der også tillader I2C -moduler at blive installeret og testet, mens den anden (#2) er et udviklings-/testkort til I2C -enheder. Til det første bord lodde jeg sammen et gammelt USB -hanstik og et lille printkort for at drive enheden direkte fra en USB -vægadapter. Den anden enhed har et almindeligt DC -stik, der er tilpasset til at passe ind i skrueterminalhovedet og drives også via en vægadapter.

Skematisk viser, hvordan de er forbundet, og hvordan programmøren fungerer. Jeg har ikke andre ESP-01 moduler, så jeg har ikke umiddelbart haft behov for programmereren. I fremtiden vil jeg sandsynligvis lave et printkort til dem. Begge disse kort har SI7021 sensormodul installeret, da jeg ikke var så interesseret i trykmålinger på disse steder.

Trin 5: ESP 12E Serial WIFI Kit Sensor Station

ESP 12E Serial WIFI Kit Sensor Station
ESP 12E Serial WIFI Kit Sensor Station
ESP 12E Serial WIFI Kit Sensor Station
ESP 12E Serial WIFI Kit Sensor Station

ESP12E Serial WIFI Kit -kortet var ikke beregnet til udvikling så meget som til at vise, hvad der kunne gøres med denne enhed. Jeg købte den for længe siden for at lære lidt om ESP8266 -programmering og besluttede endelig at give den en ny brug. Jeg fjernede alle de lysdioder, der blev installeret til demonstrationer, og tilføjede et USB -programmeringshoved samt et I2C -header, der er egnet til de moduler, jeg bruger. Den havde en CdS -fotomodstand tilsluttet sin analoge indgangsstift, og jeg besluttede at lade den ligge der. Denne særlige enhed skulle overvåge mit garageværksted og den fotosensor, den havde, var tilstrækkelig til at lade mig vide, hvis lyset ved et uheld var blevet tændt. Til lysmåling normaliserede jeg aflæsningerne for at give mig en procentydelse og alt over "5" om natten betød, at lysene blev efterladt, eller at en dør til huset ikke var ordentligt lukket. RST- og GPIO16 -benene er tydeligt mærket på printkortet, og Schottky -dioden, der forbinder dem, blev installeret på undersiden af printkortet. Den drives via et USB-serielt kort, der er tilsluttet direkte til en USB-vægoplader. Jeg har ekstraudstyr til disse USB-serielle kort og har ikke brug for denne lige nu.

Jeg lavede ikke en skematisk for dette bord og anbefaler generelt ikke at købe en til brug til dette formål. Wemos D1 Mini -plader er meget mere egnede og vil blive diskuteret næste gang. Selvom du har en af disse og har brug for nogle råd, hjælper jeg gerne.

Trin 6: D1 minisensorstationer

D1 minisensorstationer
D1 minisensorstationer
D1 minisensorstationer
D1 minisensorstationer
D1 minisensorstationer
D1 minisensorstationer

Wemos D1 Mini -typen af ESP8266 -udviklingsbrætter er mine foretrukne at bruge, og hvis jeg skulle gøre det om, ville jeg bare bruge disse. De har et stort antal tilgængelige IO -pins, kan programmeres direkte via Arduino IDE og er stadig ret kompakte. D0 -stiften er GPIO16 på disse tavler, og det er ret let at tilslutte en Schottky -diode. Skematisk viser, hvordan jeg har disse tavler forbundet, og begge bruger BME2808 sensormodul.

Den ene af de to tavler bruges til at overvåge vejret udefra og kører fra et solcellebatteri. Et 165 mm x 135 mm (6V, 3,5 W) solpanel er forbundet til et TP4056 Li-ion batteriopladningsmodul (se diagrammet for opsætning af solcelledrevet batterisensorstation). Dette særlige opladningsmodul (03962A) har et batteribeskyttelseskredsløb, som er nødvendigt, hvis batteriet (pakken) ikke indeholder et. Li-ion-batteriet blev genbrugt fra en gammel bærbar batteripakke, og det kan stadig holde tilstrækkelig opladning til at køre D1 Mini-kortet, især med dyb søvn aktiveret. Pladen blev anbragt i et plastkabinet for at holde det noget sikkert for elementerne. For at interiøret skulle blive udsat for udetemperatur og fugtighed, blev to huller med en diameter på 25 mm boret på modsatte sider og dækket (indefra) med sort landskabsklud. Kluden er designet til at tillade fugt at trænge ind, og derfor kan luftfugtigheden måles. I den ene ende af kabinettet var der boret et lille hul og et klart plastvindue installeret. Det var her BH1750 lyssensormodulet blev placeret. Hele enheden er placeret udendørs i skyggen (ikke direkte sol) med lyssensoren peget ud i det fri. Det har kørt fra det soldrevne batteri i næsten 4 uger i vores regnfulde/overskyede vintervejr her.

Trin 7: Gateway og webserver

Gateway og webserver
Gateway og webserver
Gateway og webserver
Gateway og webserver
Gateway og webserver
Gateway og webserver

Et Lolin NodeMCU V3 (ESP8266) -kort blev brugt til ESP-Now Gateway-enheden, og et ESP32 (GOOUUU-kort) blev brugt til webserveren. Næsten ethvert ESP8266 eller endda ESP32 -kort kunne have tjent som gateway -enhed, dette var simpelthen det bræt, jeg havde "tilovers", efter at jeg havde brugt alle de andre tavler, jeg havde.

Jeg brugte ESP32 -kortet, da jeg har brug for et kort med lidt mere computerkraft til at indsamle data, sortere det, gemme det på lager og køre webserveren. I fremtiden kan den også have sin egen sensor og et lokalt (OLED) display. Til opbevaring blev et SD -kort brugt med en tilpasset adapter. Jeg brugte en almindelig microSD til SD -kortadapter og loddet et 7 -pins han (0,1 pitch) header til de belagte kontakter. Jeg fulgte rådene fra denne GitHub for at lave forbindelserne.

Opsætningen til prototyper (med Dupont -ledninger) inkluderer ikke et sensormodul, men det færdige printkort, som jeg designede, giver mulighed for en såvel som et lille OLED -display. Detaljer om, hvordan jeg designede det printkort, er en del af en anden Instructable.

Trin 8: Software

Software
Software

ESP8266 (ESP-NU) Enheder

Softwaren til alle enheder blev skrevet ved hjælp af Arduino IDE (v1.87). Hver sensorstation kører i det væsentlige den samme kode. De adskiller sig kun ved, hvilke ben der bruges til I2C -kommunikationen, og hvilket sensormodul de er forbundet til. Vigtigst af alt sender de den samme måledatapakke til ESP-Now Gateway-stationen, uanset om de har den samme sensor. Det betyder, at nogle sensorstationer vil udfylde dummy -værdier til målingerne af tryk og lys, hvis de ikke har sensorer til at levere reelle værdier. Koden for hver station og gateway blev tilpasset fra Anthony Elders eksempler på denne GitHub.

Gatewayenhedskoden brugte SoftwareSerial til at kommunikere med webserveren, da ESP8266 kun har en fuldt fungerende hardware UART. Med en maksimal baudhastighed på 9600 virker det ganske pålideligt og er mere end tilstrækkeligt til at sende disse relativt små datapakker. Gateway -enheden er også programmeret med en privat MAC -adresse. Årsagen til dette er, at hvis den skal udskiftes, skal sensorstationerne ikke alle omprogrammeres med den nye modtager-MAC-adresse.

ESP32 (webserver)

Hver sensorstation sender sin datapakke til gatewayenheden, som videresender den til webserveren. Sammen med datapakken sendes sensorstationens MAC -adresse også for at identificere hver station. Webserveren har en "opslagstabel" til at bestemme placeringen af hver sensor og sorterer dataene i overensstemmelse hermed. Tidsintervallet mellem målingerne blev sat til 5 minutter plus en tilfældig faktor for at undgå, at sensorer "kolliderer" med hinanden, når de sendes til gateway -enheden.

Hjemmes WIFI -router blev indstillet til at tildele en fast IP -adresse til webserveren, når den opretter forbindelse til WIFI. For mit var det 192.168.1.111. Hvis du indtaster denne adresse i en hvilken som helst browser, opretter du forbindelse til vejrstationens webserver, så længe brugeren er inden for WIFI -området for (og opretter forbindelse til) hjemmenetværket. Når brugeren opretter forbindelse til websiden, reagerer webserveren med en tabel over målingerne og inkluderer tidspunktet for den sidste måling af hver sensor. På denne måde, hvis en sensorstation ikke reagerer, kan man se det fra tabellen, hvis en aflæsning er mere end 5-6 minutter gammel.

Dataene gemmes i individuelle tekstfiler på et SD -kort, og de kan også downloades fra websiden. Det kan importeres til Excel eller ethvert andet program til plotting af data

Android App

For at gøre det lettere at se de lokale vejrinformationer på en smartphone, oprettede jeg en relativt Android -app ved hjælp af Android Studio. Den er tilgængelig på min GitHub -side her. Den bruger webview -klassen til at indlæse websiden fra serveren og som sådan begrænset funktionalitet. Det er ikke i stand til at downloade datafiler, og jeg havde alligevel ikke behov for dem på min telefon.

Trin 9: Resultater

Resultater
Resultater

Endelig er her nogle resultater for fra min hjemvejrstation. Dataene blev downloadet på en bærbar computer og plottet i Matlab. Jeg vedhæftede mine Matlab -scripts, og du kan også køre dem i GNU Octave. Udendørssensoren har kørt på sit solopladede batteri i næsten 4 uger, og vi har sjældent sol på denne tid af året. Indtil videre fungerer alt godt, og alle i familien kan selv slå vejret op frem for at spørge mig nu!

Anbefalede: