Inhaltsverzeichnis:

Temperatursensor für Heimnetzwerk - Gunook
Temperatursensor für Heimnetzwerk - Gunook

Video: Temperatursensor für Heimnetzwerk - Gunook

Video: Temperatursensor für Heimnetzwerk - Gunook
Video: Shelly Plus AddOn mit Temperatur Sensor! Kann man die Sensorleitung verlängern? 2024, November
Anonim
Temperatursensor für Heimnetzwerk
Temperatursensor für Heimnetzwerk

Was müssen Sie wissen, um dieses Projekt zu machen:

Sie müssen wissen über: - Einige elektronische Fähigkeiten (Löten)

- Linux

- Arduino-IDE

(Sie müssen zusätzliche Boards in der IDE aktualisieren:

- Aktualisieren/Programmieren eines ESP-Boards über die Arduino IDE.

(es gibt einige nette Tutorials im Web)

Dies kann mit einem Arduino Uno oder mit einem FTDI (USB-zu-Seriell-Adapter) erfolgen.

Ich habe mein Uno verwendet, weil ich weder einen seriellen Port an meinem PC noch einen FTDI hatte

Schritt 1: Einkaufen gehen

Einkaufen gehen
Einkaufen gehen

Was brauchen Sie, um dies zu erreichen?

Für den digitalen Temperatur- und Feuchtigkeitssensor:

- Entweder ein Steckbrett oder eine Alternative wie Prototypenplatine, Lötzinn, Lötkolben …

- Etwas Draht

- zwei Jumper

- ein 10k Ohm Widerstand

- ein ESP12F (andere Modelle könnten auch funktionieren…)

- ein DHT22 (etwas teurer als das DHT11, aber genauer)

- 3 wiederaufladbare AA-Batterien und ein Batteriehalter

- eine kleine Plastikbox, in die du dein Projekt stecken kannst

- In einer späteren Phase plane ich, einen HT7333 mit zwei 10uF-Kondensatoren zwischen dem Akku und dem ESP hinzuzufügen

um die Eingangsspannung (VCC) auf die empfohlenen 3,3 V zu stabilisieren, aber auch um das ESP vor Überspannung zu schützen.

Für den Netzwerkteil:

- Ihr WiFi-Heimnetzwerk

Für den Serverteil:

- Jedes Linux-basierte System (immer an!)

Ich habe einen Raspberry Pi verwendet (den ich auch als Server für meine Outdoor-IP-Kameras verwende.)

- gcc-Compiler zum Kompilieren Ihres Servercodes

- rrdtool-Paket zum Speichern der Daten und Generieren von Grafiken

- Apache (oder ein anderer Webserver)

Ihr Lieblings-PC oder -Laptop mit Arduino IDE darauf.

Schritt 2: Einrichtung und Hintergrund

Einrichtung und Hintergrund
Einrichtung und Hintergrund

In dieser Version eines mit WiFi verbundenen - um nicht zu sagen IOT - Temperatur- und Feuchtigkeitssensors habe ich einen ESP12F, einen DHT22 und einen 3 AA Batteriehalter mit wiederaufladbaren Batterien verwendet.

Alle 20 Minuten nimmt der ESP eine Messung vom DHT22 vor und sendet sie über UDP an einen Server (einen Raspberry Pi) in meinem Heim-WLAN-Netzwerk. Nachdem die Messwerte gesendet wurden, geht das ESP in den Tiefschlaf. Dies bedeutet, dass nur die Echtzeituhr des Moduls mit Strom versorgt wird, was zu einer unglaublichen Energieeinsparung führt. Für ca. 5 Sekunden benötigt das Modul ca. 100mA, dann während der 20 Minuten Deepsleep nur noch 150uA.

Ich wollte keinen internetbasierten Dienst nutzen, da ich meinen Raspberry Pi habe, der sowieso immer eingeschaltet ist und auf diese Weise hatte ich das Vergnügen, auch den Serverteil zu schreiben.

Auf dem Server (ein Raspberry Pi mit Raspbian) habe ich einen einfachen UDP-Listener (Server) geschrieben, der die Werte in einem einfachen RRD speichert. (Round Robin Database mit RRDtool von Tobias Oetiker.)

Der Vorteil von RRDtool ist, dass Sie Ihre Datenbank einmalig erstellen und die Größe gleich bleibt. Außerdem müssen Sie keinen Datenbankserver (wie mySQLd) im Hintergrund laufen lassen. RRDtool bietet Ihnen die Werkzeuge, um die Datenbank zu erstellen und die Diagramme zu generieren.

Mein Server erstellt die Grafiken in regelmäßigen Abständen und zeigt alles auf einer sehr einfachen http-Seite an. Ich kann meine Messwerte mit einem einfachen Browser abrufen, indem ich mich mit dem Apache2-Webserver auf dem Raspberry Pi verbinde!

Schließlich hatte ich kein FTDI (USB zu Seriell), also habe ich mein Arduino UNO verwendet. Sie müssen die TXs und die RXs und die GND des ESP und des UNO verbinden. (Ich weiß, dein Instinkt könnte dir sagen, dass du RX und TX kreuzen sollst… habe es auch versucht, funktioniert nicht.)

Ich habe keine Pegelumwandlung durchgeführt (UNO: High=5V, aber ESP ist im Grunde ein 3,3V-Gerät… Es gibt einige nette FTDIs auf dem Markt, bei denen Sie sogar Ihren High-Pegel auf 5 oder 3,3V einstellen können.

Meine Schaltung wird mit 3 AA-Akkus betrieben - also tatsächlich 3 x 1,2 V. In einer späteren Phase beabsichtige ich, aus Sicherheitsgründen einen HT7333 zwischen den Akku und den Stromkreis zu schalten; neu geladene Batterien könnten mehr als 1,2V haben und das ESP sollte mit min. 3V und max. 3,6 V. Auch wenn ich mich - in einem Moment der Schwäche - entscheide, Alkaline-Batterien (3 x 1,5 V = 4,5 V) einzulegen, wird mein ESP nicht gebraten!

Ich habe auch überlegt, ein 10cm x 10cm Solarpanel zu verwenden, aber es hat sich einfach nicht gelohnt. Durch 3 Messungen pro Stunde (grundsätzlich 3x 5 Sekunden @ 100mA max. und die restliche Zeit @100uA) hoffe ich, meine Schaltung 1 Jahr lang mit den gleichen wiederaufladbaren Batterien zu betreiben.

Schritt 3: Das Arduino - ESP12-Teil

Der Arduino - ESP12-Teil
Der Arduino - ESP12-Teil
Der Arduino - ESP12-Teil
Der Arduino - ESP12-Teil

Ich habe dieses Projekt in verschiedenen Schritten durchgeführt.

Es gibt mehrere Links, die Ihnen helfen, den ESP12 (auch bekannt als ESP8266) in die Arduino IDE zu importieren. (Ich musste die Version 2.3.0 statt der neusten verwenden wegen eines Fehlers, der vielleicht inzwischen behoben wurde…)

Ich begann mit dem Anschließen des ESP über mein Arduino UNO (nur als Brücke zwischen meinem PC über USB an die Serielle) an die serielle ESP-Schnittstelle. Es gibt separate Instructables, die dies erklären.

In meinem fertigen Projekt habe ich die Drähte belassen, um eine Verbindung mit der seriellen Schnittstelle herzustellen, falls ich jemals Fehler beheben muss

Dann müssen Sie Ihren ESP12 wie folgt verkabeln:

ESP-Pins…

GND UNO GND

RX UNO RX

TX UNO TX

DE VCC

GPIO15 GND

Anfangs habe ich versucht, mein ESP über die 3,3 V an der UNO mit Strom zu versorgen, aber ich bin schnell dazu übergegangen, mein ESP mit einem Tischnetzteil mit Strom zu versorgen, aber Sie können auch Ihren Akku verwenden.

GPIO0 Dieses hier habe ich mit einem Jumper an GND angeschlossen um das Flashen (=Programmieren) des ESP zu ermöglichen.

Erster Test: Jumper offen lassen und seriellen Monitor in der Arduino IDE starten (bei 115200 Baud!).

Schalten Sie das ESP aus und wieder ein, Sie sollten einige Müllzeichen sehen und dann eine Meldung wie:

Ai-Thinker Technology Co. Ltd. bereit

In diesem Modus verhält sich das ESP ein bisschen wie ein altmodisches Modem. Sie müssen AT-Befehle verwenden.

Versuchen Sie die folgenden Befehle:

AT+RST

und die folgenden zwei Befehle

AT+CWMODE=3

OK

AT+CWLAP

Dies sollte Ihnen eine Liste aller WiFi-Netzwerke in der Umgebung geben.

Wenn dies funktioniert, sind Sie bereit für den nächsten Schritt.

Schritt 4: Testen des ESP als Network Time Protocol (NTP)-Client

Testen des ESP als Network Time Protocol (NTP)-Client
Testen des ESP als Network Time Protocol (NTP)-Client
Testen des ESP als Network Time Protocol (NTP)-Client
Testen des ESP als Network Time Protocol (NTP)-Client

Laden Sie in der Arduino-IDE unter Datei, Beispiele, ESP8266WiFi NTPClient.

Kleinere Optimierungen sind erforderlich, damit es funktioniert; Sie müssen Ihre SSID und das Passwort Ihres WLAN-Netzwerks eingeben.

Setzen Sie nun den Jumper und schließen Sie GPIO0 mit GND kurz.

Schalten Sie das ESP aus und wieder ein und laden Sie die Skizze auf das ESP hoch.

Nach der Kompilierung sollte der Upload zum ESP starten. Die blaue LED am ESP blinkt schnell, während der Code heruntergeladen wird.

Mir ist aufgefallen, dass ich mit dem Neustart der IDE und dem Neustart des ESP ein wenig herumspielen musste, bevor der Upload funktionierte.

Bevor Sie mit dem Kompilieren/Hochladen des Sketches beginnen, schließen Sie unbedingt die serielle Konsole (=serielle Monitor), da dies den Upload verhindert.

Sobald der Upload erfolgreich war, können Sie den seriellen Monitor erneut öffnen, um zu sehen, wie der ESP effektiv die Zeit aus dem Internet bezieht.

Super, du hast dein ESP programmiert, mit deinem WLAN verbunden und die Uhrzeit aus dem Internet geholt.

Im nächsten Schritt testen wir das DHT22.

Schritt 5: Testen des DHT22-Sensors

Testen des DHT22-Sensors
Testen des DHT22-Sensors

Jetzt ist eine zusätzliche Verkabelung erforderlich.

DHT-Pins… Verbinden Sie Pin 1 (links) des Sensors mit VCC (3,3 V)

Verbinden Sie Pin 2 ESP GPIO5 (DHTPIN in der Skizze)

Verbinden Sie Pin 4 (rechts) des Sensors mit GROUND

Schließen Sie einen 10K-Widerstand von Pin 2 (Daten) an Pin 1 (Strom) des Sensors an.

Suchen Sie ähnlich wie beim NTP-Test die DHTtester-Skizze und optimieren Sie sie wie folgt:

#define DHTPIN 5 // Wir haben GPIO5 ausgewählt, um eine Verbindung zum Sensor herzustellen#define DHTTYPE DHT22 // da wir ein DHT22 verwenden, aber dieser Code/diese Bibliothek auch für DHT11 geeignet ist

Schließen Sie erneut den seriellen Monitor, schalten Sie das ESP aus und wieder ein und kompilieren und flashen Sie das ESP.

Wenn alles gut geht, sollten die Messungen auf dem seriellen Monitor angezeigt werden.

Mit dem Sensor kann man ein bisschen herumspielen. Wenn Sie darauf atmen, werden Sie sehen, wie die Luftfeuchtigkeit steigt.

Wenn Sie eine (keine LED) Schreibtischlampe haben, können Sie auf den Sensor leuchten, um ihn etwas aufzuheizen.

Groß! Zwei große Teile des Sensors funktionieren jetzt.

Im nächsten Schritt werde ich den endgültigen Code kommentieren.

Schritt 6: Zusammenbauen…

Etwas zusammensetzen…
Etwas zusammensetzen…

Wieder etwas zusätzliche Verkabelung… dies soll den DeepSleep ermöglichen.

Denken Sie daran, DeepSleep ist eine unglaubliche Funktion für IoT-Geräte.

Wenn Ihr Sensor jedoch für DeepSleep fest verdrahtet ist, kann es schwierig sein, das ESP neu zu programmieren, daher werden wir eine weitere Jumper-Verbindung zwischen. herstellen

GPIO16-RST.

Ja, es MUSS GPIO16 sein, denn das ist der GPIO, der fest verdrahtet ist, um das Gerät aufzuwecken, wenn die Echtzeituhr nach dem DeepSleep ausgeht!

Während des Tests können Sie sich für einen 15-sekündigen DeepSleep entscheiden.

Beim Debuggen habe ich den Jumper auf GPIO0 verschoben, damit ich mein Programm flashen konnte.

Nach Abschluss des Downloads würde ich den Jumper auf GPIO16 verschieben, damit DeepSleep funktioniert.

Der Code für das ESP heißt TnHclient.c

Sie müssen Ihre SSID, Ihr Passwort und die IP-Adresse Ihres Servers ändern.

Es gibt zusätzliche Codezeilen, die Sie zur Fehlerbehebung oder zum Testen Ihres Setups verwenden können.

Schritt 7: Die Serverseite der Dinge

Die Serverseite der Dinge
Die Serverseite der Dinge
Die Serverseite der Dinge
Die Serverseite der Dinge

Es ist ein weit verbreitetes Missverständnis, dass UDP unzuverlässig ist und TCP…

Das ist genauso albern wie zu sagen, ein Hammer sei nützlicher als ein Schraubendreher. Sie sind einfach verschiedene sehr nützliche Werkzeuge und sie haben beide ihre Verwendung.

Übrigens, ohne UDP würde das Internet nicht funktionieren… DNS basiert auf UDP.

Also habe ich mich für UDP entschieden, weil es sehr leicht, einfach und schnell ist.

Ich neige dazu zu denken, dass mein WiFi sehr zuverlässig ist, so dass der Client höchstens 3 UDP-Pakete sendet, wenn die Bestätigung "OK!" wird nicht empfangen.

Der C-Code für den TnHserver befindet sich in der Datei TnHServer.c.

Es gibt mehrere Kommentare im Code, die dies erklären.

Wir benötigen einige zusätzliche Tools auf dem Server: rrdtool, Apache und vielleicht tcpdump.

Um rrdtool auf Raspbian zu installieren, können Sie das Paket einfach wie folgt installieren: apt-get install rrdtool

Wenn Sie den Netzwerkverkehr debuggen müssen, ist tcpdump praktisch apt-get install tcpdump

Ich brauchte einen Webserver, um einen Browser verwenden zu können, um die Grafiken anzuzeigen: apt-get install apache2

Ich habe dieses Tool verwendet: https://rrdwizard.appspot.com/index.php, um den Befehl zum Erstellen der Round Robin-Datenbank zu erhalten. Sie müssen dies nur einmal ausführen (wenn Sie es beim ersten Mal richtig machen).

rrdtool TnHdatabase.rrd erstellen --start now-10s

--step '1200'

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

'DS:Feuchtigkeit:GAUGE:1200:0:100.0'

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

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

'RRA:DURCHSCHNITT:0.5:18:1600'

Schließlich verwende ich einen crontab-Eintrag, um meinen TnHserver jeden Tag um Mitternacht neu zu starten. Ich betreibe den TnHserver aus Sicherheitsgründen als normaler Benutzer (also NICHT als Root).

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

Sie können überprüfen, ob der TnHserver läuft, indem Sie Folgendes tun:

$ ps -elf | grep TnHserver

und Sie können überprüfen, ob es auf Port 7777 auf Pakete lauscht, indem Sie Folgendes tun

$ netstat -anu

Aktive Internetverbindungen (Server und aufgebaut)

Proto Recv-Q Send-Q Lokale Adresse Fremder Adressstatus

udp 0 0 0.0.0.0:7777 0.0.0.0:*

Schließlich ist CreateTnH_Graphs.sh.txt ein Beispielskript zum Generieren der Grafiken. (Ich generiere die Skripte als Root, das möchten Sie vielleicht nicht.)

Mit einer sehr einfachen Webseite können Sie die Grafiken von jedem Browser in Ihrem Heimnetzwerk aus ansehen.

Empfohlen: