Hobby Science&Experiment

愛と工作の日々

趣味でやっている工作や勉強したことのメモ書きです。

M5StickC/ESP32-WROVERとCO2センサー(MH-Z19B)でCO2濃度測定

過去に同センサーとラズパイでCO2測定を行いましたが、今回はM5StickCでの測定となります。下記を参考にさせて頂きました。コードはヘッダ部分、文字サイズ以外のみ修正しそれ以外はそのまま使用させていただきました。
shoarai.com

// 追記:M5StickCで必要なヘッダをインクルードする。
#include <M5StickC.h>
#include <MHZ19_uart.h>

// 変更:接続するピンの番号を変更する。
const int rx_pin = 36;
const int tx_pin = 26;

MHZ19_uart mhz19;

void setup()
{
  // 追記:M5StickC Plusの初期化と、G36ピンを使うためにG25ピンをフローティングにする。
  M5.begin();
  pinMode(36, INPUT);
  gpio_pulldown_dis(GPIO_NUM_25);
  gpio_pullup_dis(GPIO_NUM_25);

  Serial.begin(9600);
  mhz19.begin(rx_pin, tx_pin);
  mhz19.setAutoCalibration(false);

  // 追記:デフォルトだと画面が見づらいので、横向き表示でフォントを大きくする。
  M5.Lcd.setRotation(3);
  M5.Lcd.setTextSize(3);

  // 変更:文字を画面に表示する。
  M5.Lcd.println("MH-Z19 is warming up now.");
  delay(10 * 1000);
}

void loop()
{
  int co2ppm = mhz19.getCO2PPM();
  int temp = mhz19.getTemperature();

  // 追記:画面の表示とカーソルを初期化することで、前回の文字の表示を消す。
  M5.Lcd.fillScreen(BLACK);
  M5.Lcd.setCursor(0, 0);

  // 変更:文字を画面に表示する。
  M5.Lcd.print("CO2: ");
  M5.Lcd.println(co2ppm);
  M5.Lcd.print("temp: ");
  M5.Lcd.println(temp);

  delay(5000);
}

OLEDは良いですね。
残念なのは引き出せるピンが少ない点です。

# ESP32の場合
ESP32-WROVER使用。16,17ピンではだめでした
github.com

/*----------------------------------------------------------
    MH-Z19 CO2 sensor  SAMPLE
  ----------------------------------------------------------*/

#include <MHZ19_uart.h>
const int rx_pin = 32; //Serial rx pin no
const int tx_pin = 33; //Serial tx pin no
MHZ19_uart mhz19;

/*----------------------------------------------------------
    MH-Z19 CO2 sensor  setup
  ----------------------------------------------------------*/
void setup()
{
  Serial.begin(9600);
  setupMHZ();
}

/*----------------------------------------------------------
    MH-Z19 CO2 sensor  loop
  ----------------------------------------------------------*/
void loop()
{
  int co2ppm = mhz19.getCO2PPM();
  int temp = mhz19.getTemperature();

  Serial.print("co2: ");
  Serial.println(co2ppm);
  Serial.print("temp: ");
  Serial.println(temp);

  delay(5000);
}

void setupMHZ(){
  mhz19.begin(rx_pin, tx_pin);
  mhz19.setAutoCalibration(false);
  mhz19.setHardwareSerialNo(2);
  Serial.println("MH-Z19 is warming up now.");
  delay(3 * 1000); //
}