Inhaltsverzeichnis:

Anschließen eines DHT11/DHT22-Sensors an die Cloud mit einem ESP8266-basierten Board - Gunook
Anschließen eines DHT11/DHT22-Sensors an die Cloud mit einem ESP8266-basierten Board - Gunook

Video: Anschließen eines DHT11/DHT22-Sensors an die Cloud mit einem ESP8266-basierten Board - Gunook

Video: Anschließen eines DHT11/DHT22-Sensors an die Cloud mit einem ESP8266-basierten Board - Gunook
Video: How to use DHT11 DHT22 with NodeMCU ESP8266 to read temperature over WiFi - IoT 2024, November
Anonim
Verbinden eines DHT11/DHT22-Sensors mit der Cloud mit einem ESP8266-basierten Board
Verbinden eines DHT11/DHT22-Sensors mit der Cloud mit einem ESP8266-basierten Board

Im vorherigen Artikel habe ich mein ESP8266-basiertes NodeMCU-Board mit einem Cloud4RPi-Dienst verbunden. Jetzt ist es Zeit für ein echtes Projekt!

Lieferungen

Hardware-Anforderungen:

  • Jedes Board, das auf einem ESP8266-Chip basiert (z. B. NodeMCU)
  • Ein DHT11- oder DHT22-Sensor

Software und Dienste:

  • DHT-Sensorbibliothek von Adafruit - v1.3.7
  • Adafruit Unified Sensor - v1.0.3
  • cloud4rpi-esp-arduino - v0.1.0
  • Cloud4RPI - Cloud-Bedienfeld für IoT-Geräte
  • PlatformIO-IDE für VSCode

Schritt 1: Temperatur und Luftfeuchtigkeit messen

Temperatur und Luftfeuchtigkeit messen
Temperatur und Luftfeuchtigkeit messen

Ich hatte bereits einen DHT11-Sensor und entschied mich daher, ihn für Temperatur- und Luftfeuchtigkeitsmessungen zu verwenden. Wählen wir eine Arduino-Bibliothek aus, um Sensordaten zu lesen.

Die Arduino-Registry enthält mehrere Bibliotheken, von denen ich die beliebteste ausgewählt habe.

Laut ihrem GitHub-Repository müssen wir auch ein Adafruit Unified Sensor-Paket hinzufügen.

Schritt 2: Projekt erstellen und konfigurieren

Projekt erstellen und konfigurieren
Projekt erstellen und konfigurieren

Wie Sie ein PlatformIO-Projekt erstellen und Bibliotheken installieren, habe ich bereits im ersten Teil beschrieben. Mein Projekt heißt „MyNodeMCU“. Der Aufbau ist oben dargestellt.

Dieses Projekt ist ein leicht modifiziertes Cloud4RPi-Beispiel. Ich habe mich entschieden, das Geräte-Token und die Wi-Fi-Anmeldeinformationen in der Konfigurationsdatei anstelle von Code zu speichern.

Die Datei platform.io sieht wie folgt aus:

[platformio]default_envs = nodemcuv2[env:nodemcuv2] Plattform = espressif8266 Framework = Arduino Board = nodemcuv2

Schritt 3: Bibliotheken installieren

Bibliotheken installieren
Bibliotheken installieren

Die Installation von Bibliotheken ist recht einfach. Sie können dies über die grafische Benutzeroberfläche der IDE tun oder indem Sie die erforderlichen Bibliotheksnamen zum Abschnitt lib_deps der Datei platform.io hinzufügen:

; …lib_deps = cloud4rpi-esp-arduino Adafruit Unified Sensor DHT-Sensorbibliothek build_flags = -D MQTT_MAX_PACKET_SIZE=1024 -D MQTT_MAX_TRANSFER_SIZE=128 -D CLOUD4RPI_DEBUG=0 -D SSID_NAME=\"_WIFI" -WIFI\_\ D CLOUD4RPI_TOKEN=\"_YOUR_DEVICE_TOKEN_\"

Hinzugefügte Bibliotheken werden automatisch im Unterordner eines Projekts installiert.

Der Header main.cpp sieht wie folgt aus:

#include #include #include #include "DHT.h"

Schritt 4: Schließen Sie einen DHT11-Sensor an

Adafruit bietet ein DHTtester.ino-Beispiel für eine Sensorverbindung.

Dieser Code initialisiert einen Sensor und definiert eine Struktur zum Speichern des Messergebnisses (falls es erfolgreich war):

#define DHTPIN 2 // Digitaler Pin mit dem DHT-Sensor verbunden #define DHTTYPE DHT11 // DHT 11 // … DHT dht(DHTPIN, DHTTYPE); dht.begin(); // … struct DHT_Result { float h; schweben t; }; DHT_Result dhtResult;

Die nächste Funktion zeigt, wie man Sensordaten ausliest und in der oben beschriebenen Datenstruktur speichert

Void readSensors () { float h = dht.readHumidity (); // Temperatur als Celsius lesen (Standard) float t = dht.readTemperature ();

// Prüfen, ob Lesevorgänge fehlgeschlagen sind und beenden

if (isnan (h) || isnan (t)) { Serial.println (F ("Fehler beim Lesen vom DHT-Sensor!")); Rückkehr; } dhtResult.h = h; dhtErgebnis.t = t; }

Schritt 5: Daten an die Cloud senden

Sobald wir diese Daten haben, besteht der nächste Schritt darin, sie an den Cloud4RPi-Dienst zu senden.

Die Cloud4RPi für Arduino-Seite beschreibt die Bibliotheks-API, die eine Reihe von Methoden ist, die verwendet werden, um:

  • Variablen erstellen, lesen und aktualisieren,
  • Variablenwerte über das MQTT-Protokoll in die Cloud senden.

Die Bibliothek unterstützt drei Variablentypen: Bool, Numeric und String.

Der Bibliotheksworkflow beginnt mit der Erstellung einer API-Instanz mit dem Device Token von der cloud4rpi.io-Website (weitere Informationen finden Sie in Teil 1 des Artikels).

#wenn definiert(CLOUD4RPI_TOKEN) Cloud4RPi c4r(CLOUD4RPI_TOKEN); #else Cloud4RPi c4r("!!!_NO_DEVICE_TOKEN_!!!"); #endif

Deklarieren Sie dann Variablen für DHT11-Messwerte:

c4r.declareNumericVariable("DHT11_Temp");c4r.declareNumericVariable("DHT11_Hum");

Rufen Sie dann Daten vom Sensor ab, speichern Sie sie in Variablen und veröffentlichen Sie die Daten in Cloud4RPi:

c4r.setVariable("DHT11_Temp", dhtResult.t);c4r.setVariable("DHT11_Hum", dhtResult.h); c4r.publishData();

Temperatur und Luftfeuchtigkeit ändern sich nicht schnell, so dass nicht mehr als ein Wert pro 5 Minuten gesendet werden muss.

Schritt 6: Diagnose

Cloud4RPi unterstützt Diagnosedaten zusammen mit Variablenwerten. Ich habe Betriebszeit, WLAN-Signalstärke und IP-Adresse als Diagnosedaten verwendet:

c4r.declareDiagVariable("IP_Address");c4r.declareDiagVariable("RSSI"); // WiFi-Signalstärke c4r.declareDiagVariable("Uptime");

Hinweis: Die Millis-Funktion, die ich verwende, um die Betriebszeit alle ~50 Tage auf Null zurückzusetzen. Was für mein Projekt mehr als genug ist.

Der folgende Code legt Diagnosevariablenwerte fest:

c4r.setDiagVariable("RSSI", (String)WiFi. RSSI() + " dBm");c4r.setDiagVariable("IP_Address", WiFi.localIP().toString()); c4r.setDiagVariable("Uptime", uptimeHumanReadable(currentMillis)); c4r.publishDiag();

Die Funktion uptimeHumanReadable wandelt Millisekunden in eine bequeme Form um:

String uptimeHumanReadable (ohne Vorzeichen lange Millisekunden) { static char uptimeStr[32]; lange Sekunden ohne Vorzeichen = Millisekunden / 1000; lange Minuten ohne Vorzeichen = Sekunden / 60; unsigned int Stunden = Minuten / 60; unsigned int days = Stunden / 24; Sekunden -= Minuten * 60; Minuten -= Stunden * 60; Stunden -= Tage * 24; sprintf(uptimeStr, "%d Tage %2.2d:%2.2d:%2.2d", (Byte)Tage, (Byte)Stunden, (Byte)Minuten, (Byte)Sekunden); return String(uptimeStr); }

Die Funktion gibt einen String wie diesen 5 Tage 10:23:14 anstelle einer seltsam großen Zahl aus.

Schritt 7: Starten und Debuggen des Projekts

Starten und Debuggen des Projekts
Starten und Debuggen des Projekts

Nach dem Kompilieren des erstellten Codes und dem Flashen in NodeMCU verbindet sich das Gerät mit einem Cloud-Dienst und beginnt mit dem Senden von Daten.

Sie können die Ausführlichkeit der Protokollierung erhöhen, indem Sie die Präprozessorvariable CLOUD4RPI_DEBUG auf 1 setzen (fügen Sie -D CLOUD4RPI_DEBUG=1 zum Abschnitt build_flags in der Datei platform.io hinzu).

Öffnen Sie als Nächstes die Website cloud4rpi.io und bemerken Sie das neue Gerät online. Öffnen Sie es, um alle vom Gerät empfangenen Variablenwerte anzuzeigen: Sensor und Diagnose.

Schritt 8: Dashboard-Konfiguration

Dashboard-Konfiguration
Dashboard-Konfiguration

In diesem Schritt ist die Datenverbindung zur Cloud betriebsbereit. Lassen Sie uns nun die visuelle Darstellung der Daten konfigurieren.

Ich habe die Dashboard-Konfigurations-UI verwendet, um das folgende Dashboard zu erstellen.

Das Dashboard kann geteilt werden, sodass ich es sofort mit meinem Freund teile.

Schritt 9: Fazit

Abschluss
Abschluss

Der vollständige Code des Projekts ist in der Gist verfügbar.

Das ist alles für jetzt!

Fragen und Anregungen sind in den Kommentaren willkommen.

Empfohlen: