1. Название и модель
Vital 100S — очиститель с четырьмя скоростями, режимом Pet и датчиком PM1003. Плата Vital 100S-C_V1.3, модуль ESP32-C3-SOLO-1. Второй чип крутит вентилятор и считает фильтр. Компонент tuct, модель VITAL100S, линия 115200 8N1. README сверяли с прошивкой MCU 1.0.5.
На плате есть подписанная гребёнка из шести контактов: EN, земля, 3,3 В, TX, RX, IO0.
Крышка на защёлках с обеих сторон. Тянуть только вверх, когда обе стороны уже открыты, иначе рвутся шлейфы справа.
2. Что даёт перепрошивка
- Вентилятор: четыре скорости, Manual / Auto / Sleep / Pet
- Авторежим Default, Quiet, Efficient и площадь комнаты 9–52 м²
- PM2.5 и AQI
- Экран, датчик света, блокировка
- CADR, ресурс фильтра, таймер, версия MCU, текст ошибки
3. Что теряется
- VeSync больше не управляет устройством
- Гарантия после срыва крышки обычно заканчивается
- Дамп может не сняться, если сторож перезагружает чип. README советует пробовать при внешнем питании
4. Что понадобится
- Пластиковый съёмник, не металлическая отвёртка в щель
- USB–UART 3,3 В
- Перемычка IO0 на землю перед включением
- Конфиг из каталога
levoit-vital100s, не файл Core
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.
Крышку поддевают слева. Защёлки есть с обеих сторон, открывают обе, затем тянут вверх. Шлейфы вынимают из держателя справа, не дёргая плату.
Гребёнка по таблице README, контакт 1 ближе к подписи на фото pinout:
- 1 — EN, сброс
- 2 — земля
- 3 — 3,3 В
- 4 — TX
- 5 — RX
- 6 — IO0
Переходник крест-накрест: TX адаптера на RX гребёнки, RX адаптера на TX. IO0 на землю до включения. Пять вольт на эту гребёнку не подают.
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.
Как собрать конфиг
- В Dashboard нажмите New Device и выберите чип, который стоит на плате: ESP8266, ESP32 или BK72xx. Имя — латиницей, без пробелов.
- Пароль Wi-Fi уберите в файл
secrets.yamlрядом с конфигом. В YAML оставьтеssid: !secret wifi_ssidиpassword: !secret wifi_password. - Блок UART, модель и скорости из раздела ниже вставьте в этот файл. Полный пример, если он длинный, берите по ссылке в источниках внизу страницы, а не из гайда соседней модели.
- Строки
api:иota:оставьте. Безapi:Home Assistant устройство не увидит. Ключ шифрования Dashboard предлагает сам, его потом спросит интеграция ESPHome.
Как залить первый раз
- Подключите USB–UART, как в разделе «Разборка и пины»: земля переходника на землю платы, TX переходника на RX модуля, RX переходника на TX модуля. Логика 3,3 В. Имена площадок на конкретной плате — там же.
- Для ESP8266 и ESP32 замкните GPIO0 (IO0, BOOT) на землю и в этот момент подайте питание. Для BK72xx ltchiptool сам просит перезапустить чип, обычно кратким отключением земли.
- В Dashboard: Install → Plug into this computer, выберите порт переходника. Либо Install → Manual download, сохраните
.binи откройте его на web.esphome.io. Из терминала то же самое делаетesphome run имя-устройства.yaml. - Когда в логе появится IP-адрес, GPIO0 от земли отпустите, провода можно отпаять. Следующие обновления идут по Wi-Fi, пункт OTA, паяльник больше не нужен.
Дальше — только то, чем эта модель отличается от общей схемы.
esptool read_flash 0 ALL levoit-vital100s-backup.bin
В компоненте для штатного ESP32 пример такой:
Если ставите свой модуль, пины UART берутся из файла замены в том же каталоге (-c3 или -s3), а EN штатного чипа сажают на землю, как у остальных Levoit в этом репозитории. Возврат: esptool erase_flash, затем запись своего дампа с адреса 0.
Базовый конфиг этой модели с карточки или из репозитория компонента. Wi-Fi, пароль и OTA задайте как в общем разделе выше. Пароли из исходника сюда не перенесены.
# levoit-vital100s.yaml
#example levoit-vital100s.yaml for flashing the original ESP32-C3-SOLO-1
substitutions:
device_name: levoit-vital100s
wifi_ap_ssid: "Levoit-Vital100S"
rx_pin: GPIO018
tx_pin: GPIO019
esphome:
name: ${device_name}
platformio_options:
board_build.flash_mode: dio
# board_build.f_flash is the key PlatformIO reads for flash frequency;
# board_build.flash_freq is not recognised and was silently ignored.
board_build.f_flash: 40000000L
esp32:
board: esp32-c3-devkitm-1
variant: esp32c3
flash_size: 4MB
cpu_frequency: 160Mhz
framework:
type: esp-idf
sdkconfig_options:
CONFIG_FREERTOS_UNICORE: y
packages:
common: !include common.yaml
source: !include ../packages/source_git.yaml
# common.yaml
#Do not use this file directly, it is included in the device yaml files. Put common configuration here.
# Enable logging
logger:
level: VERBOSE
uart:
- id: uart_mcu2esp
tx_pin:
number: ${tx_pin}
inverted: false
rx_pin:
number: ${rx_pin}
inverted: false
baud_rate: 115200
levoit:
id: levoitvital100
model: VITAL100S
fan:
- platform: levoit
levoit: levoitvital100
name: "Fan"
id: levoit_fan1
switch:
- platform: levoit
levoit: levoitvital100
name: "Display"
type: display
- platform: levoit
levoit: levoitvital100
name: "Child Lock"
type: child_lock
- platform: levoit
levoit: levoitvital100
name: "Light Detect"
type: light_detect
number:
- platform: levoit
levoit: levoitvital100
name: "Timer (min)"
type: timer
- platform: levoit
levoit: levoitvital100
name: "Auto Mode Room Size"
type: efficiency_room_size
- platform: levoit
levoit: levoitvital100
name: "Auto Mode Room Size Preset"
type: auto_profile_room_size_input
min_value: 9
max_value: 52
- platform: levoit
levoit: levoitvital100
name: "Filter Months"
type: filter_lifetime_months
sensor:
- platform: levoit
levoit: levoitvital100
name: "PM 2.5"
type: pm25
- platform: levoit
levoit: levoitvital100
name: "AQI"
type: aqi
- platform: levoit
levoit: levoitvital100
name: "Current CADR"
type: current_cadr
- platform: levoit
levoit: levoitvital100
name: "Filter %"
type: filter_life_left
select:
- platform: levoit
levoit: levoitvital100
name: "Fan Operating Mode"
type: fan_operating_mode
- platform: levoit
levoit: levoitvital100
name: "Auto Mode"
type: auto_mode
text_sensor:
- platform: levoit
levoit: levoitvital100
name: "MCU Version"
type: mcu_version
- platform: levoit
levoit: levoitvital100
name: "ESP Version"
type: esp_version
- platform: levoit
levoit: levoitvital100
name: "Timer Duration"
type: timer_duration_initial
- platform: levoit
levoit: levoitvital100
name: "Timer Remaining"
type: timer_duration_remaining
- platform: levoit
levoit: levoitvital100
name: "Auto: High remaining run time"
type: auto_mode_room_size_high_fan
- platform: levoit
levoit: levoitvital100
name: "Error"
type: error_message
button:
- platform: levoit
levoit: levoitvital100
name: "Filter Reset"
type: reset_filter_stats
binary_sensor:
- platform: levoit
levoit: levoitvital100
name: "Filter Low"
type: filter_low
7. Настройка в Home Assistant
Кроме вентилятора и PM2.5 полезен режим Pet и площадь комнаты. Ошибку датчика оставьте видимой: при «Sensor Error» автоматизация по PM2.5 должна молчать, а не включать турбо на нуле.
8. Известные баги и как их обойти
- TX и RX гребёнки подписывают со стороны ESP. Прямое соединение с одноимёнными пинами переходника даёт тишину
- Модель
CORE300Sздесь не подходит - Сторож мешает
read_flash. Повторите при питании от блока, не только от переходника - Шлейф справа легко порвать, если крышку тянуть до того, как открыты оба борта
9. Источники
- GitHub tuct/levoit, Vital 100S https://github.com/tuct/levoit/tree/main/devices/levoit-vital100s
- GitHub README компонента levoit https://github.com/tuct/levoit/blob/main/components/levoit/README.md
- GitHub tuct/levoit https://github.com/tuct/levoit