ESP32 y MH-Z19

 

  • Conectaremos el MH-Z19 con el ESP32.
  • Descargaremos las librerías SoftwareSerial y MHZ19 uart.
  • Comentaremos el programa necesario.. 
  •    

    Material requerido.

     

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

    Diagrama de conexion

    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:

    Instalar libreria

    Luego haz como siempre:

    Menu de arduino

    Y elige la librería que acabas de descargar:

    montaje de libreria zip

    Al pulsar Abrir, se te instalara la librería en tu entorno Arduino. Para instalar el SoftwareSerial, vamos a usar el administrador de bibliotecas:

    Consola arduino

    Y Ahora escribe espSoftwareSerial, y una vez que te busque la librería dale a instalar:

    Seleccionando biblioteca

    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:

    sw_get_values

    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.

     

    IMAGEN DE MARCA

     

    Deja una respuesta