Innehållsförteckning:
- Steg 1: shoppa
- Steg 2: Installation och bakgrund
- Steg 3: Arduino - ESP12 -delen
- Steg 4: Testa ESP som NTP -klient (Network Time Protocol)
- Steg 5: Testa DHT22 -sensorn
- Steg 6: Sätta ihop det …
- Steg 7: Serversidan av saker
Video: Hemnätets temperatursensor: 7 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:41
Vad behöver du veta för att göra detta projekt:
Du behöver veta om:- Vissa elektroniska färdigheter (lödning)
- Linux
- Arduino IDE
(du måste uppdatera ytterligare kort i IDE:
- uppdatera/programmera ett ESP -kort via Arduino IDE.
(det finns några fina handledning på webben)
Detta kan göras med en Arduino Uno eller med en FTDI (usb till seriell adapter).
Jag använde min Uno eftersom jag inte hade någon seriell port på min dator och inte heller hade en FTDI
Steg 1: shoppa
Vad behöver du för att detta ska hända?
För den digitala temperatur- och fuktighetssensorn:
- Antingen en brödbräda eller ett alternativ som prototyp PCB, löd, lödkolv …
- Lite tråd
- två hoppare
- ett 10k Ohm motstånd
- en ESP12F (andra modeller kan också fungera …)
- en DHT22 (lite dyrare än DHT11 men mer exakt)
- 3 laddningsbara AA -batterier och en batterihållare
- en liten plastlåda att lägga ditt projekt i
- I ett senare skede planerar jag att lägga till en HT7333 med två 10uF -kondensatorer mellan batteriet och ESP
för att stabilisera ingångsspänningen (VCC) till rekommenderad 3,3V men också för att skydda ESP från överspänning.
För nätverksdelen:
- Ditt hem WiFi -nätverk
För serverdelen:
- Alla Linux -baserade system (alltid på!)
Jag använde en Raspberry Pi (som jag också använder som server för mina IP -kameror utomhus.)
- gcc -kompilator för att kompilera din serverkod
- rrdtool -paket för att lagra data och generera grafer
- apache (eller en annan webbserver)
Din favorit -dator eller bärbar dator med Arduino IDE på.
Steg 2: Installation och bakgrund
I denna version av en WiFi ansluten - för att inte säga IOT - temperatur- och fuktighetssensor använde jag en ESP12F, en DHT22 och en 3 AA batterihållare med laddningsbara batterier.
Var 20: e minut tar ESP en mätning från DHT22 och skickar den till en server (en Raspberry Pi) över UDP på mitt hem WiFi -nätverk. Efter att mätningarna har skickats försvinner ESP. Detta innebär att endast modulens realtidsklocka förblir strömförande, vilket resulterar i en otrolig energibesparing. I cirka 5 sekunder kräver modulen cirka 100mA, sedan under 20 minuter djupt sömn bara 150uA.
Jag ville inte använda någon internetbaserad tjänst eftersom jag har min Raspberry Pi som alltid är igång ändå och på det här sättet hade jag nöjet att skriva serverdelen också.
På servern (en Raspberry Pi som kör Raspbian) har jag skrivit en enkel UDP -lyssnare (server) som lagrar värdena i en enkel RRD. (Round Robin -databas med RRDtool av Tobias Oetiker.)
Fördelen med RRDtool är att du skapar din databas en gång och storleken förblir densamma. Annars behöver du inte ha en databaseserver (som mySQLd) som körs i bakgrunden. RRDtool ger dig verktygen för att skapa databasen och generera graferna.
Min server skapar graferna regelbundet och visar allt på en mycket enkel http -sida. Jag kan konsultera mina avläsningar med en enkel webbläsare genom att ansluta till Apache2 -webbservern på Raspberry Pi!
Slutligen hade jag ingen FTDI (USB till Serial) så jag använde min Arduino UNO. Du måste ansluta TX: erna och RX: erna och GND för ESP och UNO. (Jag vet, din instinkt kan berätta för dig att korsa RX och TX … försökte det också, fungerar inte.)
Jag gjorde inte en nivåkonvertering (UNO: High = 5V men ESP är i grunden en 3.3V -enhet … Det finns några fina FTDI: er på marknaden där du till och med kan välja din High level till 5 eller 3.3V.
Min krets drivs av 3 AA laddningsbara batterier - så faktiskt 3 X 1,2V. I en senare fas tänker jag sätta en HT7333 mellan batteriet och kretsen för säkerhets skull; nyladdade batterier kan ha mer än 1,2V och ESP bör drivas med min. 3V och max. 3.6V. Också om jag bestämmer mig - i ett ögonblick av svaghet - att sätta i alkaliska batterier (3 X 1.5V = 4.5V) kommer min ESP inte att stekas!
Jag övervägde också att använda en 10 cm x 10 cm solpanel, men det var bara inte värt besväret. Genom att göra 3 mätningar per timme (i princip 3x 5 sekunder @ 100mA max. Och resten av tiden @ 100uA) hoppas jag kunna driva min krets i 1 år på samma laddningsbara batterier.
Steg 3: Arduino - ESP12 -delen
Jag gjorde detta projekt i olika steg.
Det finns flera länkar som hjälper dig att importera ESP12 (aka. ESP8266) till Arduino IDE. (Jag var tvungen att använda version 2.3.0 istället för den senaste på grund av ett fel som kan ha lösts under tiden …)
Jag började med att ansluta ESP, över min Arduino UNO (används bara som en brygga mellan min dator via USB till Serial) till ESP seriellt gränssnitt. Det finns separata instruktioner som förklarar detta.
I mitt färdiga projekt lämnade jag kablarna för att ansluta till serien om jag skulle behöva felsöka. RX
Då måste du koppla din ESP12 enligt följande:
ESP -stift …
GND UNO GND
RX UNO RX
TX UNO TX
SV VCC
GPIO15 GND
Inledningsvis försökte jag driva min ESP från 3.3V på UNO men jag gick snabbt över till att driva min ESP med en bänk strömförsörjning men du kan också använda ditt batteri.
GPIO0 Jag kopplade den här med en bygel till GND för att möjliggöra blinkande (= programmering) av ESP.
Första testet: låt bygeln vara öppen och starta en seriell bildskärm i Arduino IDE (vid 115200 baud!).
Slå på ESP, du bör se några skräpkaraktärer och sedan ett meddelande som:
Ai-Thinker Technology Co. Ltd. klar
I det här läget fungerar ESP lite som ett gammaldags modem. Du måste använda AT -kommandon.
Prova följande kommandon:
AT+RST
och följande två kommandon
AT+CWMODE = 3
OK
AT+CWLAP
Detta bör ge dig en lista över alla WiFi -nätverk i området.
Om detta fungerar är du redo för nästa steg.
Steg 4: Testa ESP som NTP -klient (Network Time Protocol)
I Arduino IDE, under Fil, Exempel, ESP8266WiFi, ladda NTPClient.
Mindre tweaks behövs för att det ska fungera; du måste ange ditt SSID och lösenord för ditt WiFi -nätverk.
Placera nu bygeln, kortslut GPIO0 till GND.
Slå på ESP och ladda upp skissen till ESP.
Efter sammanställningen ska uppladdningen till ESP starta. Den blå lysdioden på ESP blinkar snabbt när koden laddas ner.
Jag märkte att jag var tvungen att leka lite med att starta om IDE, starta om ESP innan uppladdningen skulle fungera.
Innan du börjar kompilera/ladda upp skissen, var noga med att stänga seriekonsolen (= seriell bildskärm) eftersom detta hindrar dig från att ladda upp.
När överföringen har lyckats kan du öppna den seriella bildskärmen igen för att se ESP: n effektivt få tid från Internet.
Bra, du har programmerat din ESP, anslutit till din WiFi och fått tid från Internet.
Nästa steg testar vi DHT22.
Steg 5: Testa DHT22 -sensorn
Nu krävs lite extra ledningar.
DHT -stift … Anslut stift 1 (till vänster) på sensorn till VCC (3.3V)
Anslut stift 2 ESP GPIO5 (DHTPIN i skissen)
Anslut stift 4 (till höger) på sensorn till JORD
Anslut ett 10K -motstånd från stift 2 (data) till stift 1 (ström) på sensorn.
I likhet med NTP -testet, hitta DHTtester -skissen och justera den på följande sätt:
#define DHTPIN 5 // vi valde GPIO5 för att ansluta till sensorn#definiera DHTTYPE DHT22 // eftersom vi använder en DHT22 men den här koden/biblioteket är också lämpligt för DHT11
Återigen, stäng den seriella bildskärmen, slå på ESP -enheten och kompilera och blinka ESP.
Om allt går bra bör du se mätningarna på den seriella bildskärmen.
Du kan leka lite med sensorn. Om du andas på det kommer du att se luftfuktigheten stiga.
Om du har en (icke LED) skrivbordslampa kan du lysa på sensorn för att värma upp den lite.
Bra! Två stora delar av sensorn fungerar nu.
I nästa steg kommenterar jag den slutliga koden.
Steg 6: Sätta ihop det …
Återigen lite extra ledningar … detta för att göra DeepSleep möjlig.
Kom ihåg att DeepSleep är en otrolig funktion för IoT -enheter.
Men om din sensor är fastkopplad för DeepSleep kan det vara svårt att omprogrammera ESP så vi kommer att göra en annan bygelförbindelse mellan
GPIO16-RST.
Ja det MÅSTE vara GPIO16, för det är GPIO som är fastkopplad för att väcka enheten när realtidsklockan slocknar efter DeepSleep!
Medan du testar kan du bestämma dig för att göra en DeepSleep på 15 sekunder.
När jag felsökade skulle jag flytta bygeln till GPIO0 så att jag kunde blinka mitt program.
När nedladdningen är klar skulle jag flytta bygeln till GPIO16 så att DeepSleep skulle fungera.
Koden för ESP heter TnHclient.c
Du måste ändra ditt SSID, lösenord och serverns IP -adress.
Det finns extra kodrader som du kan använda för att felsöka eller testa din installation.
Steg 7: Serversidan av saker
Det är ett vanligt missförstånd att UDP är opålitligt och TCP är …
Det är lika dumt som att säga att en hammare är mer användbar än en skruvmejsel. De är helt enkelt väldigt användbara verktyg och de har båda sina användningsområden.
Förresten, utan UDP skulle inte Internet fungera … DNS är baserat på UDP.
Så jag valde UDP eftersom det är väldigt lätt, enkelt och snabbt.
Jag tenderar att tro att min WiFi är mycket pålitlig så att klienten skickar högst 3 UDP -paket om bekräftelsen "OK!" tas inte emot.
C-koden för TnHserver finns i filen TnHServer.c.
Det finns flera kommentarer i koden som förklarar det.
Vi kommer att behöva några extra verktyg på servern: rrdtool, apache och kanske tcpdump.
För att installera rrdtool på Raspbian kan du helt enkelt installera paketet så här: apt-get install rrdtool
Om du behöver felsöka nätverkstrafiken kommer tcpdump till en praktisk apt-get install tcpdump
Jag behövde en webbserver för att kunna använda en webbläsare för att kunna se graferna: apt-get install apache2
Jag använde det här verktyget: https://rrdwizard.appspot.com/index.php för att få kommandot för att skapa Round Robin -databasen. Du behöver bara köra detta en gång (om du gör det rätt första gången).
rrdtool skapa TnHdatabase.rrd-börja nu-10s
-steg '1200'
'DS: Temperatur: MÅLARE: 1200: -20,5: 45,5'
'DS: Luftfuktighet: MÅLARE: 1200: 0: 100,0'
'RRA: MEDEL: 0,5: 1: 720'
'RRA: MEDEL: 0,5: 3: 960'
'RRA: MEDEL: 0,5: 18: 1600'
Slutligen använder jag en crontab -post för att starta om min TnHserver varje dag vid midnatt. Jag kör TnHserver som en normal användare (dvs. INTE root) som en säkerhetsåtgärd.
0 0 * * */usr/bin/pkill TnHserver; /home/user/bin/TnHserver>/dev/null 2> & 1
Du kan kontrollera att TnHserver körs genom att göra
$ ps -elf | grep TnHserver
och du kan verifiera att den lyssnar efter paket på port 7777 genom att göra
$ netstat -anu
Aktiva Internetanslutningar (servrar och etablerade)
Proto Recv-Q Skicka-Q Lokal adress Utländsk adress Stat
udp 0 0 0.0.0.0:7777 0.0.0.0::*
Slutligen är CreateTnH_Graphs.sh.txt ett exempelskript för att generera graferna. (Jag genererar skripten som root, du kanske inte vill göra det här.)
Med en mycket enkel webbsida kan du titta på diagrammen från vilken webbläsare som helst i ditt hemnätverk.
Rekommenderad:
Gränssnitt LM35 temperatursensor med Arduino: 4 steg
Gränssnitt LM35 temperatursensor med Arduino: Termometrar är användbara apparater som används under lång tid för temperaturmätning. I detta projekt har vi gjort en Arduino -baserad digital termometer för att visa den aktuella omgivningstemperaturen och temperaturförändringar på en LCD. Det kan vara tråkigt
DIY temperatursensor med en diod: 3 steg
DIY temperatursensor med hjälp av en diod: Så som en av fakta om PN-korsningar är att deras spänningsfall framåt ändras beroende på strömmen och till korsningstemperaturen, kommer vi att använda detta för att göra en enkel billig temperatursensor .Denna inställning används ofta
Hur man använder DHT22 fukt- och temperatursensor med Arduino: 6 steg
Hur man använder DHT22 fukt- och temperatursensor med Arduino: I denna handledning lär vi oss hur man använder DHT22 fukt- och temperatursensor med Arduino och visar värdena på OLED -skärmen. Se videon
Hur man använder DHT12 I2C fukt- och temperatursensor med Arduino: 7 steg
Hur man använder DHT12 I2C fukt- och temperatursensor med Arduino: I denna handledning lär vi oss hur man använder DHT12 I2C fukt- och temperatursensor med Arduino och visar värdena på OLED -displayen. Se videon
Raspberry Pi SHT25 Luftfuktighets- och temperatursensor Python -handledning: 4 steg
Raspberry Pi SHT25 Luftfuktighets- och temperatursensor Python -handledning: SHT25 I2C Fuktighets- och temperatursensor ± 1,8%RH ± 0,2 ° C I2C minimodul. SHT25-fuktighets- och temperatursensorn med hög noggrannhet har blivit en industristandard när det gäller formfaktor och intelligens, vilket ger kalibrerad, lineariserad sensorsignal