Navigation Menu

Skip to content


Repository files navigation

Arduino esp8266 mh-z19 serial

Build Status Donate License

CO2, humidity and temperature sensor on ESP8266 with mh-z19 co2 sensor and dht-22 temperature and humidity sensor.

You can either use custom backed server to receive data in JSON or build in MQTT client to publish data to MQTT server.

sensor sample

You can use project as backend to this program. See full description on (you can use Google translate from Russian).


All required libraries can be installed with Arduino IDE:

Via console:

arduino --pref "boardsmanager.additional.urls=" --save-prefs
arduino --install-library "ArduinoJson:6.14.1"
arduino --install-library "Adafruit Unified Sensor:1.1.2"
arduino --install-library "DHT sensor library:1.3.8"
arduino --install-library "LiquidCrystal I2C:1.1.2"
arduino --install-library "PubSubClient:2.8.0"
arduino --install-boards esp8266:esp8266

cp settings.sample.h settings.h # EDIT AFTER COPY!

arduino --verify --board esp8266:esp8266:d1:CpuFrequency=80,FlashSize=4M3M arduino-esp8266-mh-z19-serial.ino


  1. Copy file settings.sample.h to settings.h and specify your settings;
  2. Install Adafruit Unified Sensor version 1.1.2;
  3. Install DHT sensor library version 1.3.8;
  4. Install ArduinoJson library v 6.14.1;
  5. Install LiquidCrystal_I2C library v 1.1.2;
  6. Compile and upload your sketch;
  7. Enjoy!

For Wemos D1, before compiling sketch:

  1. Add to additional boards in preferences;
  2. Select wemos D1 (or your other board) in boards manager and install it.

MQTT with Home Assistant

You can use config which looks like this:

  - platform: mqtt
    unique_id: esp-terrace-co2
    name: "ESP terrace CO2"
    state_topic: "esp/terrace/co2"
    qos: 0
    unit_of_measurement: "ppm"

  - platform: mqtt
    unique_id: esp-terrace-humidity
    name: "ESP terrace Humidity"
    state_topic: "esp/terrace/humidity"
    qos: 0
    unit_of_measurement: "%"

  - platform: mqtt
    unique_id: esp-terrace-temperature
    name: "ESP terrace Temperature"
    state_topic: "esp/terrace/temperature"
    qos: 0
    unit_of_measurement: "ºC"