ESP32 con MH-Z19 y Adafruit IO

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ña
     Vista principal Un ESP32
     Sensor de CO2 Un Sensor HX-Z19
     Breadboard Una 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:

    Contador->save(CO2 );
    delay(3000);  // No pongas menos de esto con la licencia gratis

    Dónde CO2 es la variable que contiene la lectura del sensor y Contador, como ya dijimos más arriba, es el nombre de mi Feed.

  • El delay de 3 segundos es porque, en primer lugar, no tiene mucho sentido leer mucho más rápido en este caso, y en segundo lugar y mas importante, la licencia gratuita no te permite subir valores con menos retraso, así que ya sabes, si necesitas leer valores más rápido necesitas la versión de pago .
  •  

    Aquí os dejo el programa completo:Final

    ¡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

     

    Deja una respuesta