Innehållsförteckning:
- Steg 1: Designdetaljer
- Steg 2: Sensorer
- Steg 3: Sensorstationer
- Steg 4: ESP-01 sensorstation
- Steg 5: ESP 12E Serial WIFI Kit Sensor Station
- Steg 6: D1 -minisensorstationer
- Steg 7: Gateway och webbserver
- Steg 8: Programvara
- Steg 9: Resultat
Video: En ESP-Now Home Weather Station: 9 steg (med bilder)
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:45
Jag ville ha en hemväderstation ganska länge och en som alla i familjen enkelt kunde kolla efter temperatur och luftfuktighet. Förutom att övervaka de yttre förhållandena ville jag också övervaka specifika rum i huset och min garageverkstad. Det skulle meddela oss när det är en bra tid att lufta ut huset eller köra avfuktaren (det regnar mycket här under vintern). Det jag skapade är ett ESP-Now-baserat sensorsystem som rapporterar till en lokal webbserver som alla kan kontrollera från sin dator eller telefon. För telefonen skrev jag som en enkel Android -app för att göra det ännu enklare.
Steg 1: Designdetaljer
Jag ville ha olika sensorstationer som jag kunde placera på olika platser och låta dem rapportera tillbaka till en huvudstation (eller hubb) som skulle spara informationen. Efter att ha provat olika idéer bestämde jag mig för att använda Espressifs ESP-Now-protokoll, eftersom det möjliggjorde snabb kommunikation direkt mellan enheter. Du kan läsa lite om ESP-Now här och denna GitHub-repo var en stor del av min inspiration.
Den första bilden visar systemets layout. Varje sensor rapporterar sina mätningar till en gateway -enhet som vidarebefordrar data till huvudservern med en fast kabelanslutning. Anledningen till detta är att ESP-Now-protokollet inte kan vara aktivt samtidigt som WIFI-anslutningen. För att en användare ska få åtkomst till webbsidan måste WIFI vara på hela tiden och det gör det omöjligt att använda ESP-Now-kommunikationen på samma enhet. Gatewayenheten måste vara en Espressif-baserad enhet (kan ESP-Now), men huvudservern kan vara vilken enhet som helst som kan köra en webbsida.
Vissa sensorstationer tar slut på batterier (eller sol laddade batterier) och andra skulle helt enkelt ha nätström. Men jag ville att alla skulle använda så lite ström som möjligt och det är där "deepsleep" -funktionen som är tillgänglig för ESP8266- och ESP32 -enheter är oerhört hjälpsam. Sensorstationerna vaknade med jämna mellanrum, tog mätningar och skickade dem till gateway -enheten och somnade om under en förprogrammerad tid. Deras vakningstid på bara cirka 300 ms var 5: e minut (i mitt fall) minskar deras strömförbrukning avsevärt.
Steg 2: Sensorer
Det finns olika sensorer att välja mellan för att mäta miljöparametrar. Jag bestämde mig för att bara hålla mig till I2C -kommunikationskompatibla sensorer, eftersom det tillät snabba mätningar och skulle fungera på alla enheter jag hade. Istället för att arbeta direkt med IC: er letade jag efter färdiga moduler som hade samma pin-outs för att förenkla mina konstruktioner. Jag började med att bara vilja mäta temperatur och luftfuktighet och valde därför en SI7021 -baserad modul. Senare ville jag ha en sensor som också kunde mäta tryck och bestämde mig för att testa de BME280 -baserade sensormodulerna. För vissa platser ville jag till och med övervaka ljusnivåerna och BH1750 -modulen var idealisk för detta som en separat sensormodul. Jag köpte mina sensormoduler från ebay och det här är modulerna jag fick:
- BME280 (GY-BMP/E280), mäter temperatur, luftfuktighet och tryck
- SI7021 (GY-21), mäter temperatur och luftfuktighet
- BH1750 (GY-302), mäter ljus
Det finns två stilar för GY-BMP/E280 PCB-modulerna. Båda delar samma stift för stift 1 till 4. En modul har ytterligare två stift, CSB och SDO. Dessa två stift är föranslutna på modulens 4-stiftsversion. Nivån på SDO -stiftet bestämmer I2C -adressen (Ground = standard på 0x76, VCC = 0x77). CSB -stiftet måste vara anslutet till VCC för att välja I2C -gränssnittet. Jag föredrar 4 -stifts modulen, eftersom den är klar att användas som den är för mitt ändamål.
I allmänhet är dessa moduler mycket praktiska att använda eftersom de redan har uppdragningsmotstånd installerade för kommunikationslinjerna och alla körs på 3.3V så är kompatibla med ESP8266-baserade kort. Observera att stiften på dessa sensor -IC: er generellt inte är 5V -toleranta, så att ansluta dem direkt till något som en Arduino Uno kan skada dem permanent.
Steg 3: Sensorstationer
Som nämnts skulle sensorstationerna alla vara Espressif-enheter som använder ESP-Now-kommunikationsprotokollet. Från tidigare projekt och experiment hade jag flera olika enheter tillgängliga för att genomföra mina första tester och införliva dem i den slutliga designen. Jag hade följande enheter till hands:
- två ESP-01-moduler
- två Wemos D1 mini -utvecklingsbrädor
- en Lolin ESP8266 utvecklingsbräda
- ett ESP12E seriellt WIFI -kitkort
- ett GOOUUU ESP32 -kort (ett 38 -stifts utvecklingskort)
Jag hade också ett Wemos D1 R2 -utvecklingsbord, men det fanns problem med det som inte tillät det att vakna från djup sömn och som en gate way -enhet skulle det krascha och inte starta om ordentligt. Jag reparerade det senare och det blev en del av garageportöppnaren. För att "deepsleep" ska fungera måste RST -stiftet på ESP8266 vara anslutet till GPIO16 -stiftet, så att vilotimern kan väcka enheten. Helst bör denna anslutning göras med en Schottky-diod (katod till GPIO16) så att den manuella återställningen via USB-TLL-anslutningen under programmeringen fortfarande fungerar. Emellertid kan ett lågt värde (300-ish Ohm) motstånd eller till och med direkt trådanslutning fortfarande vara framgångsrik.
ESP-01-moduler tillåter inte enkel åtkomst till GPIO16-stiftet och man måste löda direkt till IC. Detta är inte en enkel uppgift och jag skulle inte rekommendera detta för alla. ESP12E seriellt WIFI -kitkort var lite av en nyhet och krävde en hel del ändringar för att det skulle vara användbart för mitt ändamål. De enklaste brädorna att använda var Wemos D1 mini -typskivor och Lolin -brädan. ESP32 -enheter kräver inga ändringar för att deepsleep ska fungera. Andreas Spiess har en trevlig instruerbar på detta.
Steg 4: ESP-01 sensorstation
På alla sensorstationer monteras sensormodulerna vertikalt för att minska mängden damm som kan samlas på dem. Alla är inte i skåp och jag får inte montera dem i skåp. Anledningen till detta är att enheterna kan värmas upp och påverka temperatur- och luftfuktighetsavläsningarna om de inte är tillräckligt ventilerade.
ESP-01-kort är mycket kompakta och har få digitala IO-stift att arbeta med, men det räcker för I2C-gränssnittet. Brädorna kräver dock en knepig modifiering för att "deepsleep" ska fungera. På bilden som visades löddes en tråd från hörnstiftet (GPIO16) till RST -stiftet på huvudet. Tråden jag använde är isolerad "reparation" -tråd med en diameter på 0,1 mm. Isoleringsbeläggningen smälter bort vid uppvärmning, så den kan lödas för att reparera spår etc i kretskort och ändå inte oroa dig för att skapa shorts där tråden kommer i kontakt med andra komponenter. Dess storlek gör det svårt att arbeta med och jag lödde denna tråd på plats under ett (hobby-/frimärkssamlare -stil) mikroskop. Tänk på att sidhuvudet på höger sida har ett 0,1 "(2,54 mm) stiftavstånd. Att installera en Schottky -diod här skulle inte vara lätt alls, så jag bestämde mig för att bara prova tråden ensam och båda enheterna har körts för över en månad utan problem.
Modulerna installerades på två prototypkort som jag skapade. En (#1) är ett programmeringskort som också tillåter I2C -moduler att installeras och testas, medan den andra (#2) är ett utvecklings-/testkort för I2C -enheter. För det första kortet lödde jag ihop en gammal USB -hankontakt och en liten kretskort för att driva enheten direkt från en USB -väggadapter. Den andra enheten har ett vanligt DC -uttag som är anpassat för att passa in i skruvanslutningsrubriken och drivs också via en väggadapter.
Schemat visar hur de är anslutna och hur programmeraren fungerar. Jag har inga andra ESP-01-moduler, så jag har inte haft något omedelbart behov av programmeraren. I framtiden kommer jag sannolikt att göra ett PCB för dem. Båda dessa kort har sensormodulen SI7021 installerad eftersom jag inte var lika intresserad av tryckmätningar på dessa platser.
Steg 5: ESP 12E Serial WIFI Kit Sensor Station
ESP12E Serial WIFI Kit -kortet var inte avsett att utvecklas så mycket som för att visa vad som kan göras med den här enheten. Jag köpte den för länge sedan för att lära mig lite om ESP8266 -programmering och bestämde mig slutligen för att ge den lite nytt. Jag tog bort alla lysdioder som installerades för demonstrationer och lade till en USB -programmeringsrubrik samt en I2C -rubrik som passar de moduler jag använder. Den hade ett CdS -fotomotstånd anslutet till dess analoga ingångsstift och jag bestämde mig för att lämna det där. Just den här enheten skulle övervaka min verkstadsverkstad och fotosensorn som den hade var tillräcklig för att meddela mig om lamporna av misstag hade varit tända. För ljusmätningen normaliserade jag avläsningarna för att ge mig en procentuell effekt och allt över "5" på natten innebar att lamporna var kvar eller att en dörr till huset inte stängdes ordentligt. RST- och GPIO16 -stiften är tydligt märkta på kretskortet och Schottky -dioden som ansluter dem installerades på undersidan av kretskortet. Den drivs via ett USB-seriellt kort som är direkt anslutet till en USB-väggladdare. Jag har tillbehör till dessa USB-seriella kort och behöver inte den här just nu.
Jag har inte gjort en schema för det här kortet och rekommenderar i allmänhet inte att köpa ett för detta ändamål. Wemos D1 Mini -brädorna är mycket mer lämpliga och kommer att diskuteras härnäst. Även om du har en av dessa och behöver lite råd, hjälper jag dig gärna.
Steg 6: D1 -minisensorstationer
Wemos D1 Mini -typ av ESP8266 -utvecklingsbrädor är mina favoriter att använda och om jag var tvungen att göra om det skulle jag bara använda dessa. De har ett stort antal tillgängliga IO -stift, kan programmeras direkt via Arduino IDE och är fortfarande ganska kompakta. D0 -stiftet är GPIO16 på dessa kort och att ansluta en Schottky -diod är ganska lätt att göra. Schemat visar hur jag har dessa kort anslutna och båda använder sensormodulen BME2808.
En av de två korten används för att övervaka vädret ute och går från ett solcellsbatteri. En 165 mm x 135 mm (6 V, 3,5 W) solpanel är ansluten till en laddningsmodul TP4056 Li-ion batteri (se installationsdiagram för solcellsdriven batterisensor). Denna specifika laddningsmodul (03962A) har en batteriskyddskrets som är nödvändig om batteriet (paketet) inte innehåller en. Li-jonbatteriet återvanns från ett gammalt laptopbatteri och det kan fortfarande hålla tillräckligt med laddning för att köra D1 Mini-kortet, särskilt med djup sömn aktiverad. Brädan placerades i ett plasthölje för att hålla det något säkert från väder och vind. För att interiören skulle kunna utsättas för yttertemperatur och luftfuktighet borrades dock två hål med en diameter på 25 mm på motsatta sidor och täcktes (från insidan) med svart liggande duk. Duken är utformad så att fukt kan tränga in och luftfuktigheten kan därför mätas. I ena änden av höljet borrades ett litet hål och ett klart plastfönster installerades. Det var här BH1750 -ljussensormodulen placerades. Hela enheten placeras utomhus i skuggan (inte direkt sol) med ljussensorn pekad ut i det fria. Det har körts från det soldrivna batteriet i nästan 4 veckor i vårt regniga/grumliga vinterväder här.
Steg 7: Gateway och webbserver
Ett Lolin NodeMCU V3 (ESP8266) -kort användes för ESP-Now Gateway-enheten och ett ESP32 (GOOUUU-kort) användes för webbservern. Nästan alla ESP8266 eller till och med ESP32 -kort kunde ha fungerat som gateway -enhet, det här var helt enkelt det kort som jag hade "kvar" efter att jag använt alla andra kort jag hade.
Jag använde ESP32 -kortet eftersom jag behöver ett kort med lite mer datorkraft för att samla in data, sortera den, spara den på lagring och köra webbservern. I framtiden kan den också ha en egen sensor och en lokal (OLED) display. För lagring användes ett SD -kort med en anpassad adapter. Jag använde en vanlig microSD till SD -kortadapter och lödde en 7 -stifts hane (0,1 tonhöjd) till de pläterade kontakterna. Jag följde råd från denna GitHub för att göra anslutningarna.
Prototypdesignen (med Dupont -kablar) innehåller inte en sensormodul, men det färdiga kretskortet som jag konstruerade tillåter en såväl som en liten OLED -skärm. Detaljer om hur jag utformade det kretskortet är en del av en annan instruerbar.
Steg 8: Programvara
ESP8266 (ESP-NU) Enheter
Programvaran för alla enheter skrevs med Arduino IDE (v1.87). Varje sensorstation kör i huvudsak identisk kod. De skiljer sig bara åt genom vilka stift som används för I2C -kommunikationen och vilken sensormodul de är anslutna till. Viktigast av allt skickar de samma mätdatapaket till ESP-Now Gateway-stationen, oavsett om de har samma sensor. Vad detta betyder är att vissa sensorstationer fyller i dummyvärden för tryck- och ljusnivåmätningarna om de inte har sensorer för att ge verkliga värden. Koden för varje station och gatewayen anpassades från Anthony Elders exempel på denna GitHub.
Gateway -enhetskoden använde SoftwareSerial för att kommunicera med webbservern, eftersom ESP8266 bara har en fullt fungerande maskinvara UART. Körs med maximal baudhastighet på 9600 verkar det ganska tillförlitligt och är mer än tillräckligt för att skicka dessa relativt små datapaket. Gateway -enheten är också programmerad med en privat MAC -adress. Anledningen till detta är att om den behöver bytas ut, behöver sensorstationerna inte alla programmeras om med den nya mottagarens MAC-adress.
ESP32 (webbserver)
Varje sensorstation skickar sitt datapaket till gateway -enheten som vidarebefordrar det till webbservern. Tillsammans med datapaketet skickas också sensorstationens MAC -adress för att identifiera varje station. Webbservern har en "uppslagning" -tabell för att bestämma platsen för varje sensor och sorterar data därefter. Tidsintervallet mellan mätningarna sattes till 5 minuter plus en slumpmässig faktor för att undvika att sensorer "kolliderar" med varandra när de skickas till gateway -enheten.
Hemmets WIFI -router var inställd på att tilldela en fast IP -adress till webbservern när den ansluter till WIFI. För min var den 192.168.1.111. Om du skriver den adressen i valfri webbläsare ansluter du till väderstationens webbserver så länge användaren är inom WIFI -intervallet (och ansluter till) hemnätverket. När användaren ansluter till webbsidan svarar webbservern med en tabell över mätningarna och inkluderar tiden för den sista mätningen för varje sensor. På detta sätt om en sensorstation blir icke-responsiv kan man se det från tabellen om en avläsning är mer än 5-6 minuter gammal.
Data sparas i enskilda textfiler på ett SD -kort och de kan också laddas ner från webbsidan. Den kan importeras till Excel eller någon annan applikation för plottning av data
Android App
För att göra det lättare att se lokal väderinformation på en smartphone skapade jag en relativt Android -app med Android Studio. Den är tillgänglig på min GitHub -sida här. Den använder webview -klassen för att ladda webbsidan från servern och som sådan begränsad funktionalitet. Det går inte att ladda ner datafilerna och jag hade inget behov av dem på min telefon i alla fall.
Steg 9: Resultat
Slutligen, här är några resultat för från min hemväderstation. Uppgifterna laddades ner på en bärbar dator och ritades i Matlab. Jag bifogade mina Matlab -skript och du kan också köra dem i GNU Octave. Utomhussensorn har körts på sitt laddade batteri i nästan 4 veckor och vi har sällan någon sol vid denna tid på året. Hittills fungerar allt bra och alla i familjen kan leta upp vädret själva istället för att fråga mig nu!
Rekommenderad:
Super Weather Station Hängkorg: 11 steg (med bilder)
Super Weather Station Hanging Basket: Hej alla! I detta T3chFlicks -blogginlägg visar vi dig hur vi gjorde en smart hängkorg. Växter är ett friskt och nyttigt tillskott till alla hem, men kan snabbt bli tröttsamt - särskilt om du bara kommer ihåg att vattna dem när du
Hanging Gear Weather Station: 7 steg (med bilder)
Hängande redskap Väderstation: I den här instruktionsboken ska jag visa dig hur du bygger din egen väderstation för hängande redskap, som är tillverkad av CNC-laserskurna MDF-delar. En stegmotor driver varje växel och en Arduino tar temperatur- och luftfuktighetsmätningar med en DHT
NaTaLia Weather Station: Arduino Solar Powered Weather Station Gjord på rätt sätt: 8 steg (med bilder)
NaTaLia väderstation: Arduino soldriven väderstation gjord på rätt sätt: Efter 1 års framgångsrik drift på 2 olika platser delar jag mina solcellsdrivna väderstationsprojektplaner och förklarar hur det utvecklades till ett system som verkligen kan överleva över lång tid perioder från solenergi. Om du följer
DIY Weather Station & WiFi Sensor Station: 7 steg (med bilder)
DIY Weather Station & WiFi Sensor Station: I det här projektet kommer jag att visa dig hur du skapar en väderstation tillsammans med en WiFi -sensorstation. Sensorstationen mäter lokala temperatur- och luftfuktighetsdata och skickar den via WiFi till väderstationen. Väderstationen visar sedan t
Komma igång med Esp 8266 Esp-01 Med Arduino IDE - Installera Esp -kort i Arduino Ide och Programmering Esp: 4 steg
Komma igång med Esp 8266 Esp-01 Med Arduino IDE | Installera Esp-kort i Arduino Ide och programmera Esp: I dessa instruktioner lär vi oss hur man installerar esp8266-kort i Arduino IDE och hur man programmerar esp-01 och laddar upp kod i den. Eftersom esp-kort är så populära så jag tänkte rätta till en instruktionsför detta och de flesta människor har problem