ESP32 y MH-Z19
Material requerido.
Tienda España | |
---|---|
Un ESP32 | |
Un Sensor HX-Z19 | |
Una par de protoboards |
Usando el MH-Z19 con el ESP32
Hemos usado hasta ahora un NodeMCU y un Arduino MEGA, para leer los valores del sensor MHZ19 y ahora pretendo usar un ESP32 para hacer lo mismo (Tranquilos que será un apunte breve)
¿Porque usar el ESP32? Principalmente porque es un SOC ideal para todo lo que estamos haciendo, pero también porque vamos a empezar una serie de tutoriales para ver cómo podemos publicar las lecturas de un sensor en la nube y la combinación de sensor de CO2 y ESP32 es una apuesta ganadora, pero tened en cuenta que, como veréis en seguida, sería exactamente igual, usando otro sensor cualquiera.
Para los que estáis en proyectos de lectura de CO2, este tuto os vendrá de perlas, y para los que estéis usando cualquier otro sensor, los cambios son mínimos y lo mismo si en vez de usar un ESP32 queréis usar un NodeMCU. Debería funcionar sin modificaciones.
Empezaremos viendo las conexiones y programa en más detalle para leer el MHZ19 con el ESP32 y después pasaremos a ver como publicar las lecturas en un sistema en la nube, para lo que hemos elegido el sistema de Adafruit IO.
Para los habituales de estas páginas, Adafruit os resultara un nombre familiar porque usamos en muchas ocasiones sus librerías, pero hay muchas razones para llevaros a usar su sistema:
- Adafruit se porta muy bien con todos los aficionados a Arduino publicando librerías y tutoriales sin coste para nosotros.
- Nos permiten publicar mediante acceso a un servidor MQTT (Ya iremos hablando) pero para los menos técnicos, acceder vía su sistema de Adafruit IO, elimina toda la jerga técnica y convierte el proceso en una cosa de lo más sencilla.
- Es gratis para pocos valores y hacer pruebas (Con algunas limitaciones) y dispone de una licencia de pago si necesitáis recopilar múltiples sensores en una publicación única, por poco dinero.
- Os ofrece una visualización desde la web (Vía PC o móvil) para ver los resultados de forma muy sencilla.
Así que esta sesión va de desarrollar una práctica con el ESP32 y el sensor MH-Z19 para después ver como publicamos el resultado en un servidor en la nube.
ESP32 con sensor CO2 MH-Z19
Empezamos con las conexiones:
ESP32 | 27 | 25 | GND | 3,3 V |
---|---|---|---|---|
MH-Z19 | RX | TX | GND | Vin |
Aunque el ESP32 tiene varias puertas COM disponibles, me han estado dando guerra así que he preferido tirar de la librería SoftwareSerial, que nos permite definir una puerta serie en cualquier par de pines sin complicaciones y luego conectar ahí el Sensor de CO2.
Empecemos descargando e instalando la librería por el procedimiento habitual: MH-Z19) , Y pulsa el botón verde que dice code:
Luego haz como siempre:
Y elige la librería que acabas de descargar:
Al pulsar Abrir, se te instalara la librería en tu entorno Arduino. Para instalar el SoftwareSerial, vamos a usar el administrador de bibliotecas:
Y Ahora escribe espSoftwareSerial, y una vez que te busque la librería dale a instalar:
El programa es muy sencillo a partir de aquí:
#include <SoftwareSerial.h> #include <MHZ19.h>
Empezamos con las librerías necesarias y ahora definimos los pines de la puerta serie:
#define RXD2 25 #define TXD2 27
Y por último creamos una instancia del MHz19:
MHZ19 mhz(&Serial2);
Donde Serial2 es un puntero a la puerta COM que vamos a definir un poco más adelante. Vamos con el Setup()
void setup() { Serial.begin(9600); Serial.println("Starting...") ; Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2); }
Lo único de interés es la creación de la puerta Serial2 con los parámetros que nos pide el sensor MHZ19 y podemos seguir con el loop:
void loop() { MHZ19_RESULT response = mhz.retrieveData(); if (response == MHZ19_RESULT_OK) { Serial.print(F("CO2: ")); Serial.println(mhz.getCO2()); //Serial.print(F("Temperature: ")); //Serial.println(mhz.getTemperature()); } else { Serial.print(F("Error, code: ")); Serial.println(response); } delay(1000); }
En el loop invocamos la línea:
MHZ19_RESULT response = mhz.retrieveData();
Esto e snecesario para recuperar datos del sensor y de paso asociarlo a una instancia de lectura del MHZ19 llamado response. Si no metes esta línea el sensor no te iniciará la lectura de los datos. Si la respuesta es satisfactoria, ya podemos usar la función
mhz.getCO2() ;
Que es la que lee el valor de CO2 ambiente. Por último, un delay de un segundo que es poco y que en un caso real quizás quisieras subir bastante más este tiempo.
Aquí os dejo el programa completo:
Vamos a dejarlo aquí por hoy. En la próxima sesión veremos cómo registrarnos el sistema Adafruit IO para subir los datos a la nube.