Inhoudsopgave:

Een DHT11/DHT22-sensor verbinden met de cloud met een op ESP8266 gebaseerd bord: 9 stappen
Een DHT11/DHT22-sensor verbinden met de cloud met een op ESP8266 gebaseerd bord: 9 stappen

Video: Een DHT11/DHT22-sensor verbinden met de cloud met een op ESP8266 gebaseerd bord: 9 stappen

Video: Een DHT11/DHT22-sensor verbinden met de cloud met een op ESP8266 gebaseerd bord: 9 stappen
Video: How to use DHT11 DHT22 with NodeMCU ESP8266 to read temperature over WiFi - IoT 2024, November
Anonim
Een DHT11/DHT22-sensor verbinden met de cloud met een op ESP8266 gebaseerd bord
Een DHT11/DHT22-sensor verbinden met de cloud met een op ESP8266 gebaseerd bord

In het vorige artikel heb ik mijn op ESP8266 gebaseerde NodeMCU-kaart aangesloten op een Cloud4RPi-service. Nu is het tijd voor een echt project!

Benodigdheden

Hardwarevereisten:

  • Elk bord op basis van een ESP8266-chip (bijvoorbeeld NodeMCU)
  • Een DHT11- of DHT22-sensor

Software en diensten:

  • DHT-sensorbibliotheek door Adafruit - v1.3.7
  • Adafruit Unified Sensor - v1.0.3
  • cloud4rpi-esp-arduino - v0.1.0
  • Cloud4RPI - Cloud-configuratiescherm voor IoT-apparaten
  • PlatformIO IDE voor VSCode

Stap 1: Meet temperatuur en vochtigheid

Temperatuur en vochtigheid meten
Temperatuur en vochtigheid meten

Ik had al een DHT11-sensor, dus besloot ik deze te gebruiken voor temperatuur- en vochtigheidsmetingen. Laten we een Arduino-bibliotheek kiezen om sensorgegevens te lezen.

Arduino-register bevat verschillende bibliotheken, waarvan ik de meest populaire heb geselecteerd.

Volgens hun GitHub-repository zijn we ook verplicht om een Adafruit Unified Sensor-pakket toe te voegen.

Stap 2: Project maken en configureren

Project maken en configureren
Project maken en configureren

In het eerste deel heb ik al beschreven hoe je een PlatformIO-project maakt en bibliotheken installeert. Mijn project heet " MyNodeMCU ". De structuur is hierboven weergegeven.

Dit project is een licht gewijzigd Cloud4RPi-voorbeeld. Ik heb besloten om de apparaattoken en wifi-inloggegevens op te slaan in het configuratiebestand in plaats van in de code.

Het platform.io-bestand ziet er als volgt uit:

[platformio]default_envs = nodemcuv2[env:nodemcuv2] platform = espressif8266 framework = arduino-bord = nodemcuv2

Stap 3: Bibliotheken installeren

Bibliotheken installeren
Bibliotheken installeren

De installatie van bibliotheken is vrij eenvoudig. U kunt dit doen vanuit de grafische interface van de IDE, of door de vereiste bibliotheeknamen toe te voegen aan de sectie lib_deps van het platform.io-bestand:

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

Toegevoegde bibliotheken worden automatisch geïnstalleerd in de submap van een project.

De header main.cpp ziet er als volgt uit:

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

Stap 4: Sluit een DHT11-sensor aan

Adafruit biedt een DHTtester.ino-voorbeeld van een sensorverbinding.

Deze code initialiseert een sensor en definieert een structuur om het meetresultaat op te slaan (voor het geval het succesvol was):

#define DHTPIN 2 // Digitale pin aangesloten op de DHT-sensor#define DHTTYPE DHT11 // DHT 11 // … DHT dht(DHTPIN, DHTTYPE); dht.begin(); // … struct DHT_Result { float h; zweven t; }; DHT_Result dhtResult;

De volgende functie laat zien hoe u sensorgegevens kunt lezen en opslaan in de hierboven beschreven gegevensstructuur

void readSensors() { float h = dht.readHumidity(); // Lees temperatuur als Celsius (de standaard) float t = dht.readTemperature ();

// Controleer of het lezen is mislukt en sluit af

if (isnan(h) || isnan(t)) { Serial.println(F("Kan niet lezen van DHT-sensor!")); opbrengst; } dhtResult.h = h; dhtResultaat.t = t; }

Stap 5: Gegevens naar de cloud verzenden

Zodra we die gegevens hebben, is de volgende stap om deze naar de Cloud4RPi-service te sturen.

De Cloud4RPi voor Arduino-pagina beschrijft de bibliotheek-API, een reeks methoden die worden gebruikt om:

  • variabelen maken, lezen en bijwerken,
  • stuur variabele waarden naar de cloud met behulp van het MQTT-protocol.

De bibliotheek ondersteunt drie typen variabelen: Bool, Numeric en String.

De bibliotheekworkflow begint met het maken van een API-instantie met behulp van de Device Token van de cloud4rpi.io-website (raadpleeg deel 1 van het artikel voor details).

#indien gedefinieerd(CLOUD4RPI_TOKEN) Cloud4RPi c4r(CLOUD4RPI_TOKEN); #else Cloud4RPi c4r("!!!_NO_DEVICE_TOKEN_!!!"); #stop als

Declareer vervolgens variabelen voor DHT11-metingen:

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

Haal vervolgens gegevens van de sensor, sla ze op in variabelen en publiceer de gegevens naar Cloud4RPi:

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

Temperatuur en vochtigheid veranderen niet snel, dus meer dan één waarde per 5 minuten verzenden is niet nodig.

Stap 6: Diagnostiek

Cloud4RPi ondersteunt diagnostische gegevens samen met variabele waarden. Ik heb uptime, wifi-signaalsterkte en IP-adres gebruikt als diagnostische gegevens:

c4r.declareDiagVariable("IP_Address");c4r.declareDiagVariable("RSSI"); // WiFi-signaalsterkte c4r.declareDiagVariable ("Uptime");

Opmerking: de millis-functie die ik gebruik om de uptime elke ~ 50 dagen te resetten naar nul. Dat is meer dan genoeg voor mijn project.

De volgende code stelt waarden voor diagnostische variabelen in:

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

De uptimeHumanReadable-functie converteert milliseconden naar een handige vorm:

String uptimeHumanReadable (unsigned lange milliseconden) { static char uptimeStr [32]; niet-ondertekende lange seconden = milliseconden / 1000; niet-ondertekende lange minuten = seconden / 60; niet ondertekend in uren = min / 60; niet ondertekend int dagen = uur / 24; seconden -= minuten * 60; min -= uur * 60; uur -= dagen * 24; sprintf(uptimeStr, "%d dagen %2.2d:%2.2d:%2.2d", (byte)dagen, (byte)uren, (byte)mins, (byte)sec); return String (uptimeStr); }

De functie geeft een string als deze uit 5 dagen 10:23:14 in plaats van een vreemd groot getal.

Stap 7: Start en debug het project

Start en debug het project
Start en debug het project

Nadat de gemaakte code is gecompileerd en in NodeMCU is geflitst, maakt het apparaat verbinding met een cloudservice en begint het gegevens te verzenden.

U kunt de uitgebreidheid van het loggen vergroten door de preprocessorvariabele CLOUD4RPI_DEBUG in te stellen op 1 (voeg -D CLOUD4RPI_DEBUG=1 toe aan het gedeelte build_flags in het bestand platform.io).

Open vervolgens de cloud4rpi.io-site en merk het nieuwe apparaat online op. Open het om alle variabele waarden te zien die van het apparaat zijn ontvangen: sensor en diagnose.

Stap 8: Dashboardconfiguratie

Dashboardconfiguratie
Dashboardconfiguratie

Bij deze stap is de dataverbinding met de cloud operationeel. Laten we nu de visuele weergave van de gegevens configureren.

Ik heb de gebruikersinterface voor dashboardconfiguratie gebruikt om het volgende dashboard te maken.

Het dashboard is deelbaar, dus ik deel het meteen met mijn vriend.

Stap 9: Conclusie

Conclusie
Conclusie

De code van het volledige project is beschikbaar in de kern.

Dat is het voor nu!

Vragen en suggesties zijn welkom in de comments.

Aanbevolen: