Thuisnetwerk temperatuursensor: 7 stappen
Thuisnetwerk temperatuursensor: 7 stappen
Anonim
Thuisnetwerk temperatuursensor
Thuisnetwerk temperatuursensor

Wat moet je weten om dit project te maken:

U moet weten over: - Enige elektronicavaardigheden (solderen)

- Linux

- Arduino IDE

(je moet extra boards in de IDE bijwerken:

- updaten/programmeren van een ESP-bord via de Arduino IDE.

(er zijn enkele leuke tutorials beschikbaar op internet)

Dit kan met een Arduino Uno of met een FTDI (usb to serial adapter).

Ik heb mijn Uno gebruikt omdat ik geen seriële poort op mijn pc had en ook geen FTDI

Stap 1: Ga winkelen

Ga winkelen
Ga winkelen

Wat heb je nodig om dit mogelijk te maken?

Voor de digitale temperatuur- en vochtigheidssensor:

- Ofwel een breadboard of een alternatief zoals prototype pcb, soldeer, soldeerbout …

- Wat draad

- twee truien

- een weerstand van 10k Ohm

- een ESP12F (andere modellen werken misschien ook…)

- een DHT22 (iets duurder dan de DHT11 maar nauwkeuriger)

- 3 oplaadbare AA-batterijen en een batterijhouder

- een kleine plastic doos om je project in te stoppen

- In een later stadium ben ik van plan om een HT7333 toe te voegen met twee 10uF condensatoren tussen het batterijpakket en de ESP

om de ingangsspanning (VCC) te stabiliseren tot de aanbevolen 3,3V, maar ook om de ESP te beschermen tegen overspanning.

Voor het netwerkgedeelte:

- Uw wifi-thuisnetwerk

Voor het servergedeelte:

- Elk op Linux gebaseerd systeem (altijd aan!)

Ik gebruikte een Raspberry Pi (die ik ook gebruik als server voor mijn Outdoor IP-camera's.)

- gcc-compiler om uw servercode te compileren

- rrdtool-pakket om de gegevens op te slaan en grafieken te genereren

- apache (of een andere webserver)

Je favoriete pc of laptop met Arduino IDE erop.

Stap 2: Setup en achtergrond

Installatie en achtergrond
Installatie en achtergrond

In deze versie van een met wifi verbonden - om niet te zeggen IOT - temperatuur- en vochtigheidssensor gebruikte ik een ESP12F, een DHT22 en een 3 AA-batterijhouder met oplaadbare batterijen.

Elke 20 minuten neemt de ESP een meting van de DHT22 en stuurt deze naar een server (een Raspberry Pi) via UDP op mijn wifi-thuisnetwerk. Nadat de metingen zijn verzonden, gaat de ESP in diepe slaap. Dit betekent dat alleen de Real Time Clock van de module gevoed blijft, wat resulteert in een ongelooflijke energiebesparing. Voor ongeveer 5 seconden heeft de module ongeveer 100mA nodig, daarna tijdens de 20 minuten diepe slaap slechts 150uA.

Ik wilde geen op internet gebaseerde service gebruiken omdat ik mijn Raspberry Pi heb die toch altijd aan staat en op deze manier had ik het genoegen om ook het servergedeelte te schrijven.

Op de server (een Raspberry Pi met Raspbian) heb ik een eenvoudige UDP-listener (server) geschreven die de waarden opslaat in een eenvoudige RRD. (Round Robin-database met RRDtool van Tobias Oetiker.)

Het voordeel van RRDtool is dat u uw database eenmalig aanmaakt en de grootte gelijk blijft. Ook hoeft u geen databaseserver (zoals mySQLd) op de achtergrond te hebben draaien. RRDtool geeft u de tools om de database te maken en de grafieken te genereren.

Mijn server maakt de grafieken op periodieke basis en toont alles in een zeer eenvoudige http-pagina. Ik kan mijn metingen raadplegen met een eenvoudige browser door verbinding te maken met de Apache2-webserver op de Raspberry Pi!

Ten slotte had ik geen FTDI (USB naar serieel), dus ik gebruikte mijn Arduino UNO. Je moet de TX's en de RX's en de GND van de ESP en de UNO aansluiten. (Ik weet het, je instinct zou je kunnen vertellen om RX's en TX's te kruisen … heb het ook geprobeerd, werkt niet.)

Ik heb geen niveauconversie gedaan (UNO: High=5V maar ESP is in feite een 3.3V-apparaat… Er zijn enkele mooie FTDI's op de markt waar je zelfs je High-niveau kunt selecteren op 5 of 3.3V.

Mijn circuit wordt gevoed door 3 oplaadbare AA-batterijen - dus in feite 3 X 1.2V. In een latere fase ben ik van plan om voor de veiligheid een HT7333 tussen het accupakket en de schakeling te plaatsen; nieuw opgeladen batterijen kunnen meer dan 1,2 V hebben en de ESP moet worden gevoed met min. 3V en max. 3.6V. Ook als ik besluit - in een moment van zwakte - om Alkaline batterijen (3 X 1.5V = 4.5V) te plaatsen, zal mijn ESP niet worden gebakken!

Ik heb ook overwogen om een zonnepaneel van 10 cm x 10 cm te gebruiken, maar het was het gedoe gewoon niet waard. Door 3 metingen per uur te doen (eigenlijk 3x 5 seconden @ 100mA max. en de rest van de tijd @100uA), hoop ik mijn circuit 1 jaar van stroom te voorzien op dezelfde oplaadbare batterijen.

Stap 3: Het Arduino - ESP12-onderdeel

Het Arduino - ESP12-onderdeel
Het Arduino - ESP12-onderdeel
Het Arduino - ESP12-onderdeel
Het Arduino - ESP12-onderdeel

Ik heb dit project in verschillende stappen gedaan.

Er zijn verschillende links die u helpen om de ESP12 (ook bekend als ESP8266) in de Arduino IDE te importeren. (Ik moest de versie 2.3.0 gebruiken in plaats van de nieuwste vanwege een bug die ondertussen misschien was opgelost …)

Ik begon met het aansluiten van de ESP, via mijn Arduino UNO (alleen gebruikt als een brug tussen mijn pc via USB naar de seriële) naar de ESP seriële interface. Er zijn aparte Instructables waarin dit wordt uitgelegd.

In mijn voltooide project heb ik de draden achtergelaten om verbinding te maken met de seriële voor het geval ik ooit problemen moet oplossen. RX

Dan moet je je ESP12 als volgt bedraden:

ESP-pinnen…

GND UNO GND

RX UNO RX

TX UNO TX

NL VCC

GPIO15 GND

Aanvankelijk probeerde ik mijn ESP van de 3.3V op de UNO te voorzien, maar ik ging snel over naar het voeden van mijn ESP met een bankvoeding, maar je kunt ook je batterij gebruiken.

GPIO0 Deze heb ik met een jumper op GND aangesloten om het knipperen (= programmeren) van de ESP mogelijk te maken.

Eerste test: laat de jumper open en start een seriële monitor in de Arduino IDE (op 115200 baud!).

Schakel de ESP uit, je zou wat onzinkarakters moeten zien en dan een bericht als:

Klaar voor Ai-Thinker Technology Co. Ltd

In deze modus gedraagt de ESP zich een beetje als een ouderwets modem. U moet AT-commando's gebruiken.

Probeer de volgende opdrachten:

AT+RST

en de volgende twee opdrachten:

AT+CWMODE=3

Oke

AT+CWLAP

Dit zou u een lijst moeten geven van alle wifi-netwerken in de omgeving.

Als dit werkt, ben je klaar voor de volgende stap.

Stap 4: De ESP testen als een Network Time Protocol (NTP)-client

De ESP testen als een Network Time Protocol (NTP)-client
De ESP testen als een Network Time Protocol (NTP)-client
De ESP testen als een Network Time Protocol (NTP)-client
De ESP testen als een Network Time Protocol (NTP)-client

In de Arduino IDE, onder Bestand, Voorbeelden, ESP8266WiFi, laad NTPClient.

Er zijn kleine aanpassingen nodig om het te laten werken; u moet uw SSID en wachtwoord van uw WiFi-netwerk invoeren.

Plaats nu de jumper, waarbij GPIO0 wordt kortgesloten naar GND.

Schakel de ESP uit en upload de schets naar de ESP.

Na de compilatie zou het uploaden naar de ESP moeten beginnen. De blauwe LED op de ESP knippert snel terwijl de code wordt gedownload.

Ik merkte dat ik een beetje moest spelen met het herstarten van de IDE, het herstarten van de ESP voordat het uploaden zou werken.

Voordat je begint met het compileren/uploaden van de schets, moet je de seriële console (=seriële monitor) sluiten, omdat je dan de upload niet kunt doen.

Zodra het uploaden is gelukt, kunt u de seriële monitor opnieuw openen om te zien dat de ESP effectief de tijd van internet haalt.

Geweldig, je hebt je ESP geprogrammeerd, verbonden met je wifi en hebt de tijd van internet gehaald.

De volgende stap zullen we de DHT22 testen.

Stap 5: De DHT22-sensor testen

De DHT22-sensor testen
De DHT22-sensor testen

Nu is er wat extra bedrading nodig.

DHT-pinnen … Sluit pin 1 (aan de linkerkant) van de sensor aan op VCC (3,3 V)

Sluit pin 2 ESP GPIO5 aan (DHTPIN in de schets)

Sluit pin 4 (aan de rechterkant) van de sensor aan op GROUND

Sluit een weerstand van 10K aan van pin 2 (data) naar pin 1 (voeding) van de sensor.

Vergelijkbaar met de NTP-test, zoek de DHTtester-schets en pas deze op de volgende manier aan:

#define DHTPIN 5 // we hebben GPIO5 geselecteerd om verbinding te maken met de sensor#define DHTTYPE DHT22 // omdat we een DHT22 gebruiken, maar deze code/bibliotheek is ook geschikt voor DHT11

Sluit nogmaals de seriële monitor, schakel de ESP uit en compileer en flash de ESP.

Als alles goed gaat, zou u de metingen in de seriële monitor moeten zien verschijnen.

Je kunt een beetje spelen met de sensor. Als je erop ademt, zie je de luchtvochtigheid stijgen.

Als je een (niet-led) bureaulamp hebt, kun je op de sensor schijnen om deze een beetje op te warmen.

Super goed! Twee grote delen van de sensor werken nu.

In de volgende stap zal ik commentaar geven op de uiteindelijke code.

Stap 6: Samenvoegen…

Samenvoegen…
Samenvoegen…

Wederom wat extra bedrading… dit is om de DeepSleep mogelijk te maken.

Onthoud dat DeepSleep een ongelooflijke functie is voor IoT-apparaten.

Als uw sensor echter bedraad is voor DeepSleep, kan het moeilijk zijn om de ESP te herprogrammeren, dus gaan we een andere jumperverbinding maken tussen

GPIO16-RST.

Ja, het MOET GPIO16 zijn, want dat is de GPIO die bedraad is om het apparaat te wekken wanneer de Real Time Clock afgaat na de DeepSleep!

Terwijl je aan het testen bent, kun je besluiten om een DeepSleep van 15 seconden te doen.

Toen ik aan het debuggen was, zou ik de jumper naar GPIO0 verplaatsen, zodat ik mijn programma kon flashen.

Nadat het downloaden was voltooid, zou ik de jumper naar GPIO16 verplaatsen zodat DeepSleep zou werken.

De code voor de ESP heet TnHclient.c

U moet uw SSID, wachtwoord en het IP-adres van uw server wijzigen.

Er zijn extra regels code die u kunt gebruiken om problemen met uw installatie op te lossen of te testen.

Stap 7: De serverkant van de dingen

De serverkant van de dingen
De serverkant van de dingen
De serverkant van de dingen
De serverkant van de dingen

Het is een veelvoorkomend misverstand dat UDP onbetrouwbaar is en TCP…

Dat is net zo dwaas als zeggen dat een hamer nuttiger is dan een schroevendraaier. Het zijn gewoon verschillende, zeer nuttige tools en ze hebben allebei hun nut.

Trouwens, zonder UDP zou het internet niet werken… DNS is gebaseerd op UDP.

Dus koos ik voor UDP omdat het erg licht, gemakkelijk en snel is.

Ik heb de neiging om te denken dat mijn wifi erg betrouwbaar is, dus de client zal maximaal 3 UDP-pakketten verzenden als de bevestiging "OK!" wordt niet ontvangen.

De C-code voor de TnHserver staat in het bestand TnHServer.c.

Er zijn verschillende opmerkingen in de code die dit uitleggen.

We hebben wat extra tools nodig op de server: rrdtool, apache en misschien tcpdump.

Om rrdtool op Raspbian te installeren, kunt u het pakket eenvoudig als volgt installeren: apt-get install rrdtool

Als u het netwerkverkeer moet debuggen, is tcpdump handig apt-get install tcpdump

Ik had een webserver nodig om een browser te kunnen gebruiken om de grafieken te raadplegen: apt-get install apache2

Ik gebruikte deze tool: https://rrdwizard.appspot.com/index.php om de opdracht te krijgen om de Round Robin-database te maken. U hoeft dit maar één keer uit te voeren (als u het de eerste keer goed doet).

rrdtool maak TnHdatabase.rrd --start nu-10s

--stap '1200'

'DS:Temperatuur:GAUGE:1200:-20.5:45.5'

'DS:Vochtigheid:GAUGE:1200:0:100.0'

'RRA:GEMIDDELDE:0.5:1:720'

'RRA:GEMIDDELDE:0.5:3:960'

'RRA:GEMIDDELDE:0.5:18:1600'

Ten slotte gebruik ik een crontab-item om mijn TnHserver elke dag om middernacht opnieuw op te starten. Ik stel de TnHserver als een normale gebruiker (dwz NIET root) als veiligheidsmaatregel in werking.

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

U kunt controleren of de TnHserver actief is door te doen:

$ ps -elf | grep TnHserver

en je kunt controleren of het luistert naar pakketten op poort 7777 door te doen:

$ netstat -anu

Actieve internetverbindingen (servers en tot stand gebracht)

Proto Recv-Q Send-Q Lokaal adres Staat buitenlands adres

udp 0 0 0.0.0.0:7777 0.0.0.0:*

Tot slot is CreateTnH_Graphs.sh.txt een voorbeeldscript om de grafieken te genereren. (Ik genereer de scripts als root, misschien wil je dit niet doen.)

Met behulp van een zeer eenvoudige webpagina kunt u de grafieken bekijken vanuit elke browser op uw thuisnetwerk.