Пример опроса датчика MH-Z19b
После замены MH-Z19b на другой датчик, начал с ним экспериментировать самостоятельно, ранее использовал его в связке с ESPEasy и не задумывался, что под капотом. Если кому-то будет интересно, вот минимальный код для опроса датчика по UART на уровень CO2 и вывод полученного результата в консоль.
#include <SoftwareSerial.h>
#define MH_Z19_RX D4
#define MH_Z19_TX D0
byte cmd_z19[] = {0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79};
byte rpl_z19[] = {0,0,0,0,0,0,0,0,0};
#define CO2_HBYTE 2
#define CO2_LBYTE 3
int z19_co2;
unsigned long mTXRXData(byte cmd[], int tx_len, int rx_len, int hi_byte, int lo_byte) {
SoftwareSerial z19Serial(MH_Z19_RX, MH_Z19_TX);
z19Serial.begin(9600);
while(!z19Serial.available()) {
z19Serial.write(cmd, tx_len);
delay(50);
}
int timeout=0;
while(z19Serial.available() < rx_len ) {
timeout++;
if(timeout > 10) {
while(z19Serial.available()) {
z19Serial.read();
break;
}
}
delay(50);
}
for (int i=0; i < rx_len; i++) {
rpl_z19[i] = z19Serial.read();
}
z19Serial.end();
int high = rpl_z19[hi_byte];
int low = rpl_z19[lo_byte];
unsigned long val = high*256 + low;
return val;
}
void co2_measure() {
z19_co2 = mTXRXData(cmd_z19, sizeof(cmd_z19)/sizeof((cmd_z19)[0]), sizeof(rpl_z19)/sizeof((rpl_z19)[0]), CO2_HBYTE, CO2_LBYTE);
Serial.printf("CO2 value: %d \n", z19_co2);
return;
}
void setup() {
Serial.begin(115200);
delay(10);
}
void loop() {
co2_measure();
delay(10 * 1000L);
}
Датчик подключено к D0 (RX на датчике) и к D4 (TX на датчике) esp8266, опрос происходит каждые 10 секунд.
Один ответ к «Пример опроса датчика MH-Z19b»