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); }
M5StickCとMH-Z19Bで二酸化炭素濃度測定 pic.twitter.com/BAULcueLMc
— タラオ.育児() (@chem_phys_elec) April 16, 2023
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); // }