En ESP-Now Home Weather Station: 9 trinn (med bilder)
En ESP-Now Home Weather Station: 9 trinn (med bilder)
Anonim
En ESP-Now Home Weather Station
En ESP-Now Home Weather Station

Jeg ønsket å ha en værstasjon hjemme lenge, og en som alle i familien enkelt kunne sjekke for temperatur og fuktighet. I tillegg til å overvåke forholdene utenfor, ønsket jeg å overvåke spesifikke rom i huset også og garasjeværkstedet mitt. Det vil gi oss beskjed når det er et godt tidspunkt å lufte ut huset eller kjøre avfukteren (det regner mye her om vinteren). Det jeg opprettet er et ESP-Now-basert sensorsystem som rapporterer til en lokal webserver som alle kan sjekke fra datamaskinen eller telefonen. For telefonen skrev jeg som en enkel Android -app for å gjøre det enda enklere.

Trinn 1: Designdetaljer

Designdetaljer
Designdetaljer

Jeg ønsket å ha forskjellige sensorstasjoner jeg kunne plassere på forskjellige steder og la dem rapportere tilbake til en hovedstasjon (eller hub) som ville lagret informasjonen. Etter å ha prøvd forskjellige ideer, bestemte jeg meg for å bruke Espressifs ESP-Now-protokoll, siden den tillot rask kommunikasjon direkte mellom enheter. Du kan lese litt om ESP-Now her, og denne GitHub-repoen var en stor del av inspirasjonen min.

Det første bildet viser systemoppsettet. Hver sensor rapporterer sine målinger til en gateway -enhet som videresender dataene til hovedserveren ved hjelp av en seriell tilkobling. Grunnen til dette er at ESP-Now-protokollen ikke kan være aktiv samtidig som WIFI-tilkoblingen. For at en bruker skal få tilgang til nettsiden, må WIFI være på hele tiden, og det gjør det da umulig å bruke ESP-Now-kommunikasjonen på samme enhet. Selv om gatewayenheten må være en Espressif-basert enhet (i stand til ESP-Now), kan hovedserveren være hvilken som helst enhet som kan kjøre en webside.

Noen sensorstasjoner ville gå tom for batterier (eller solfylte batterier) og andre ville ganske enkelt ha strøm. Imidlertid ønsket jeg at alle brukte så lite strøm som mulig, og det er her "deepsleep" -funksjonen som er tilgjengelig for ESP8266 og ESP32 -enheter, er ekstremt nyttig. Sensorstasjonene våknet med jevne mellomrom, tok målinger og sendte dem til gatewayenheten og sovnet i en forhåndsprogrammert periode. Våkningsperioden på bare omtrent 300 ms hvert 5. minutt (i mitt tilfelle) reduserer strømforbruket betydelig.

Trinn 2: Sensorer

Sensorer
Sensorer
Sensorer
Sensorer

Det er forskjellige sensorer å velge mellom for å måle miljøparametere. Jeg bestemte meg for å bare holde meg til I2C -kommunikasjonsdyktige sensorer, ettersom det tillot raske målinger og ville fungere på alle enhetene jeg hadde. I stedet for å jobbe med IC-er direkte, søkte jeg etter moduler som var klare til bruk og som hadde samme pin-outs for å forenkle designene mine. Jeg begynte med bare å ville måle temperatur og fuktighet og valgte derfor en SI7021 -basert modul. Senere ønsket jeg meg en sensor som også kunne måle trykk, og bestemte meg for å prøve de BME280 -baserte sensormodulene. For noen steder ønsket jeg til og med å overvåke lysnivået, og BH1750 -modulen var ideell for dette som en separat sensormodul. Jeg kjøpte sensormodulene mine på ebay, og dette er modulene jeg mottok:

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

Det finnes to stiler av GY-BMP/E280 PCB-modulene. Begge deler den samme pinnen for pinne 1 til 4. En modul har to ekstra pinner, CSB og SDO. Disse to pinnene er forhåndskoblet på den 4-pinners versjonen av modulen. Nivået på SDO -pinnen bestemmer I2C -adressen (Ground = standard 0x76, VCC = 0x77). CSB -pinnen må være koblet til VCC for å velge I2C -grensesnittet. Jeg foretrekker 4 -pinners modulen, siden den er klar til bruk slik den er til mitt formål.

Generelt er disse modulene veldig praktiske å bruke ettersom de allerede har pull-up-motstander installert for kommunikasjonslinjene og alle kjører på 3,3V, så de er kompatible med ESP8266-baserte kort. Vær oppmerksom på at pinnene på disse sensor -ICene generelt ikke er 5V -tolerante, så å koble dem direkte til noe som en Arduino Uno kan skade dem permanent.

Trinn 3: Sensorstasjoner

Sensorstasjoner
Sensorstasjoner

Som nevnt vil alle sensorstasjonene være Espressif-enheter som bruker kommunikasjonsprotokollen ESP-Now. Fra tidligere prosjekter og eksperimentering hadde jeg flere forskjellige enheter tilgjengelig for meg for å utføre mine første tester og innlemme dem i den endelige designen. Jeg hadde følgende enheter tilgjengelig:

  • to ESP-01-moduler
  • to Wemos D1 mini utviklingstavler
  • ett Lolin ESP8266 utviklingstavler
  • ett ESP12E serielt WIFI -settkort
  • ett GOOUUU ESP32 -kort (et 38 -pinners utviklingsbord)

Jeg hadde også et Wemos D1 R2 utviklingsbord, men det var problemer med det som ikke tillot det å våkne fra dyp søvn, og som en gateway -enhet ville det krasje og ikke starte på riktig måte. Jeg reparerte det senere, og det ble en del av prosjektet for åpning av garasjeporter. For at "deepsleep" skal fungere, må RST -pinnen på ESP8266 være koblet til GPIO16 -pinnen, slik at timeren kan vekke enheten. Ideelt sett bør denne tilkoblingen gjøres med en Schottky-diode (katode til GPIO16) slik at manuell tilbakestilling via USB-TLL-tilkoblingen under programmeringen fortsatt fungerer. Imidlertid kan en lav verdi (300-ish Ohm) motstand eller til og med direkte ledningstilkobling fortsatt være vellykket.

ESP-01-moduler gir ikke enkel tilgang til GPIO16-pinnen, og man må lodde direkte til IC. Dette er ikke en enkel oppgave, og jeg vil ikke anbefale dette for alle. ESP12E serielt WIFI -settkort var litt av en nyhet og krevde ganske mange endringer for at det skulle være nyttig for mitt formål. De enkleste brettene å bruke var Wemos D1 minitavler og Lolin -brettet. ESP32 -enheter krever ingen endringer for at deepsleep skal fungere. Andreas Spiess har en fin Instructable på dette.

Trinn 4: ESP-01 sensorstasjon

ESP-01 sensorstasjon
ESP-01 sensorstasjon
ESP-01 sensorstasjon
ESP-01 sensorstasjon
ESP-01 sensorstasjon
ESP-01 sensorstasjon

På alle sensorstasjoner er sensormodulene montert vertikalt for å redusere mengden støv som kan samles på dem. Ikke alle er i skap, og jeg kan ikke montere dem i skap. Grunnen til dette er at enhetene kan varme opp og påvirke temperatur- og fuktighetsavlesningene i ikke tilstrekkelig ventilert.

ESP-01-kort er veldig kompakte og har få digitale IO-pinner å jobbe med, men det er nok for I2C-grensesnittet. Tavlene krever imidlertid en vanskelig modifikasjon for å tillate "deepsleep" å fungere. På bildet som ble vist, ble en ledning loddet fra hjørnepinnen (GPIO16) til RST -pinnen på overskriften. Ledningen jeg brukte er 0,1 mm diameter isolert "reparasjon" ledning. Isoleringsbelegget smelter bort ved oppvarming, så det kan loddes for å reparere spor osv. I PCB og fortsatt ikke bekymre deg for å lage shorts der ledningen kommer i kontakt med andre komponenter. Dens størrelse gjør det vanskelig å jobbe med, og jeg loddet denne ledningen på plass under et (hobbyist/frimerkesamler -stil) mikroskop. Husk at overskriften på høyre side har en avstand på 0,1 "(2,54 mm). Installering av en Schottky -diode her ville ikke være lett i det hele tatt, så jeg bestemte meg for å prøve ledningen alene, og begge enhetene har kjørt for over måned uten problemer.

Modulene ble installert på to prototypebrett jeg opprettet. Den ene (#1) er et programmererkort som også lar I2C -moduler installeres og testes, mens den andre (#2) er et utviklings-/testkort for I2C -enheter. For det første kortet loddet jeg sammen en gammel USB -hankontakt og en liten PCB for å drive enheten direkte fra en USB -veggadapter. Den andre enheten har en vanlig likestrømkontakt som er modifisert for å passe inn i skrueterminalhodet og drives også via en veggadapter.

Skjematikken viser hvordan de er koblet sammen og hvordan programmereren fungerer. Jeg har ingen andre ESP-01-moduler, så jeg har ikke hatt noe umiddelbart behov for programmereren. I fremtiden vil jeg sannsynligvis lage en PCB for dem. Begge disse kortene har sensormodulen SI7021 installert da jeg ikke var like interessert i trykkmålinger på disse stedene.

Trinn 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 ment for utvikling så mye som det var for å vise hva som kan gjøres med denne enheten. Jeg kjøpte den for lenge siden for å lære litt om ESP8266 -programmering og bestemte meg til slutt for å gi den litt ny bruk. Jeg fjernet alle lysdiodene som ble installert for demonstrasjoner og la til en USB -programmeringshode samt en I2C -overskrift som passer for modulene jeg bruker. Den hadde en CdS -fotomotstand tilkoblet den analoge inngangspinnen, og jeg bestemte meg for å la den ligge der. Denne spesielle enheten skulle overvåke garasjeværkstedet mitt og fotosensoren den hadde, var tilstrekkelig til å gi meg beskjed om lysene ved et uhell hadde blitt tent. For lysmålingen normaliserte jeg avlesningene for å gi meg en prosenteffekt og alt over "5" om natten betydde at lysene var igjen eller at en dør til huset ikke var ordentlig lukket. RST- og GPIO16 -pinnene er tydelig merket på kretskortet, og Schottky -dioden som forbinder dem ble installert på undersiden av kretskortet. Den drives av et USB-serielt kort som er koblet direkte til en USB-vegglader. Jeg har tillegg til disse USB-serielle kortene og trenger ikke denne akkurat nå.

Jeg laget ikke en skjematisk for dette brettet og anbefaler generelt ikke å kjøpe en til bruk for dette formålet. Wemos D1 Mini -brettene er mye mer passende og vil bli diskutert neste gang. Selv om du har en av disse og trenger råd, hjelper jeg deg gjerne.

Trinn 6: D1 minisensorstasjoner

D1 minisensorstasjoner
D1 minisensorstasjoner
D1 minisensorstasjoner
D1 minisensorstasjoner
D1 minisensorstasjoner
D1 minisensorstasjoner

Wemos D1 Mini -typen ESP8266 utviklingstavler er mine foretrukne å bruke, og hvis jeg måtte gjøre det om, ville jeg bare bruke disse. De har et stort antall tilgjengelige IO -pinner, kan programmeres direkte via Arduino IDE og er fremdeles ganske kompakte. D0 -pinnen er GPIO16 på disse kortene, og det er ganske enkelt å koble til en Schottky -diode. Skjematisk viser hvordan jeg har disse kortene koblet til, og begge bruker BME2808 sensormodulen.

Det ene av de to kortene brukes til å overvåke været utenfor og går fra et solcellebatteri. Et 165 mm x 135 mm (6 V, 3,5 W) solcellepanel er koblet til en lademodul TP4056 Li-ion-batteri (se diagrammet for oppsett av solcelledrevet batterisensorstasjon). Denne spesifikke lademodulen (03962A) har en batteribeskyttelseskrets som er nødvendig hvis batteriet (pakken) ikke inneholder en. Li-ion-batteriet ble resirkulert fra en gammel bærbar batteripakke, og det kan fortsatt holde tilstrekkelig ladning for å kjøre D1 Mini-kortet, spesielt med dyp søvn aktivert. Brettet ble plassert i et plasthylster for å holde det noe trygt for elementene. For at interiøret skulle bli utsatt for utetemperatur og fuktighet, ble to hull med en diameter på 25 mm boret på motsatte sider og dekket (fra innsiden) med svart landskapsklut. Duken er designet for å tillate fuktighet å trenge inn, og derfor kan fuktigheten måles. I den ene enden av kabinettet var et lite hull boret og et klart plastvindu installert. Det var her BH1750 lyssensormodul ble plassert. Hele enheten er plassert utendørs i skyggen (ikke direkte sol) med lyssensoren pekt ut i det fri. Det har kjørt fra det soldrevne batteriet i nesten 4 uker i vårt regnfulle/grumsete vintervær her.

Trinn 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 ble brukt for ESP-Now Gateway-enheten og et ESP32 (GOOUUU-kort) ble brukt for webserveren. Nesten ethvert ESP8266 eller til og med ESP32 -kort kunne ha fungert som gateway -enhet, dette var ganske enkelt brettet jeg hadde "til overs" etter at jeg brukte alle de andre brettene jeg hadde.

Jeg brukte ESP32 -kortet siden jeg trenger et brett med litt mer datakraft for å samle inn data, sortere det, lagre det på lagring og kjøre webserveren. I fremtiden kan den også ha sin egen sensor og en lokal (OLED) skjerm. For lagring ble et SD -kort brukt med en tilpasset adapter. Jeg brukte en vanlig microSD til SD -kortadapter og loddet en 7 -pinners hann (0,1 pitch) topptekst til de belagte kontaktene. Jeg fulgte rådene fra denne GitHub for å lage tilkoblinger.

Prototyping -oppsettet (med Dupont -ledninger) inkluderer ikke en sensormodul, men den ferdige PCB -en som jeg designet gir rom for en så vel som en liten OLED -skjerm. Detaljer om hvordan jeg designet at PCB er en del av en annen Instructable.

Trinn 8: Programvare

Programvare
Programvare

ESP8266 (ESP-NOW) Enheter

Programvaren for alle enheter ble skrevet ved hjelp av Arduino IDE (v1.87). Hver sensorstasjon kjører i hovedsak identisk kode. De er bare forskjellige med hvilke pinner som brukes til I2C -kommunikasjonen og hvilken sensormodul de er koblet til. Viktigst av alt sender de den samme måledatapakken til ESP-Now Gateway-stasjonen, uansett om de har den samme sensoren. Hva dette betyr er at noen sensorstasjoner vil fylle ut dummy -verdier for trykk- og lysnivåmålingene hvis de ikke har sensorer for å gi reelle verdier. Koden for hver stasjon og gatewayen ble tilpasset fra Anthony Elders eksempler på denne GitHub.

Gateway -enhetskoden brukte SoftwareSerial til å kommunisere med webserveren, siden ESP8266 bare har en fullt fungerende maskinvare UART. Med maksimal baudhastighet på 9600 virker det ganske pålitelig og er mer enn tilstrekkelig for å sende disse relativt små datapakkene. Gateway -enheten er også programmert med en privat MAC -adresse. Årsaken til dette er at hvis den må byttes ut, trenger ikke sensorstasjonene alle å bli programmert på nytt med den nye mottakerens MAC-adresse.

ESP32 (webserver)

Hver sensorstasjon sender sin datapakke til gatewayenheten som videresender den til webserveren. Sammen med datapakken sendes også sensorstasjonens MAC -adresse for å identifisere hver stasjon. Webserveren har en "oppslag" -tabell for å bestemme plasseringen av hver sensor og sorterer dataene deretter. Tidsintervallet mellom målingene ble satt til 5 minutter pluss en tilfeldig faktor for å unngå at sensorer "kolliderer" med hverandre når de sendes til gateway -enheten.

Hjem -WIFI -ruteren ble satt til å tildele en fast IP -adresse til webserveren når den kobles til WIFI. For min var den 192.168.1.111. Hvis du skriver den adressen i hvilken som helst nettleser, kobles du til værstasjonens webserver så lenge brukeren er innenfor WIFI -området til (og kobler til) hjemmenettverket. Når brukeren kobler seg til websiden, reagerer webserveren med en tabell over målingene, og inkluderer tiden for den siste målingen av hver sensor. På denne måten hvis en sensorstasjon ikke reagerer, kan du se det fra tabellen hvis en avlesning er mer enn 5-6 minutter gammel.

Dataene lagres i individuelle tekstfiler på et SD -kort, og de kan også lastes ned fra websiden. Den kan importeres til Excel eller andre programmer for plotting av data

Android App

For å gjøre det lettere å se lokal værinformasjon på en smarttelefon, opprettet jeg en relativt Android -app ved hjelp av Android Studio. Den er tilgjengelig på min GitHub -side her. Den bruker webview -klassen til å laste nettsiden fra serveren og som sådan begrenset funksjonalitet. Det er ikke i stand til å laste ned datafilene, og jeg hadde ikke behov for dem på telefonen min uansett.

Trinn 9: Resultater

Resultater
Resultater

Til slutt, her er noen resultater for fra min værstasjon hjemme. Dataene ble lastet ned på en bærbar datamaskin og plottet i Matlab. Jeg har lagt ved Matlab -skriptene mine, og du kan også kjøre dem i GNU Octave. Utendørssensoren har kjørt på sitt solfylte batteri i nesten 4 uker, og vi har sjelden sol på denne tiden av året. Så langt fungerer alt bra, og alle i familien kan slå opp været selv i stedet for å spørre meg nå!