Innehållsförteckning:

Hemnätets temperatursensor: 7 steg
Hemnätets temperatursensor: 7 steg

Video: Hemnätets temperatursensor: 7 steg

Video: Hemnätets temperatursensor: 7 steg
Video: Как запрограммировать ПЛК Outseal Arduino — ROTON и SPWM 2024, November
Anonim
Hemnätets temperatursensor
Hemnätets temperatursensor

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

Gå och handla
Gå och handla

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

Setup och bakgrund
Setup 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

Arduino - ESP12 del
Arduino - ESP12 del
Arduino - ESP12 del
Arduino - ESP12 del

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)

Testa ESP som NTP -klient (Network Time Protocol)
Testa ESP som NTP -klient (Network Time Protocol)
Testa ESP som NTP -klient (Network Time Protocol)
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

Testar DHT22 -sensorn
Testar 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 …

Sätta ihop det…
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

Serverns sida av saker
Serverns sida av saker
Serverns sida av saker
Serverns sida 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: