kumekay / kuhomon

Indoor air monitoring device: CO2, Temperature, Humidity, Pressure
34 stars 12 forks source link

MH-Z19B 'CO2: Header not found' #17

Closed ulenspegel closed 5 years ago

ulenspegel commented 5 years ago

Добрый день! Собрал прибор с датчиком MH-1Z9B на плате Node-MCU V3. Пару часов все работает в норме, данные приходят, лишь иногда проскакивает 'CO2: Header not found', что, как я понимаю, совершенно нормально. Однако через пару часов датчик зависает, данные не приходят, все время выдается 'CO2: Header not found'. При этом сам датчик продолжает работать, загорается красным как положено. Остальные датчики работают хорошо. Выключение-включение ни к чему не приводит, перезагрузка скетча, обнуление EEPROM тоже не помогают, прибор после этого продолжает выдавать -1

kumekay commented 5 years ago

Добрый день, Какую прошивку вы используете? Последнюю из этого репозитория? Напишите, пожалуйста, код вашей функции readCO2

ulenspegel commented 5 years ago

Честно говоря, я затрудняюсь сказать какая прошивка, давно все это было. Скорее всего последнюю из репозитория.

А вот код:

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");
        }

}
kumekay commented 5 years ago

Выглядит нормально. Точно все в порядке с проводами? С каким-нибудь другим кодом, например через usb-uart с компьютера? (Вот один из проектов https://github.com/fedulovivan/mhz19b)

kumekay commented 5 years ago

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