MH-Z19B 'CO2: Header not found'
Closed this issue · 4 comments
Добрый день!
Собрал прибор с датчиком MH-1Z9B на плате Node-MCU V3.
Пару часов все работает в норме, данные приходят, лишь иногда проскакивает 'CO2: Header not found', что, как я понимаю, совершенно нормально.
Однако через пару часов датчик зависает, данные не приходят, все время выдается 'CO2: Header not found'. При этом сам датчик продолжает работать, загорается красным как положено. Остальные датчики работают хорошо.
Выключение-включение ни к чему не приводит, перезагрузка скетча, обнуление EEPROM тоже не помогают, прибор после этого продолжает выдавать -1
Добрый день,
Какую прошивку вы используете? Последнюю из этого репозитория?
Напишите, пожалуйста, код вашей функции readCO2
Честно говоря, я затрудняюсь сказать какая прошивка, давно все это было. Скорее всего последнюю из репозитория.
А вот код:
void readCO2() {
// CO2
bool header_found {false};
SENSOR_SERIAL.write(cmd, 9);
memset(response, 0, 7);
// Looking for packet start
while(SENSOR_SERIAL.available() && (!header_found)) {
if(SENSOR_SERIAL.read() == 0xff ) {
if(SENSOR_SERIAL.read() == 0x86 ) header_found = true;
}
}
if (header_found) {
SENSOR_SERIAL.readBytes(response, 7);
byte crc = 0x86;
for (char i = 0; i < 6; i++) {
crc+=response[i];
}
crc = 0xff - crc;
crc++;
if ( !(response[6] == crc) ) {
DEBUG_SERIAL.println("CO2: CRC error: " + String(crc) + " / "+ String(response[6]));
} else {
unsigned int responseHigh = (unsigned int) response[0];
unsigned int responseLow = (unsigned int) response[1];
unsigned int ppm = (256*responseHigh) + responseLow;
co2 = ppm;
DEBUG_SERIAL.println("CO2:" + String(co2));
}
} else {
DEBUG_SERIAL.println("CO2: Header not found");
}
}
Выглядит нормально. Точно все в порядке с проводами? С каким-нибудь другим кодом, например через usb-uart с компьютера?
(Вот один из проектов https://github.com/fedulovivan/mhz19b)
Я пока закрою этот вопрос, если все-таки проблема именно с прошивкой, переоткройте, пожалуйста.