Sommario:

Collegamento di un sensore DHT11/DHT22 al cloud con una scheda basata su ESP8266: 9 passaggi
Collegamento di un sensore DHT11/DHT22 al cloud con una scheda basata su ESP8266: 9 passaggi

Video: Collegamento di un sensore DHT11/DHT22 al cloud con una scheda basata su ESP8266: 9 passaggi

Video: Collegamento di un sensore DHT11/DHT22 al cloud con una scheda basata su ESP8266: 9 passaggi
Video: Progetto SDS011 - Lettura polveri sottili 2024, Novembre
Anonim
Collegamento di un sensore DHT11/DHT22 al cloud con una scheda basata su ESP8266
Collegamento di un sensore DHT11/DHT22 al cloud con una scheda basata su ESP8266

Nell'articolo precedente, ho collegato la mia scheda NodeMCU basata su ESP8266 a un servizio Cloud4RPi. Ora è il momento di un vero progetto!

Forniture

Requisiti hardware:

  • Qualsiasi scheda basata su un chip ESP8266 (ad esempio NodeMCU)
  • Un sensore DHT11 o DHT22

Software e servizi:

  • Libreria di sensori DHT di Adafruit - v1.3.7
  • Sensore unificato Adafruit - v1.0.3
  • cloud4rpi-esp-arduino - v0.1.0
  • Cloud4RPI - Pannello di controllo in cloud per dispositivi IoT
  • PlatformIO IDE per VSCode

Passaggio 1: misurare la temperatura e l'umidità

Misura temperatura e umidità
Misura temperatura e umidità

Possedevo già un sensore DHT11, quindi ho deciso di utilizzarlo per misurazioni di temperatura e umidità. Scegliamo una libreria Arduino per leggere i dati del sensore.

Il registro di Arduino contiene diverse librerie, tra le quali ho selezionato quella più popolare.

Secondo il loro repository GitHub, ci viene anche richiesto di aggiungere un pacchetto Adafruit Unified Sensor.

Passaggio 2: crea e configura il progetto

Crea e configura progetto
Crea e configura progetto

Ho già descritto come creare un progetto PlatformIO e installare le librerie nella prima parte. Il mio progetto si chiama "MyNodeMCU". La struttura è mostrata sopra.

Questo progetto è un esempio Cloud4RPi leggermente modificato. Ho deciso di memorizzare il token del dispositivo e le credenziali Wi-Fi nel file di configurazione invece del codice.

Il file platform.io ha il seguente aspetto:

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

Passaggio 3: installa le librerie

Installa librerie
Installa librerie

L'installazione delle librerie è abbastanza semplice. Puoi farlo dall'interfaccia grafica dell'IDE o aggiungendo i nomi delle librerie richieste alla sezione lib_deps del file platform.io:

; …lib_deps = cloud4rpi-esp-arduino Adafruit Unified Sensor Libreria di sensori DHT build_flags = -D MQTT_MAX_PACKET_SIZE=1024 -D MQTT_MAX_TRANSFER_SIZE=128 -D CLOUD4RPI_DEBUG=0 -D SSID_Y\NAME=\"=_YOUR_PASS_P_I\" -WORD_WIFI_\" D CLOUD4RPI_TOKEN=\"_IL_TUO_DISPOSITIVO_TOKEN_\"

Le librerie aggiunte verranno installate automaticamente nella sottocartella di un progetto.

L'intestazione main.cpp ha il seguente aspetto:

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

Passaggio 4: collegare un sensore DHT11

Adafruit fornisce un esempio DHTtester.ino di connessione di un sensore.

Questo codice inizializza un sensore e definisce una struttura per memorizzare il risultato della misurazione (nel caso sia andata a buon fine):

#define DHTPIN 2 // Pin digitale connesso al sensore DHT#define DHTTYPE DHT11 // DHT 11 // … DHT dht(DHTPIN, DHTTYPE); dht.begin(); // … struct DHT_Result { float h; galleggiante t; }; DHT_Result dhtResult;

La funzione successiva mostra come leggere i dati del sensore e memorizzarli nella struttura dati sopra descritta

void readSensors() { float h = dht.readHumidity(); // Legge la temperatura come Celsius (predefinita) float t = dht.readTemperature();

// Controlla se qualche lettura è fallita ed esci

if (isnan(h) || isnan(t)) { Serial.println(F("Impossibile leggere dal sensore DHT!")); Restituzione; } dhtResult.h = h; dhtResult.t = t; }

Passaggio 5: invio di dati al cloud

Una volta che abbiamo quei dati, il passo successivo è inviarli al servizio Cloud4RPi.

La pagina Cloud4RPi per Arduino descrive l'API della libreria, che è un insieme di metodi utilizzati per:

  • creare, leggere e aggiornare le variabili,
  • inviare valori variabili nel cloud utilizzando il protocollo MQTT.

La libreria supporta tre tipi di variabili: Bool, Numeric e String.

Il flusso di lavoro della libreria inizia con la creazione di un'istanza API utilizzando il token del dispositivo dal sito Web cloud4rpi.io (fare riferimento alla parte 1 dell'articolo per i dettagli).

#se definito(CLOUD4RPI_TOKEN) Cloud4RPi c4r(CLOUD4RPI_TOKEN); #else Cloud4RPi c4r("!!!_NO_DEVICE_TOKEN_!!!"); #finisci se

Quindi, dichiara le variabili per le letture DHT11:

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

Quindi, prendi i dati dal sensore, salvali in variabili e pubblica i dati su Cloud4RPi:

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

La temperatura e l'umidità non cambiano rapidamente, quindi non è necessario inviare più di un valore ogni 5 minuti.

Passaggio 6: diagnostica

Cloud4RPi supporta dati di diagnostica insieme a valori variabili. Ho usato il tempo di attività, la potenza del segnale Wi-Fi e l'indirizzo IP come dati diagnostici:

c4r.declareDiagVariable("Indirizzo_IP");c4r.declareDiagVariable("RSSI"); // Potenza del segnale WiFi c4r.declareDiagVariable("Uptime");

Nota: la funzione millis che utilizzo per ottenere il tempo di attività si azzera ogni ~50 giorni. Che è più che sufficiente per il mio progetto.

Il codice seguente imposta i valori delle variabili diagnostiche:

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

La funzione uptimeHumanReadable converte i millisecondi in una forma conveniente:

String uptimeHumanReadable (millisecondi lunghi senza segno) { static char uptimeStr[32]; secondi lunghi senza segno = millisecondi / 1000; unsigned long mins = secs / 60; unsigned int ore = min / 60; unsigned int giorni = ore / 24; secondi -= minuti * 60; minuti -= ore * 60; ore -= giorni * 24; sprintf(uptimeStr, "%d giorni %2.2d:%2.2d:%2.2d", (byte)giorni, (byte)ore, (byte)min, (byte)sec); return String(uptimeStr); }

La funzione restituisce una stringa come questa 5 giorni 10:23:14 invece di uno strano numero grande.

Passaggio 7: avviare ed eseguire il debug del progetto

Avvia ed esegui il debug del progetto
Avvia ed esegui il debug del progetto

Dopo aver compilato il codice creato e averlo flashato in NodeMCU, il dispositivo si connette a un servizio cloud e inizia a inviare dati.

È possibile aumentare la verbosità della registrazione impostando la variabile del preprocessore CLOUD4RPI_DEBUG su 1 (aggiungere -D CLOUD4RPI_DEBUG=1 alla sezione build_flags nel file platform.io).

Quindi, apri il sito cloud4rpi.io e nota il nuovo dispositivo online. Aprilo per vedere tutti i valori delle variabili ricevuti dal dispositivo: sensore e diagnostica.

Passaggio 8: configurazione del dashboard

Configurazione del cruscotto
Configurazione del cruscotto

A questo punto la connessione dati al cloud è operativa. Ora, configuriamo la rappresentazione visiva dei dati.

Ho utilizzato l'interfaccia utente di configurazione del dashboard per creare il dashboard seguente.

La dashboard è condivisibile, quindi la condivido immediatamente con il mio amico.

Passaggio 9: conclusione

Conclusione
Conclusione

Il codice completo del progetto è disponibile nel sommario.

È tutto per ora!

Domande e suggerimenti sono ben accetti nei commenti.

Consigliato: