Inhaltsverzeichnis:
- Schritt 1: Einkaufen gehen
- Schritt 2: Einrichtung und Hintergrund
- Schritt 3: Das Arduino - ESP12-Teil
- Schritt 4: Testen des ESP als Network Time Protocol (NTP)-Client
- Schritt 5: Testen des DHT22-Sensors
- Schritt 6: Zusammenbauen…
- Schritt 7: Die Serverseite der Dinge
Video: Temperatursensor für Heimnetzwerk - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:17
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
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
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
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
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
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…
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
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:
Arduino Auto-Rückfahrwarnsystem - Schritt für Schritt: 4 Schritte
Arduino Auto-Rückfahrwarnsystem | Schritt für Schritt: In diesem Projekt entwerfe ich eine einfache Arduino-Auto-Rückwärts-Parksensorschaltung mit Arduino UNO und dem Ultraschallsensor HC-SR04. Dieses Arduino-basierte Car-Reverse-Warnsystem kann für eine autonome Navigation, Roboter-Ranging und andere Entfernungsr
So deaktivieren Sie die Autokorrektur für nur ein Wort (iOS): 3 Schritte
So deaktivieren Sie die Autokorrektur für nur ein Wort (iOS): Manchmal korrigiert die Autokorrektur möglicherweise etwas, das Sie nicht korrigieren möchten, z. Textabkürzungen beginnen sich in Großbuchstaben zu setzen (imo korrigieren zum Beispiel zu IMO). So erzwingen Sie, dass die Korrektur eines Wortes oder einer Phrase beendet wird, ohne aut zu deaktivieren
Interessante Programmieranleitung für Designer - Bringen Sie Ihr Bild zum Laufen (Teil 2): 8 Schritte
Interessante Programmieranleitung für Designer – Bringen Sie Ihr Bild zum Laufen (Teil 2): Mathematik scheint für die meisten von Ihnen nutzlos zu sein. Die in unserem täglichen Leben am häufigsten verwendete ist einfach Addieren, Subtrahieren, Multiplizieren und Dividieren. Es ist jedoch ganz anders, wenn Sie mit Programm erstellen können. Je mehr Sie wissen, desto mehr wundervolle Ergebnisse werden Sie erhalten
Temperatursensor (Arduino): 8 Schritte
Temperatursensor (Arduino): Dieses Projekt ist perfekt für Fortgeschrittene und Anfänger. Die Einrichtung ist sehr einfach. Es gibt einen Chip namens LM35 (Link für zusätzliche Erklärung), der es dem Arduino ermöglicht, die Temperatur der Umgebung zu bestimmen
So richten Sie ein Heimnetzwerk ein: 6 Schritte
So richten Sie ein Heimnetzwerk ein: Das Einrichten eines Netzwerks kann zunächst entmutigend klingen, aber sobald Sie alles haben, was Sie brauchen, ist es sehr einfach. Die traditionelle Einrichtung erfordert ein Modem und einen Router, aber einige benötigen möglicherweise mehr und andere weniger. Es gibt viele verschiedene