bclose

ESP32 con MH-Z19 y Adafruit IO

Subiendo valores a un servidor en la nube

ESP32 y MH-Z19

 

 
  • Usar la cuenta de Adafruit IO.
  • Escribir un programa para subir lecturas a la nube.
  • Ver el resultado en un Dashboard.  
 

 

Material requerido.

 

 Tienda EspañaTienda Mexico
 Vista principalUn ESP32Un ESP32
 Sensor de CO2Un Sensor HX-Z19
 BreadboardUna par de protoboards

 

Enviando datos a la nube

 

En las dos sesiones previas hemos preparado el terreno para poder subir valores de un sensor de CO2 a la nube por medio de una cuenta en Adafruit io, y por eso si no has leído esas sesiones, sería buen momento para hacerlo antes de continuar leyendo estas líneas.

Sensor HX-Z19 y ESP32
Suscribiendo Adafruit IO

En este nuevo tutorial vamos a partir del ejemplo básico de Adafruit para mostrar cómo leer y subir unos valores de nuestro lector de CO2 a nuestro servidor en Adafruit, usando un programa sencillo Arduino, para leer esos valores y enviarlos a Adafruit IO a unos Feed y Dashboard tal y como hemos definido en el último tutorial.

Vamos a empezar con una variante del ejemplo básico de Adafruit, modifica para presentar las lecturas del sensor de CO2 , en lugar de un simple contador, que figura en el ejemplo de partida, y enviar las lecturas a los Feed que definimos en la sesión anterior.

Hemos elegido el ejemplo básico, porque es el fundamento de todo el sistema para ver como arrancamos la conexión en nuestros programas, y como subimos los valores de la forma mas sencilla posible, de modo que puedas usar este ejemplo como plantilla básica para tus propios proyectos

 

Conectando el ESP32 y el MH-Z19

 

Como ya vimos en los ejemplos previsto el esquema de conexión es este:

Diagrama de conexion

Las librerías de Adafruit traen un ejemplo sencillo para empezar con la subida de datos “adafruitio_00_publish”, pero lo único que hace es dibujar una recta de pendiente constante con lo que no se aprecia demasiado que está recibiendo valores y por eso, vamos a partir de el para en su lugar, subir lecturas de CO2 .

Antes de comenzar con el programa, recuerda que antes de nada más, debes poner los valores de conexión a tu WIFI y tu usuario y contraseña de Adafruit IO en el fichero config.h que preparamos en la sesión anterior.

Si quieres hacer un nuevo programa para esta sesión, crea un nuevo directorio y copia el config.h en este nuevo directorio y salva el programa que vamos a hacer en el mismo directorio. Normalmente un directorio Arduino contiene nuestro programa en solitario, pero en esta ocasión necesitamos config.h esté ubicado en el mismo directorio, asi que asegúrate de ponerlos juntos. Es imprescindible que config.h contenga los valores correctos de conexión y que se encuentre en el mismo directorio que nuestro programa Arduino.

Empecemos con las librerías, son las mismas que la última vez, la librería SoftwareSeriel y definimos los pines de comunicación de nuestra nueva puerta serie:

#include <SoftwareSerial.h>
#include <MHZ19.h>

#define RXD2 25
#define TXD2 27

Una variable instrumental, para recibir las lecturas del sensor de CO2:

int CO2 = 0;

Creamos ahora una instancia del sensor de CO2, como siempre, y luego la línea para conectar con nuestro Feed en Adafruit:

MHZ19 MHz(&Serial2);
AdafruitIO_Feed *Contador = io.feed("Contador");  // set up the 'Contador' feed

En mi caso he creado un Feed llamado “Contador”, pero vosotros deberéis poner el nombre del Feed que hayáis creado (Por ejemplo, CO2 o algo así, y fíjate que aparece en los dos lados del igual, reemplaza ambas).

 
  • Esta es la línea que conecta tu Feed con la llamada a las librerías.
  • Si tienes más de un Feed, tienes que hacer una línea como esta por cada uno.   

Seguimos con el Setup. Las primeras líneas no tienen variación con respecto al programa que hicimos en la sesión de ESP32 y MH-Z19

void setup()
{ Serial.begin(9600);
  Serial.println("Starting...");
  Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2);

  while(! Serial);    // wait for serial monitor to open
  Serial.print("Connecting to Adafruit IO");

Ahora viene, unas líneas imprescindibles para conectarte a los servicios de Adafruit:

io.connect(); // connect to io.adafruit.com

while(io.status() < AIO_CONNECTED)  //  wait for a connection
{ Serial.print(".");
  delay(500);
}
Serial.println();     // we are connected
Serial.println(io.statusText());

Esta línea arranca tu conexión y enlaza tus definiciones de Feeds con el servidor, y las siguientes instrucciones imprimen un punto y seguido en la consola hasta que conectamos. Podemos ir ya al loop(). Otro par de líneas que no puedes olvidar o no funcionara nada:

io.run();

Es la que pone en marcha todo el tinglado y ya estamos listos para subir lecturas. Podemos leer el sensor de COcomo siempre

MHZ19_RESULT response = mhz.retrieveData();

if (response == MHZ19_RESULT_OK)
{   CO2 = mhz.getCO2() ;    // Leemos el MHZ
    Serial.print("sending -> ");
    Serial.println(CO2);
}

Donde simplemente imprimimos el valor de la lectura a la consola por si acaso, y ahora es cuando la matan. Para subir el dato al servidor de Adafruit:

Contenido solo disponible para suscriptores. ¡Accede al contenido! 
    

En mi caso he creado un gauge (El círculo rojo) y un chart de líneas para mostrar las variaciones de las lecturas.

ejemplo de presentacion en adafruit io

 

IMAGEN DE MARCA