Tabla de contenido:

Conexión de un sensor DHT11 / DHT22 a la nube con una placa basada en ESP8266: 9 pasos
Conexión de un sensor DHT11 / DHT22 a la nube con una placa basada en ESP8266: 9 pasos

Video: Conexión de un sensor DHT11 / DHT22 a la nube con una placa basada en ESP8266: 9 pasos

Video: Conexión de un sensor DHT11 / DHT22 a la nube con una placa basada en ESP8266: 9 pasos
Video: Arduino IoT Cloud con ESP32, Relé (relay) y Sensor DHT22. Guía completa paso a paso desde cero 2024, Noviembre
Anonim
Conexión de un sensor DHT11 / DHT22 a la nube con una placa basada en ESP8266
Conexión de un sensor DHT11 / DHT22 a la nube con una placa basada en ESP8266

En el artículo anterior, conecté mi placa NodeMCU basada en ESP8266 a un servicio Cloud4RPi. ¡Ahora es el momento de un proyecto real!

Suministros

Requisitos de hardware:

  • Cualquier placa basada en un chip ESP8266 (por ejemplo, NodeMCU)
  • Un sensor DHT11 o DHT22

Software y servicios:

  • Biblioteca de sensores DHT de Adafruit - v1.3.7
  • Sensor unificado Adafruit - v1.0.3
  • cloud4rpi-esp-arduino - v0.1.0
  • Cloud4RPI: panel de control en la nube para dispositivos IoT
  • PlatformIO IDE para VSCode

Paso 1: medir la temperatura y la humedad

Medir la temperatura y la humedad
Medir la temperatura y la humedad

Ya tenía un sensor DHT11, así que decidí usarlo para medir la temperatura y la humedad. Elija una biblioteca Arduino para leer los datos de los sensores.

El registro de Arduino contiene varias bibliotecas, de las cuales seleccioné la más popular.

De acuerdo con su repositorio de GitHub, también debemos agregar un paquete de sensor unificado Adafruit.

Paso 2: crear y configurar el proyecto

Crear y configurar proyecto
Crear y configurar proyecto

Ya describí cómo crear un proyecto de PlatformIO e instalar bibliotecas en la primera parte. Mi proyecto se llama "MyNodeMCU". La estructura se muestra arriba.

Este proyecto es un ejemplo de Cloud4RPi ligeramente modificado. Decidí almacenar el token del dispositivo y las credenciales de Wi-Fi en el archivo de configuración en lugar del código.

El archivo platform.io tiene el siguiente aspecto:

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

Paso 3: instalar bibliotecas

Instalar bibliotecas
Instalar bibliotecas

La instalación de las bibliotecas es bastante sencilla. Puede hacerlo desde la interfaz gráfica del IDE o agregando los nombres de biblioteca requeridos a la sección lib_deps del archivo platform.io:

; … Lib_deps = cloud4rpi-esp-arduino Adafruit Unified Sensor DHT biblioteca de sensores build_flags = -D MQTT_MAX_PACKET_SIZE = 1024 -D MQTT_MAX_TRANSFER_SIZE = 128 -D CLOUD4RPI_DEBUG = 0 -D SSID_NAME = / "_" TU_PRODUCCIÓN_SS = / "_" TU_PASO_SS = / "_" TU " D CLOUD4RPI_TOKEN = / "_ YOUR_DEVICE_TOKEN _ \"

Las bibliotecas agregadas se instalarán automáticamente en la subcarpeta de un proyecto.

El encabezado main.cpp tiene el siguiente aspecto:

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

Paso 4: conecte un sensor DHT11

Adafruit proporciona un ejemplo DHTtester.ino de una conexión de sensor.

Este código inicializa un sensor y define una estructura para almacenar el resultado de la medición (en caso de que tuviera éxito):

# definir DHTPIN 2 // Pin digital conectado al sensor DHT # definir DHTTYPE DHT11 // DHT 11 //… DHT dht (DHTPIN, DHTTYPE); dht.begin (); //… struct DHT_Result {float h; flotar t; }; DHT_Result dhtResult;

La siguiente función muestra cómo leer los datos del sensor y almacenarlos en la estructura de datos descrita anteriormente.

void readSensors () {float h = dht.readHumidity (); // Leer la temperatura como Celsius (por defecto) float t = dht.readTemperature ();

// Compruebe si alguna lectura falló y salga

if (isnan (h) || isnan (t)) {Serial.println (F ("¡No se pudo leer el sensor DHT!")); regreso; } dhtResult.h = h; dhtResult.t = t; }

Paso 5: envío de datos a la nube

Una vez que tenemos esos datos, el siguiente paso es enviarlos al servicio Cloud4RPi.

La página de Cloud4RPi para Arduino describe la API de la biblioteca, que es un conjunto de métodos utilizados para:

  • crear, leer y actualizar variables,
  • enviar valores de variables a la nube utilizando el protocolo MQTT.

La biblioteca admite tres tipos de variables: Bool, Numeric y String.

El flujo de trabajo de la biblioteca comienza con la creación de una instancia de API utilizando Device Token del sitio web cloud4rpi.io (consulte la parte 1 del artículo para obtener más detalles).

#si está definido (CLOUD4RPI_TOKEN) Cloud4RPi c4r (CLOUD4RPI_TOKEN); #else Cloud4RPi c4r ("!!! _ NO_DEVICE_TOKEN _ !!!"); #terminara si

Luego, declare las variables para las lecturas de DHT11:

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

Luego, obtenga los datos del sensor, guárdelos en variables y publique los datos en Cloud4RPi:

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

La temperatura y la humedad no cambian rápidamente, por lo que no es necesario enviar más de un valor cada 5 minutos.

Paso 6: diagnóstico

Cloud4RPi admite datos de diagnóstico junto con valores variables. Usé el tiempo de actividad, la intensidad de la señal de Wi-Fi y la dirección IP como datos de diagnóstico:

c4r.declareDiagVariable ("Dirección_IP"); c4r.declareDiagVariable ("RSSI"); // Intensidad de la señal WiFi c4r.declareDiagVariable ("Uptime");

Nota: La función millis que utilizo para obtener el tiempo de actividad se restablece a cero cada ~ 50 días. Que es más que suficiente para mi proyecto.

El siguiente código establece valores de variables de diagnóstico:

c4r.setDiagVariable ("RSSI", (Cadena) WiFi. RSSI () + "dBm"); c4r.setDiagVariable ("Dirección_IP", WiFi.localIP (). toString ()); c4r.setDiagVariable ("Uptime", uptimeHumanReadable (currentMillis)); c4r.publishDiag ();

La función uptimeHumanReadable convierte milisegundos a una forma conveniente:

String uptimeHumanReadable (milisegundos largos sin firmar) {static char uptimeStr [32]; segundos largos sin firmar = milisegundos / 1000; minutos largos sin firmar = segundos / 60; horas int sin firmar = minutos / 60; unsigned int días = horas / 24; segundos - = minutos * 60; minutos - = horas * 60; horas - = días * 24; sprintf (uptimeStr, "% d días% 2.2d:% 2.2d:% 2.2d", (byte) días, (byte) horas, (byte) minutos, (byte) segundos); return String (uptimeStr); }

La función genera una cadena como esta 5 días 10:23:14 en lugar de un número grande extraño.

Paso 7: iniciar y depurar el proyecto

Iniciar y depurar el proyecto
Iniciar y depurar el proyecto

Después de compilar el código creado y actualizarlo en NodeMCU, el dispositivo se conecta a un servicio en la nube y comienza a enviar datos.

Puede aumentar el nivel de detalle del registro estableciendo la variable del preprocesador CLOUD4RPI_DEBUG en 1 (agregue -D CLOUD4RPI_DEBUG = 1 a la sección build_flags en el archivo platform.io).

A continuación, abra el sitio cloud4rpi.io y observe el nuevo dispositivo en línea. Ábralo para ver todos los valores de las variables recibidos del dispositivo: sensor y diagnóstico.

Paso 8: Configuración del panel

Configuración del tablero
Configuración del tablero

En este paso, la conexión de datos a la nube está operativa. Ahora, configuremos la representación visual de los datos.

Usé la interfaz de usuario de configuración del panel para crear el siguiente panel.

El tablero se puede compartir, así que lo comparto instantáneamente con mi amigo.

Paso 9: Conclusión

Conclusión
Conclusión

El código completo del proyecto está disponible en la esencia.

¡Eso es todo por ahora!

Las preguntas y sugerencias son bienvenidas en los comentarios.

Recomendado: