Категории

Подключение датчика формальдегида ZE08-CH2O к ESP32 по UART

2025-09-29 21:26:16 | IOT умный дом

Датчик ZE08-CH2O — это электрохимический сенсор для измерения концентрации формальдегида (HCHO) в воздухе. В отличие от аналоговых версий, многие современные модули (включая те, что продаются как «ZE08-CH2O serial output» или «SCNK-M1 V2») имеют цифровой UART-выход и выдают данные каждую секунду в формате TTL.

В этой статье — пошаговое руководство по подключению такого датчика к микроконтроллеру ESP32, включая защиту от повреждения и рабочий код на Arduino.

1. Характеристики датчика

2. Почему нельзя подключать напрямую к ESP32?

ESP32 — это 3.3-вольтовый микроконтроллер, и его GPIO-пины не защищены от 5 В. Датчик ZE08-CH2O работает от 5 В и выдаёт на линию TX именно 5 В TTL-сигнал. Прямое подключение к RX-пину ESP32 может привести к повреждению чипа.

Поэтому между TX датчика и RX ESP32 обязательно нужен преобразователь уровня.

3. Варианты защиты: делитель или level converter?

Есть два надёжных способа понизить 5 В до безопасных 3.3 В:

Вариант A: Резистивный делитель напряжения

Простой и дешёвый способ. Подходит для UART, так как частота низкая (9600 бод).

Результат: 5 В → ~3.3 В. Работает стабильно для приёма данных.

Вариант B: Модуль преобразователя уровня (level converter)

Более профессиональное решение. Из твоих вариантов:

Вывод: HW-221 (TXS0108E) — лучший выбор, если он у тебя есть.

4. Схема подключения

5. Формат данных

Каждую секунду датчик отправляет 9-байтовый пакет:

[0] 0xFF
[1] 0x17
[2] HCHO_H (старший байт)
[3] HCHO_L (младший байт)
[4] TEMP_H
[5] TEMP_L
[6] TVOC_H (может быть 0 в некоторых версиях)
[7] TVOC_L
[8] Контрольная сумма = XOR байтов 0–7
  

Концентрация HCHO — в ppb (частях на миллиард). Температура — в десятых долях °C.

6. Код для ESP32 (Arduino IDE)

#include 

HardwareSerial HCHO_Serial(2); // Serial2: RX=16, TX=17

void setup() {
  Serial.begin(115200);
  HCHO_Serial.begin(9600, SERIAL_8N1, 16, 17);
  Serial.println("Ждём данные от ZE08-CH2O...");
}

void loop() {
  if (HCHO_Serial.available() >= 9) {
    byte data[9];
    HCHO_Serial.readBytes(data, 9);

    if (data[0] == 0xFF && data[1] == 0x17) {
      byte chk = 0;
      for (int i = 0; i < 8; i++) chk ^= data[i];
      if (chk == data[8]) {
        uint16_t hcho_ppb = (data[2] << 8) | data[3];
        uint16_t temp_raw = (data[4] << 8) | data[5];
        float temp_c = temp_raw / 10.0;
        float hcho_mg_m3 = hcho_ppb * 0.00123; // при 25°C

        Serial.print("HCHO: ");
        Serial.print(hcho_ppb);
        Serial.print(" ppb | ");
        Serial.print(hcho_mg_m3, 3);
        Serial.println(" mg/m³");
        Serial.print("Temp: ");
        Serial.print(temp_c);
        Serial.println(" °C");
        Serial.println("-------------------");
      }
    }
  }
  delay(100);
}
  

7. Советы по эксплуатации

Заключение

Датчик ZE08-CH2O с UART-выходом — отличный выбор для DIY-систем мониторинга качества воздуха. Главное — не забыть про защиту от 5 В. Используйте либо делитель напряжения, либо, что лучше, модуль вроде HW-221 на TXS0108E. После этого подключение к ESP32 займёт пару минут, а данные будут поступать стабильно.

Удачи в проектах! 🛠️

Комментарии

Джон конор 29.09.2025 21:30
час на прогрев, чет уж автономность с каждым разом улетучивается )

Оставить комментарий

← Назад к списку статей

Важно: Блог-эксперимент

Внимание: Cтатьи здесь сгенерированны через нейросеть, не правил ошибки, да и не до этого пока. Блог только запустил. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
НО!
Каждый кейс я делал минимум один раз. Сервера стоят, клиенты довольны, дата-центры не горят.

Если у вас есть вопросы, или Нашли неточность? пишите в коментах — вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.

Посетителей сегодня: 0


© Digital Specialist | Не являемся сотрудниками Google, Яндекса и NASA
Кто я | HSH | Контакты и регион