CO2センサーの値をESP32-WROVER-EのSoftwareSerialで取得する
はじめに
前回、ハードウェアシリアルでつなぐことができなかったのでPWMでデータを取得したが、今回はソフトウェアシリアルで取得するようにしてみました。
ただし焦点がぼやけるので、AWS IoTへの接続部分は消しました。
なぜハードウェアシリアルでつなぐことができなかったの?
ESP32-WROVER-Eには、ハードウェアシリアルが1つしかなく、PCとのやり取りで使用しているため、センサーとのやり取りには使えません。
なぜソフトウェアシリアルを使わなかったの?
私の注意力不足です。
[mhz19_uart]のソースの以下の部分を見て、ソフトウェアシリアルを使っているものだと勘違いしていました。
#ifdef ARDUINO_ARCH_ESP32
HardwareSerial hserial(_serialno);
hserial.begin(9600, SERIAL_8N1, _rx_pin, _tx_pin);
#else
SoftwareSerial hserial(_rx_pin, _tx_pin);
hserial.begin(9600);
#endif
よく見るまでもなく、上のハードウェアシリアルの方が動いていました。
また、強制的にソフトウェアシリアルを呼んで試してみたときには、Outputできないポートを指定していました。
この「IO34」「IO35」で試していたのですが、こちらもよく見るまでもなく、どちらもTypeが「I」でした。
ソースコード
結局、「IO14」「IO12」を使用して、以下のようなソースにしてみたところ、問題なく動作しました。
今回はMH-Z19用のライブラリとしてこちらを使用しました。
#include <MHZ19.h>
#include <SoftwareSerial.h>
// MH-Z19C
MHZ19 myMHZ19;
const int rx_pin = 14; //Serial rx pin no
const int tx_pin = 12; //Serial tx pin no
SoftwareSerial mySerial(rx_pin, tx_pin);
void setup(){
Serial.begin(115200);
delay(100);
mySerial.begin(9600);
myMHZ19.begin(mySerial);
Serial.println("Callibrating...");
myMHZ19.autoCalibration(false);
}
void loop(){
int CO2 = myMHZ19.getCO2();
int8_t Temp = myMHZ19.getTemperature();
Serial.println("CO2 (ppm): " + String(CO2) + "\tTemperature (C): " + String(Temp));
delay(1000*5); // 5sec
}
まとめ
もっと落ち着け、俺。
Author And Source
この問題について(CO2センサーの値をESP32-WROVER-EのSoftwareSerialで取得する), 我々は、より多くの情報をここで見つけました https://qiita.com/mine820/items/205fdc83dbb2731b84db著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .