kumekay/kuhomon

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)

Я пока закрою этот вопрос, если все-таки проблема именно с прошивкой, переоткройте, пожалуйста.