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

Philips AC0951

Philips, модель AC0951. 4/5 · пайка. Модуль Wi-Fi говорит со вторым микроконтроллером.

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

AC0951 говорит с основным MCU по тому же UART, что и серия 600: 115200 8N1, кадры FE FF. Штатный радиомодуль — MXCHIP EMC6069-P на дочерней плате, не ESP, который можно переписать. Его отключают и ставят свой ESP32-C3. Внутреннее имя в README — AC0951/13, кодовое Unicorn. Прошивка MCU в разборе — 0.3.3.

AC0950 тем же кодом не проверен: захваты и рабочая установка в репозитории только с AC0951.

Часть платы сидит на сети 220 В. Разбирают только со вынутой вилкой.

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

  • Локальный вентилятор, фильтры и датчики, которые компонент philips отдаёт для модели AC0951
  • Управление без облака Philips и без учётной записи
  • Протокол разобран по захватам в каталоге captures/ репозитория, не по догадке

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

  • Облако Philips перестаёт видеть очиститель, пока штатный модуль сидит со сбросом на земле
  • AC0950 этим гайдом не обещается
  • Гарантия после разбора обычно заканчивается
  • Без своего ESP остаётся штатный локальный CoAP, но это уже не ESPHome и в этот гайд не входит

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

  • Свой ESP32-C3
  • Паяльник и провода на верхнюю кромку модуля MXCHIP
  • Площадка +5V идёт на VIN своего ESP, земля на землю
  • Компонент philips, модель AC0951

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.

Винтов сверху нет. Верхний колпачок поворачивают против часовой стрелки и снимают. Под ним плата управления.

На верхней кромке MXCHIP, по подписям README:

  • +5V и GND — на штыревом разъёме слева сверху. Это питание модуля, +5V на VIN своего ESP
  • A — UART от MCU к модулю (кадры STATUS). Сюда сажают RX своего ESP
  • B — UART от модуля к MCU (HS1, QUERY, SET). Сюда сажают TX своего ESP
  • C — сброс модуля, на плате подтяжка 10 кОм. Чтобы штатный модуль замолчал, C сажают на землю

Логика UART здесь 3,3 В. Пять вольт только на площадке питания.

Плата Philips AC0951
Плата после снятия колпачка против часовой стрелки. Часть платы на сети, вилку держат вынутой. Фото: tuct/levoit, MIT
Модуль MXCHIP на плате AC0951
Связь идёт через модуль MXCHIP. Площадка A — в RX своего ESP, B — в TX, C на землю глушит штатный модуль. Фото: tuct/levoit, MIT
Установленный свой ESP на Philips AC0951
Рабочая установка на AC0951 из README. AC0950 этим кадром не подтверждён. Фото: tuct/levoit, MIT

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, паяльник больше не нужен.

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

Пины в конфиге — те GPIO, к которым вы припаяли A и B, а не номера с серии 600.

tx_pin ведите на площадку B, rx_pin — на площадку A. Пример для Seeed XIAO ESP32-C3 в репозитории: приём GPIO20 (D7, площадка A), передача GPIO10 (D10, площадка B). Старая копия того файла ставила передачу на GPIO21. Это поправил pull request 63. Полный yaml и фото установки — в devices/philips-900-series.

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

# philips-ac0951-c3_dev.yaml
# Philips Series 900 AC0951 C3 dev variant — AC0950 plus the PM sensor entities.
# The AC0951 reports PM2.5 and the allergen index on the MCU link exactly as the
# AC0651 does, and gains the Auto fan preset with them.
#
# ✅ Confirmed working on hardware — these are the pins from that install.
substitutions:
  device_name: philips-ac0951-c3
  wifi_ap_ssid: "Philips-AC0951"
  philips_model: AC0951
  rx_pin: GPIO20   # XIAO C3 D7  — MCU TX (pad A) -> ESP RX
  tx_pin: GPIO10   # XIAO C3 D10 — ESP TX -> MCU RX (pad B)

esphome:
  name: ${device_name}

esp32:
  board: seeed_xiao_esp32c3
  framework:
    type: esp-idf

packages:
  common: !include common.yaml

logger:
  level: DEBUG   # VERBOSE shows the raw UART frames (TX -> / RX <-)

# AC0951-only entities (added on top of common.yaml).
sensor:
  - platform: philips
    philips: purifier
    name: "PM2.5"
    type: pm2_5
  - platform: philips
    philips: purifier
    name: "Allergen Index"
    type: allergen_index

# Keeps the particulate sensor measuring while the unit is on standby, so PM2.5
# and the allergen index stay live with the fan off. Confirmed on the wire in
# captures/sensor_monitoring_on_off_on.txt (group 0x03 DP 0x34).
switch:
  - platform: philips
    philips: purifier
    name: "Standby Sensor Monitoring"
    type: standby_sensor

# common.yaml
# Shared config for the Philips Series 900 (AC0950/AC0951) — included by the
# per-board yamls. Do not flash this directly.
#
# The protocol is decoded and the `philips` component supports AC0950/AC0951.
# Confirmed working on an AC0951 — the GPIO pins below and the module-parking
# method are the ones from that install. See the README for the pad map and the
# warning about holding pad C low before connecting TX.
logger:
  # On the ESP32-C3 the default logger UART (UART0) is GPIO20/21 — the same pins
  # as the MCU link. Log over the native USB instead so those pins stay free.
  hardware_uart: USB_SERIAL_JTAG

external_components:
  - source:
      type: local
      path: ../../components
    components: [philips]

uart:
  - id: uart_mcu
    tx_pin: ${tx_pin}
    rx_pin: ${rx_pin}
    baud_rate: 115200   # confirmed by logic analyzer (86.4-86.6 us/byte)

philips:
  id: purifier
  model: ${philips_model}   # AC0950 / AC0951

fan:
  - platform: philips
    philips: purifier
    name: "Fan"

sensor:
  - platform: philips
    philips: purifier
    name: "Pre-filter"
    type: filter_clean
  - platform: philips
    philips: purifier
    name: "HEPA Filter"
    type: filter_lifetime
  - platform: philips
    philips: purifier
    name: "Timer Remaining"
    type: timer_remaining

# 900-series controls. The MCU mirrors brightness to DP 0x05 itself, and
# derives the timer countdown from the hours written here.
switch:
  - platform: philips
    philips: purifier
    name: "Child Lock"
    type: child_lock
  - platform: philips
    philips: purifier
    name: "Beep"
    type: beep

select:
  - platform: philips
    philips: purifier
    name: "Display Brightness"
    type: display_brightness

number:
  - platform: philips
    philips: purifier
    name: "Sleep Timer"
    type: timer

button:
  - platform: philips
    philips: purifier
    name: "Reset Pre-filter"
    type: reset_prefilter
  - platform: philips
    philips: purifier
    name: "Reset HEPA Filter"
    type: reset_hepa

text_sensor:
  - platform: philips
    philips: purifier
    name: "MCU Version"
    type: mcu_version

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

Сущности придут из компонента после того, как UART оживёт. Пока в логе нет обмена, не добавляйте автоматизации по PM: нули на неподключённой линии легко принять за чистый воздух.

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

  • AC0950 в README прямо назван непроверенным
  • A и B перепутаны: STATUS должен приходить в RX, команды уходить в TX
  • Площадку C забывают посадить на землю, и штатный модуль отвечает MCU одновременно с вашим ESP
  • Колпачок крутят по часовой и ломают фиксаторы. Нужно против часовой

9. Источники