Обновлено 2026-09-22

BlitzWolf BH-AP2501

BlitzWolf, модель BH-AP2501. 5/5 · замена модуля. Модуль Wi-Fi говорит со вторым микроконтроллером.

1. Название и модель

BH-AP2501 крупнее BH-AP1. Штатное радио — модуль Tuya WBR3 на чипе Beken, не ESP. Карточка прямо говорит: модуль нужно заменить, предпочтительно на ESP-12F. Сложность 5/5.

После замены ESP-12F занимает ту же линию к Tuya MCU: TX GPIO1, RX GPIO3, 9600. EN и RES с подтяжкой 10 кОм вверх, GPIO15 — подтяжка вниз. Конфиг ведёт wildekek/BlitzHome-BH-AP2501. В названии репозитория BlitzHome, карточка — BlitzWolf. Это один разбор.

WBR3 прошивкой ESPHome не становится. Его выпаивают или оставляют молчать и ставят ESP на те же площадки UART. Путать с BH-AP1, где TYWE3S уже является ESP8266, нельзя.

2. Что даёт перепрошивка

  • Вентилятор очистителя локально
  • Ионизатор, datapoint 6
  • УФ, datapoint 9
  • Сброс ресурса фильтра, datapoint 11, отдельной кнопкой
  • Таймер до 24 часов, точка 18 в конфиге репозитория

3. Что теряется

  • Приложение BlitzWolf / Tuya больше не управляет аппаратом
  • Штатный WBR3 после замены не вернуть без пайки обратно
  • Гарантия заканчивается в момент выпаивания модуля

4. Что понадобится

  • Паяльник, оплётка, фен или навык выпаивания модуля
  • ESP-12F и подтяжки, как в таблице карточки
  • USB–UART 3,3 В
  • Репозиторий wildekek, не конфиг BH-AP1

5. Разборка и пины

Программатор USB–UART подключают к модулю, который прошивают, крест-накрест:

  • Земля переходника (GND) — на землю платы. Этот провод обязателен.
  • TX переходника — на RX модуля. На плате площадка часто подписана RX, RXD или RXD0.
  • RX переходника — на TX модуля. На плате это TX, TXD или TXD0.
  • Питание логики — 3,3 В. Пять вольт на эти площадки не подают. Если плату уже кормит её блок, линию 3,3 В с переходника не подключают вторым источником.
  • Для входа в загрузчик ESP8266 и ESP32 площадку GPIO0 (IO0, BOOT) замыкают на землю и в этот момент подают питание. После старта записи землю с GPIO0 снимают.

Если у этой модели в тексте ниже другие имена площадок, прямой порядок TX–TX или прошивка по USB, делайте как написано там. Общая схема выше — для обычного модульного UART.

На фото репозитория виден посадочный ESP-12F. Подтяжки не пропускайте: EN и RES к питанию через 10 кОм, GPIO15 к земле через 10 кОм. Без подтяжки GPIO15 модуль ESP8266 часто не стартует.

UART к MCU: TX модуля на приём MCU, RX модуля на передачу MCU. В таблице карточки это GPIO1 и GPIO3 уже со стороны ESP.

Модуль ESP-12F для BH-AP2501
Штатный WBR3 меняют на ESP-12F. Подтяжки EN, RES и GPIO15 берите из карточки, на этом кадре их может быть не видно. Фото: esphome/devices.esphome.io, GPL-3.0

6. Прошивка

Готового файла «прошивка именно этой модели» на этом сайте нет. Её собирает ESPHome из текстового конфига YAML: туда входят Wi-Fi, пины и команды второго чипа. Чужой .bin из интернета почти наверняка собран с чужим паролем сети.

Какую программу ставить

  • ESPHome Dashboard — дополнение в Home Assistant или программа на компьютере. В ней пишут YAML, нажимают Install, и она сама собирает прошивку. Установка: дополнение для Home Assistant или команда pip install esphome.
  • ESPHome Web, сайт web.esphome.io, — загрузчик в браузере Chrome или Edge. Им записывают уже собранный .bin на ESP8266 и ESP32 через USB–UART. На BK72xx он не рассчитан.
  • esptool — программа Espressif, чтобы снять заводскую копию флеша и записать .bin, если браузер порт не видит. Репозиторий: espressif/esptool.
  • ltchiptool — то же самое для чипов Beken BK72xx (модули WB3S, WBR3, CB3S и похожие). ESPHome для них собирается через LibreTiny. Программа: libretiny-eu/ltchiptool, описание платы: компонент bk72xx.

Как собрать конфиг

  1. В Dashboard нажмите New Device и выберите чип, который стоит на плате: ESP8266, ESP32 или BK72xx. Имя — латиницей, без пробелов.
  2. Пароль Wi-Fi уберите в файл secrets.yaml рядом с конфигом. В YAML оставьте ssid: !secret wifi_ssid и password: !secret wifi_password.
  3. Блок UART, модель и скорости из раздела ниже вставьте в этот файл. Полный пример, если он длинный, берите по ссылке в источниках внизу страницы, а не из гайда соседней модели.
  4. Строки api: и ota: оставьте. Без api: Home Assistant устройство не увидит. Ключ шифрования Dashboard предлагает сам, его потом спросит интеграция ESPHome.

Как залить первый раз

  1. Подключите USB–UART, как в разделе «Разборка и пины»: земля переходника на землю платы, TX переходника на RX модуля, RX переходника на TX модуля. Логика 3,3 В. Имена площадок на конкретной плате — там же.
  2. Для ESP8266 и ESP32 замкните GPIO0 (IO0, BOOT) на землю и в этот момент подайте питание. Для BK72xx ltchiptool сам просит перезапустить чип, обычно кратким отключением земли.
  3. В Dashboard: Install → Plug into this computer, выберите порт переходника. Либо Install → Manual download, сохраните .bin и откройте его на web.esphome.io. Из терминала то же самое делает esphome run имя-устройства.yaml.
  4. Когда в логе появится IP-адрес, GPIO0 от земли отпустите, провода можно отпаять. Следующие обновления идут по Wi-Fi, пункт OTA, паяльник больше не нужен.

Дальше — только то, чем эта модель отличается от общей схемы.

Плата esp12e. Журнал с UART снять:

Сущности ионизатора, УФ и сброса фильтра длинные, их копируют из репозитория, а не собирают по памяти. Первый раз ESP-12F удобно прошить ещё до установки на плату, если вывели GPIO0, TX, RX и землю.

Базовый конфиг этой модели с карточки или из репозитория компонента. Wi-Fi, пароль и OTA задайте как в общем разделе выше. Пароли из исходника сюда не перенесены.

substitutions:
  device_name: "air-purifier"
  device_friendly_name: "Air Purifier"
  device_description: "Clean air good."
  time_timezone: "Europe/Amsterdam"

esphome:
  name: $device_name
  friendly_name: $device_friendly_name
  comment: $device_description
  name_add_mac_suffix: false

esp8266:
  board: esp12e

# Enable status LED
status_led:
  pin:
    number: GPIO2
    inverted: true

# Enable logging
logger:
  level: INFO
  # Disable logging via UART, we need it for the Tuya MCU
  baud_rate: 0

# Enable Home Assistant API
uart:
  rx_pin: GPIO3
  tx_pin: GPIO1
  baud_rate: 9600

# Register the Tuya MCU connection
tuya:

# Fan control
output:
  - platform: template
    id: fan_output
    type: float
    # Off = 0
    # Low = 0.33333
    # Medium = 0.66666
    # High = 1
    write_action:
      - logger.log:
          level: INFO
          format: "Fan output: %f"
          args: ["state"]
      - if:
          condition:
            lambda: return (state == 0);
          then:
            - fan.turn_off:
                id: tuya_fan
          else:
            - if:
                condition:
                  lambda: return (state < .4);
                then:
                  # Fan = Low
                  - fan.turn_on:
                      id: tuya_fan
                      speed: 4
                else:
                  - if:
                      condition:
                        lambda: return (state < .8);
                      then:
                        # Fan = Mid
                        - fan.turn_on:
                            id: tuya_fan
                            speed: 3
                      else:
                        # Fan = High
                        - fan.turn_on:
                            id: tuya_fan
                            speed: 2

fan:
  - platform: speed
    output: fan_output
    id: speed_fan
    name: "Fan"
    speed_count: 3
  - platform: "tuya"
    name: "Fan"
    id: "tuya_fan"
    internal: True
    switch_datapoint: 1
    speed_datapoint: 3
    speed_count: 4 # 1=Auto, 2=High, 3=Medium, 4=Sleep

sensor:
  # PM2.5 sensor
  - platform: "tuya"
    name: "PM2.5"
    sensor_datapoint: 2
    device_class: "aqi"
    state_class: "measurement"
    accuracy_decimals: 0
  # Filter utilization
  - platform: "tuya"
    name: "Filter remaining"
    sensor_datapoint: 5
    unit_of_measurement: "%"
    icon: mdi:ticket-percent-outline
    entity_category: diagnostic
  # Countdown remaining
  - platform: "tuya"
    name: "Countdown Remaining"
    sensor_datapoint: 19
    icon: mdi:fan-clock
    unit_of_measurement: "minutes"
  # Air quality
  - platform: "tuya"
    name: "Air Quality"
    sensor_datapoint: 21
    icon: mdi:air-filter

number:
  # Set countdown timer
  - platform: "tuya"
    name: "Countdown"
    number_datapoint: 18
    unit_of_measurement: hours
    mode: box
    icon: "mdi:fan-clock"
    min_value: 0
    max_value: 24
    step: 1

switch:
  # Ionizer
  - platform: "tuya"
    name: "Ionizer"
    switch_datapoint: 6
    icon: mdi:chart-bubble
  # UV sterilization
  - platform: "tuya"
    name: "UV sterilization"
    switch_datapoint: 9
    icon: mdi:sun-wireless
  # Filter reset
  - platform: "tuya"
    id: "filter_reset"
    switch_datapoint: 11
    internal: True

# Button to reset filter cartridge
button:
  - platform: template
    name: "Filter cartridge reset"
    entity_category: diagnostic
    icon: mdi:air-filter
    on_press:
      then:
        - fan.turn_on: tuya_fan
        - switch.turn_on: filter_reset
        - delay: 1s
        - switch.turn_off: filter_reset

7. Настройка в Home Assistant

Сброс фильтра в конфиге — это включить вентилятор, пульнуть datapoint 11 и выключить его через секунду. Не держите эту точку включённой.

8. Известные баги и как их обойти

  • Прошивка BH-AP1 на этот корпус не встанет: там другой модуль и другие точки
  • GPIO15 без подтяжки вниз не даёт ESP-12F загрузиться
  • WBR3 и ESP-12F вместе на одной UART отвечают MCU хором

9. Источники