Innholdsfortegnelse:

Hjemmenettverks temperatursensor: 7 trinn
Hjemmenettverks temperatursensor: 7 trinn

Video: Hjemmenettverks temperatursensor: 7 trinn

Video: Hjemmenettverks temperatursensor: 7 trinn
Video: #10 Как запрограммировать ПЛК Outseal Arduino — сравнение 2024, November
Anonim
Temperatursensor for hjemmenettverk
Temperatursensor for hjemmenettverk

Hva trenger du å vite for å gjøre dette prosjektet:

Du trenger å vite om:- Noen elektronikkferdigheter (lodding)

- Linux

- Arduino IDE

(du må oppdatere flere tavler i IDE:

- oppdatering/programmering av et ESP -kort via Arduino IDE.

(det er noen fine opplæringsprogrammer tilgjengelig på nettet)

Dette kan gjøres ved hjelp av en Arduino Uno eller ved bruk av en FTDI (usb til seriell adapter).

Jeg brukte min Uno fordi jeg ikke hadde noen seriell port på min PC og heller ikke hadde en FTDI

Trinn 1: Gå på shopping

Shoppe
Shoppe

Hva trenger du for å få dette til?

For den digitale temperatur- og fuktighetssensoren:

- Enten et brødbrett eller et alternativ som prototype PCB, loddetinn, loddejern …

- Noen ledninger

- to hoppere

- en 10k Ohm motstand

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

- en DHT22 (litt dyrere enn DHT11, men mer nøyaktig)

- 3 AA oppladbare batterier og en batteriholder

- en liten plastboks for å sette prosjektet i

- På et senere tidspunkt planlegger jeg å legge til en HT7333 med to 10uF kondensatorer mellom batteripakken og ESP

for å stabilisere inngangsspenningen (VCC) til anbefalt 3,3V, men også for å beskytte ESP mot overspenning.

For nettverksdelen:

- WiFi -nettverket ditt hjemme

For serverdelen:

- Et hvilket som helst Linux -basert system (alltid på!)

Jeg brukte en Raspberry Pi (som jeg også bruker som server for mine utendørs IP -kameraer.)

- gcc -kompilator for å kompilere serverkoden din

- rrdtool -pakke for å lagre data og generere grafer

- apache (eller en annen webserver)

Din favoritt -PC eller bærbare datamaskin med Arduino IDE på.

Trinn 2: Oppsett og bakgrunn

Oppsett og bakgrunn
Oppsett og bakgrunn

I denne versjonen av en WiFi tilkoblet - for ikke å si IOT - temperatur- og fuktighetssensor brukte jeg en ESP12F, en DHT22 og en 3 AA batteriholder med oppladbare batterier.

Hvert 20. minutt tar ESP en måling fra DHT22 og sender den til en server (en Raspberry Pi) over UDP på mitt hjemlige WiFi -nettverk. Etter at målingene er sendt, sovner ESP. Dette betyr at bare sanntidsklokken til modulen forblir drevet, noe som resulterer i en utrolig strømbesparelse. I omtrent 5 sekunder krever modulen omtrent 100mA, og i løpet av de 20 minuttene sover den bare 150uA.

Jeg ønsket ikke å bruke noen internettbasert tjeneste fordi jeg har min Raspberry Pi som alltid er på, og på denne måten hadde jeg gleden av å skrive serverdelen også.

På serveren (en Raspberry Pi som kjører Raspbian) har jeg skrevet en enkel UDP -lytter (server) som lagrer verdiene i en enkel RRD. (Round Robin -database med RRDtool av Tobias Oetiker.)

Fordelen med RRDtool er at du oppretter databasen din en gang, og størrelsen forblir den samme. Ellers trenger du ikke ha en databaseserver (som mySQLd) som kjører i bakgrunnen. RRDtool gir deg verktøyene til å lage databasen og generere grafer.

Serveren min lager grafene med jevne mellomrom og viser alt på en veldig enkel http -side. Jeg kan konsultere lesningene mine med en enkel nettleser ved å koble til Apache2 webserver på Raspberry Pi!

Til slutt hadde jeg ikke en FTDI (USB til Serial), så jeg brukte min Arduino UNO. Du må koble TX og RX og GND for ESP og UNO. (Jeg vet, instinktet ditt kan fortelle deg å krysse RX og TX … prøvde det også, fungerer ikke.)

Jeg gjorde ikke en nivåkonvertering (UNO: High = 5V, men ESP er i utgangspunktet en 3.3V -enhet … Det er noen fine FTDI -er på markedet hvor du til og med kan velge High Level til 5 eller 3.3V.

Kretsen min drives av 3 AA oppladbare batterier - så faktisk 3 X 1,2V. I en senere fase har jeg tenkt å sette en HT7333 mellom batteripakken og kretsen for sikkerhet; nylig ladede batterier kan ha mer enn 1,2V, og ESP bør drives med min. 3V og maks. 3,6V. Også hvis jeg bestemmer meg - i et øyeblikk av svakhet - for å sette inn alkaliske batterier (3 X 1.5V = 4.5V) vil ikke ESP -en min bli stekt!

Jeg vurderte også å bruke et 10 cm x 10 cm solcellepanel, men det var bare ikke verdt bryet. Ved å gjøre 3 målinger i timen (i utgangspunktet 3x 5 sekunder @ 100mA maks. Og resten av tiden @ 100uA), håper jeg å få strømkretsen min i 1 år på de samme oppladbare batteriene.

Trinn 3: Arduino - ESP12 -delen

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

Jeg gjorde dette prosjektet i forskjellige trinn.

Det er flere lenker som hjelper deg med å importere ESP12 (aka. ESP8266) til Arduino IDE. (Jeg måtte bruke versjon 2.3.0 i stedet for den siste på grunn av en feil som kan ha blitt løst i mellomtiden …)

Jeg begynte med å koble til ESP, over min Arduino UNO (bare brukt som en bro mellom min PC via USB til Serial) til ESP serielt grensesnitt. Det er separate instrukser som forklarer dette.

I mitt ferdige prosjekt forlot jeg ledningene for å koble til serienummeret i tilfelle jeg noen gang trenger å feilsøke. RX

Deretter må du koble ESP12 slik:

ESP -pinner …

GND UNO GND

RX UNO RX

TX UNO TX

NO VCC

GPIO15 GND

Opprinnelig prøvde jeg å slå ESP -en min fra 3.3V på UNO, men jeg gikk raskt over til å drive ESP -en min med en strømforsyning, men du kan også bruke batteripakken.

GPIO0 Jeg koblet denne med en jumper til GND for å aktivere blinkende (= programmering) av ESP.

Første test: la hopperen stå åpen og starte en seriell skjerm i Arduino IDE (ved 115200 baud!).

Slå strøm på ESP, du bør se noen søppelkarakterer og deretter en melding som:

Ai-Thinker Technology Co. Ltd. klar

I denne modusen fungerer ESP litt som et gammeldags modem. Du må bruke AT -kommandoer.

Prøv følgende kommandoer:

AT+RST

og de følgende to kommandoene

AT+CWMODE = 3

OK

AT+CWLAP

Dette bør gi deg en liste over alle WiFi -nettverk i området.

Hvis dette fungerer, er du klar for neste trinn.

Trinn 4: Testing av ESP som en Network Time Protocol (NTP) -klient

Testing av ESP som en Network Time Protocol (NTP) -klient
Testing av ESP som en Network Time Protocol (NTP) -klient
Testing av ESP som en Network Time Protocol (NTP) -klient
Testing av ESP som en Network Time Protocol (NTP) -klient

Last ned NTPClient i Arduino IDE, under Fil, eksempler, ESP8266WiFi.

Mindre tilpasninger er nødvendig for å få det til å fungere; du må legge inn SSID og passord for WiFi -nettverket.

Plasser nå hopperen og kortslut GPIO0 til GND.

Slå på ESP og slå opp skissen til ESP.

Etter samlingen bør opplastingen til ESP starte. Den blå LED -en på ESP blinker raskt når koden lastes ned.

Jeg la merke til at jeg måtte leke litt med å starte IDE på nytt, starte ESP på nytt før opplastingen ville fungere.

Før du begynner å kompilere/laste opp skissen, må du lukke seriekonsollen (= seriell skjerm) fordi dette forhindrer deg i å laste opp.

Når opplastingen har lykkes, kan du åpne den serielle skjermen på nytt for å se at ESP effektivt får tid fra Internett.

Flott, du har programmert ESP, koblet til WiFi og fått tid fra Internett.

Neste trinn vil vi teste DHT22.

Trinn 5: Testing av DHT22 -sensoren

Testing av DHT22 -sensoren
Testing av DHT22 -sensoren

Nå kreves det noen ekstra ledninger.

DHT -pinner … Koble pin 1 (til venstre) på sensoren til VCC (3.3V)

Koble pin 2 ESP GPIO5 (DHTPIN i skissen)

Koble pinne 4 (til høyre) på sensoren til JORD

Koble en 10K motstand fra pin 2 (data) til pin 1 (power) på sensoren.

I likhet med NTP -testen, finn DHTtester -skissen, og juster den på følgende måte:

#define DHTPIN 5 // vi valgte GPIO5 for å koble til sensoren#definere DHTTYPE DHT22 // siden vi bruker en DHT22, men denne koden/biblioteket er også egnet for DHT11

Igjen, lukk den serielle skjermen, slå på ESP og slå på ESP.

Hvis alt går bra, bør du se målingene vises på den serielle skjermen.

Du kan leke litt med sensoren. Hvis du puster på den, vil du se fuktigheten stige.

Hvis du har en (ikke LED) skrivebordslampe, kan du skinne på sensoren for å varme den opp litt.

Flott! To store deler av sensoren fungerer nå.

I neste trinn vil jeg kommentere den endelige koden.

Trinn 6: Sette det sammen …

Sette det sammen…
Sette det sammen…

Igjen noen ekstra ledninger … dette er for å gjøre DeepSleep mulig.

Husk at DeepSleep er en utrolig funksjon for IoT -enheter.

Men hvis sensoren din er koblet til DeepSleep, kan det være vanskelig å omprogrammere ESP, så vi kommer til å opprette en ny jumper -forbindelse mellom

GPIO16-RST.

Ja det MÅ være GPIO16, for det er GPIO som er hardwired for å vekke enheten når sanntidsklokken går etter DeepSleep!

Mens du tester, kan du bestemme deg for å gjøre en DeepSleep på 15 sekunder.

Når jeg feilsøkte, ville jeg flytte hopperen til GPIO0 slik at jeg kunne blinke programmet mitt.

Når nedlastingen var fullført, ville jeg flytte hopperen til GPIO16 slik at DeepSleep ville fungere.

Koden for ESP kalles TnHclient.c

Du må endre SSID, passord og IP -adressen til serveren din.

Det er ekstra kodelinjer du kan bruke til å feilsøke eller teste oppsettet ditt.

Trinn 7: Serversiden av ting

Serverens side av ting
Serverens side av ting
Serverens side av ting
Serverens side av ting

Det er en vanlig misforståelse at UDP er upålitelig og TCP er …

Det er like dumt som å si at en hammer er mer nyttig enn en skrutrekker. De er ganske enkelt forskjellige veldig nyttige verktøy, og de har begge sine bruksområder.

Forresten, uten UDP ville ikke Internett fungert … DNS er basert på UDP.

Så jeg valgte UDP fordi det er veldig lett, enkelt og raskt.

Jeg pleier å tro at WiFi -en min er veldig pålitelig, så klienten sender maksimalt 3 UDP -pakker hvis bekreftelsen "OK!" er ikke mottatt.

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

Det er flere kommentarer i koden som forklarer det.

Vi trenger noen ekstra verktøy på serveren: rrdtool, apache og kanskje tcpdump.

For å installere rrdtool på Raspbian kan du ganske enkelt installere pakken slik: apt-get install rrdtool

Hvis du trenger å feilsøke nettverkstrafikken, kommer tcpdump til en praktisk apt-get install tcpdump

Jeg trengte en webserver for å kunne bruke en nettleser for å se grafene: apt-get install apache2

Jeg brukte dette verktøyet: https://rrdwizard.appspot.com/index.php for å få kommandoen for å lage Round Robin -databasen. Du trenger bare å kjøre dette en gang (hvis du får det riktig første gangen).

rrdtool opprett TnHdatabase.rrd-start nå-10s

-trinn '1200'

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

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

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

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

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

Til slutt bruker jeg en crontab -oppføring for å starte TnHserver på nytt hver dag ved midnatt. Jeg kjører TnHserver som en vanlig bruker (dvs. IKKE root) som en sikkerhetsforanstaltning.

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

Du kan kontrollere at TnHserver kjører ved å gjøre

$ ps -elf | grep TnHserver

og du kan bekrefte at den lytter etter pakker på port 7777 ved å gjøre

$ netstat -anu

Aktive Internett -tilkoblinger (servere og etablerte)

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

udp 0 0 0.0.0.0:7777 0.0.0.0::*

Til slutt er CreateTnH_Graphs.sh.txt et eksempelskript for å generere grafene. (Jeg genererer skriptene som root, det er ikke sikkert du vil gjøre dette.)

Ved å bruke en veldig enkel webside kan du se grafene fra hvilken som helst nettleser på hjemmenettverket.

Anbefalt: