ESP32 y MH-Z19
Material requerido.
Tienda España | |
---|---|
Un ESP32 | |
Un Sensor HX-Z19 | |
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:
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).
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 CO2 como 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.
Aquí os dejo el programa completo:Final
En mi caso he creado un gauge (El círculo rojo) y un chart de líneas para mostrar las variaciones de las lecturas.