Indholdsfortegnelse:

Hjemmenetværks temperatursensor: 7 trin
Hjemmenetværks temperatursensor: 7 trin

Video: Hjemmenetværks temperatursensor: 7 trin

Video: Hjemmenetværks temperatursensor: 7 trin
Video: The interior atmosphere light belt #LED 2024, November
Anonim
Hjemmenetværks temperatursensor
Hjemmenetværks temperatursensor

Hvad skal du vide for at lave dette projekt:

Du skal vide om:- Nogle elektronikfærdigheder (lodning)

- Linux

- Arduino IDE

(du skal opdatere yderligere tavler i IDE:

- opdatering/programmering af et ESP -kort via Arduino IDE.

(der er nogle gode tutorials tilgængelige på nettet)

Dette kan gøres ved hjælp af en Arduino Uno eller ved hjælp af en FTDI (usb til seriel adapter).

Jeg brugte min Uno, fordi jeg ikke havde nogen seriel port på min pc, og heller ikke havde jeg en FTDI

Trin 1: Gå på indkøb

Gå på indkøb
Gå på indkøb

Hvad skal du bruge for at få dette til at ske?

Til den digitale temperatur- og fugtighedsføler:

- Enten et brødbræt eller et alternativ som prototype PCB, loddemetal, loddejern …

- Noget ledning

- to springere

- en 10k Ohm modstand

- en ESP12F (andre modeller kan også fungere …)

- en DHT22 (lidt dyrere end DHT11 men mere præcis)

- 3 genopladelige AA -batterier og en batteriholder

- en lille plastikæske til at sætte dit projekt i

- På et senere tidspunkt planlægger jeg at tilføje en HT7333 med to 10uF kondensatorer mellem batteripakken og ESP

for at stabilisere indgangsspændingen (VCC) til den anbefalede 3.3V, men også for at beskytte ESP'en mod overspænding.

Til netværksdelen:

- Dit WiFi -hjemmenetværk

For serverdelen:

- Ethvert Linux -baseret system (altid tændt!)

Jeg brugte en Raspberry Pi (som jeg også bruger som server til mine udendørs IP -kameraer.)

- gcc compiler til at kompilere din serverkode

- rrdtool -pakke til lagring af data og generering af grafer

- apache (eller en anden webserver)

Din yndlings -pc eller bærbare computer med Arduino IDE på.

Trin 2: Opsætning og baggrund

Opsætning og baggrund
Opsætning og baggrund

I denne version af en WiFi tilsluttet - for ikke at sige IOT - temperatur- og fugtighedsføler brugte jeg en ESP12F, en DHT22 og en 3 AA batteriholder med genopladelige batterier.

Hvert 20. minut tager ESP en måling fra DHT22 og sender den til en server (en Raspberry Pi) over UDP på mit WiFi -hjemmenetværk. Efter at målingerne er sendt, går ESP i dyb søvn. Det betyder, at kun modulets real -time ur forbliver strømført, hvilket resulterer i en utrolig strømbesparelse. I cirka 5 sekunder kræver modulet cirka 100 mA, og i løbet af de 20 minutter sover der kun 150uA.

Jeg ville ikke bruge nogen internetbaseret service, fordi jeg har min Raspberry Pi, som alligevel altid er tændt, og på denne måde havde jeg også fornøjelsen af at skrive serverdelen.

På serveren (en Raspberry Pi, der kører Raspbian) har jeg skrevet en simpel UDP -lytter (server), som gemmer værdierne i en simpel RRD. (Round Robin Database ved hjælp af RRDtool af Tobias Oetiker.)

Fordelen ved RRDtool er, at du opretter din database én gang, og størrelsen forbliver den samme. Ellers behøver du ikke have en databaseserver (som mySQLd) til at køre i baggrunden. RRDtool giver dig værktøjerne til at oprette databasen og generere graferne.

Min server opretter graferne med jævne mellemrum og viser alt på en meget enkel http -side. Jeg kan konsultere mine aflæsninger med en simpel browser ved at oprette forbindelse til Apache2 webserveren på Raspberry Pi!

Endelig havde jeg ikke en FTDI (USB til Serial), så jeg brugte min Arduino UNO. Du skal forbinde TX'erne og RX'erne og GND'en for ESP og UNO. (Jeg ved, dit instinkt fortæller dig måske at krydse RX'er og TX'er … prøvede det også, virker ikke.)

Jeg lavede ikke en niveaukonvertering (UNO: Høj = 5V, men ESP er dybest set en 3.3V -enhed … Der er nogle fine FTDI'er på markedet, hvor du endda kan vælge dit høje niveau til 5 eller 3.3V.

Mit kredsløb drives af 3 genopladelige AA -batterier - så faktisk 3 X 1,2V. I en senere fase har jeg til hensigt at sætte en HT7333 mellem batteripakken og kredsløbet for sikkerheden; nyopladede batterier kan have mere end 1,2V, og ESP'en skal forsynes med min. 3V og maks. 3,6V. Også hvis jeg beslutter mig - i et øjeblik med svaghed - for at sætte alkaliske batterier i (3 X 1.5V = 4.5V), bliver min ESP ikke stegt!

Jeg overvejede også at bruge et 10 cm x 10 cm solpanel, men det var bare ikke besværet værd. Ved at foretage 3 målinger i timen (grundlæggende 3x 5 sekunder @ maks. 100mA og resten af tiden @ 100uA) håber jeg at tænde mit kredsløb i 1 år på de samme genopladelige batterier.

Trin 3: Arduino - ESP12 del

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

Jeg lavede dette projekt i forskellige trin.

Der er flere links, der hjælper dig med at importere ESP12 (aka. ESP8266) til Arduino IDE. (Jeg var nødt til at bruge version 2.3.0 i stedet for den nyeste på grund af en fejl, der muligvis var blevet løst i mellemtiden …)

Jeg startede med at tilslutte ESP'en, over min Arduino UNO (bruges kun som en bro mellem min pc via USB til Serial) til ESP serielt interface. Der er separate instruktioner, der forklarer dette.

I mit færdige projekt forlod jeg ledningerne for at oprette forbindelse til serienummeret, hvis jeg nogensinde skulle få fejlfinding. RX

Derefter skal du tilslutte din ESP12 som følger:

ESP pins …

GND UNO GND

RX UNO RX

TX UNO TX

DA VCC

GPIO15 GND

Oprindeligt forsøgte jeg at tænde min ESP fra 3.3V på UNO, men jeg gik hurtigt over til at tænde min ESP med en bænkstrømforsyning, men du kan også bruge din batteripakke.

GPIO0 Jeg tilsluttede denne med en jumper til GND for at muliggøre blinkende (= programmering) af ESP.

Første test: lad jumperen stå åben, og start en seriel skærm i Arduino IDE (ved 115200 baud!).

Tænd for ESP'en, du skulle se nogle skraldetegn og derefter en besked som:

Ai-Thinker Technology Co. Ltd. klar

I denne tilstand fungerer ESP lidt som et gammeldags modem. Du skal bruge AT -kommandoer.

Prøv følgende kommandoer:

AT+RST

og de følgende to kommandoer

AT+CWMODE = 3

Okay

AT+CWLAP

Dette skulle give dig en liste over alle WiFi -netværk i området.

Hvis dette virker, er du klar til det næste trin.

Trin 4: Test af ESP som en Network Time Protocol (NTP) -klient

Test af ESP som en Network Time Protocol (NTP) -klient
Test af ESP som en Network Time Protocol (NTP) -klient
Test af ESP som en Network Time Protocol (NTP) -klient
Test af ESP som en Network Time Protocol (NTP) -klient

I Arduino IDE, under Fil, eksempler, ESP8266WiFi, indlæse NTPClient.

Mindre justeringer er nødvendige for at få det til at fungere; du skal indtaste dit SSID og adgangskode til dit WiFi -netværk.

Placer nu jumperen, og kortslut GPIO0 til GND.

Tænd for ESP'en, og upload skitsen til ESP.

Efter kompilering skal upload til ESP starte. Den blå LED på ESP blinker hurtigt, når koden downloades.

Jeg lagde mærke til, at jeg var nødt til at lege lidt med at genstarte IDE'en, genstarte ESP'en, før upload ville fungere.

Inden du begynder at kompilere/uploade skitsen, skal du sørge for at lukke den serielle konsol (= seriel skærm), da dette forhindrer dig i at uploade.

Når overførslen er lykkedes, kan du genåbne den serielle skærm for at se ESP'en effektivt få tiden fra Internettet.

Fantastisk, du har programmeret dit ESP, tilsluttet din WiFi og fået tiden fra Internettet.

Næste trin tester vi DHT22.

Trin 5: Test af DHT22 -sensoren

Test af DHT22 -sensoren
Test af DHT22 -sensoren

Nu kræves nogle ekstra ledninger.

DHT -ben… Tilslut pin 1 (til venstre) på sensoren til VCC (3.3V)

Tilslut pin 2 ESP GPIO5 (DHTPIN i skitsen)

Tilslut pin 4 (til højre) på sensoren til GROUND

Tilslut en 10K modstand fra pin 2 (data) til pin 1 (strøm) på sensoren.

Ligesom NTP -testen skal du finde DHTtester -skitsen og justere den på følgende måde:

#define DHTPIN 5 // vi valgte GPIO5 for at oprette forbindelse til sensoren#definere DHTTYPE DHT22 // da vi bruger en DHT22, men denne kode/bibliotek er også velegnet til DHT11

Igen skal du lukke den serielle skærm, slukke for ESP'en og kompilere og blinke ESP'en.

Hvis alt går godt, skal du se målingerne på den serielle skærm.

Du kan lege lidt med sensoren. Hvis du trækker vejret på det, vil du se fugtigheden stige.

Hvis du har en (ikke LED) bordlampe, kan du skinne på sensoren for at varme den lidt op.

Store! To store dele af sensoren fungerer nu.

I det næste trin kommenterer jeg den endelige kode.

Trin 6: Sæt det sammen …

Sætter det sammen…
Sætter det sammen…

Igen nogle ekstra ledninger … dette er for at gøre DeepSleep mulig.

Husk, DeepSleep er en utrolig funktion til IoT -enheder.

Men hvis din sensor er hardwired til DeepSleep, kan det være svært at omprogrammere ESP'en, så vi skal lave en anden jumperforbindelse mellem

GPIO16-RST.

Ja det SKAL være GPIO16, for det er den GPIO, der er hardwired til at vække enheden, når realtidsuret går ud efter DeepSleep!

Mens du tester, kan du beslutte dig for at lave en 15 sekunders DeepSleep.

Når jeg debugging, ville jeg flytte jumperen til GPIO0, så jeg kunne blinke mit program.

Efter download var færdig, ville jeg flytte jumperen til GPIO16, så DeepSleep ville fungere.

Koden til ESP hedder TnHclient.c

Du skal ændre dit SSID, adgangskode og IP -adressen på din server.

Der er ekstra kodelinjer, som du kan bruge til fejlfinding eller test af dit setup.

Trin 7: Serverens side af ting

Serverens side af tingene
Serverens side af tingene
Serverens side af tingene
Serverens side af tingene

Det er en almindelig misforståelse, at UDP er upålidelig, og TCP er …

Det er lige så fjollet som at sige, at en hammer er mere nyttig end en skruetrækker. De er simpelthen forskellige meget nyttige værktøjer, og de har begge deres anvendelser.

Forresten, uden UDP ville Internettet ikke fungere … DNS er baseret på UDP.

Så jeg valgte UDP, fordi det er meget let, let og hurtigt.

Jeg har en tendens til at tro, at min WiFi er meget pålidelig, så klienten sender højst 3 UDP -pakker, hvis kvitteringen "OK!" ikke modtages.

C-koden for TnHserver findes i filen TnHServer.c.

Der er flere kommentarer i koden, der forklarer det.

Vi skal bruge nogle ekstra værktøjer på serveren: rrdtool, apache og måske tcpdump.

For at installere rrdtool på Raspbian kan du blot installere pakken sådan: apt-get install rrdtool

Hvis du har brug for at fejlsøge netværkstrafikken, kommer tcpdump i praktisk apt-get install tcpdump

Jeg havde brug for en webserver for at kunne bruge en browser for at se graferne: apt-get install apache2

Jeg brugte dette værktøj: https://rrdwizard.appspot.com/index.php for at få kommandoen til at oprette Round Robin -databasen. Du behøver kun at køre dette én gang (hvis du får det rigtigt første gang).

rrdtool opret TnHdatabase.rrd-start nu-10s

-trin '1200'

'DS: Temperatur: MÅLER: 1200: -20,5: 45,5'

'DS: Fugtighed: MÅLER: 1200: 0: 100.0'

'RRA: Gennemsnit: 0,5: 1: 720'

'RRA: Gennemsnit: 0,5: 3: 960'

'RRA: Gennemsnit: 0,5: 18: 1600'

Endelig bruger jeg en crontab -post til at genstarte min TnHserver hver dag ved midnat. Jeg kører TnHserver som en normal bruger (dvs. IKKE root) som en sikkerhedsforanstaltning.

0 0 * * */usr/bin/pkill TnHserver; /home/user/bin/TnHserver>/dev/null 2> & 1

Du kan kontrollere, at TnHserver kører ved at gøre

$ ps -elf | grep TnHserver

og du kan kontrollere, at den lytter efter pakker på port 7777 ved at gøre

$ netstat -anu

Aktive internetforbindelser (servere og etablerede)

Proto Recv-Q Send-Q Lokal adresse Udenlandsk adresse Stat

udp 0 0 0.0.0.0:7777 0.0.0.0::*

Endelig er CreateTnH_Graphs.sh.txt et eksempelskript til at generere graferne. (Jeg genererer scripts som root, du vil måske ikke gøre dette.)

Ved hjælp af en meget enkel webside kan du se graferne fra enhver browser på dit hjemmenetværk.

Anbefalede: