Started from community projects (acvigue, mulcmu) and evolved into a generic Levoit ESPHome component for Core/Vital models.
| Item | Value |
|---|---|
| Model | Core 400S |
| Tested MCU FW | 3.0.0 |
| ESP Module | ESP32-SOLO-1C |
| Board | CORE400S Ctrl V1.2 |
| Fan Speeds | 4 |
| CADR (spec) | 415 m³/h |
| Room Size | 9–83 m² (97–894 ft²) |
| ESPHome | 2026.1.2+ |
| PM Sensor | PM2008MS |
| Feature | Type | Notes |
|---|---|---|
| Fan | fan | 4 speeds, presets: Manual / Auto / Sleep |
| Auto Mode | select | Default / Quiet / Room Size |
| Auto Mode Room Size | number | 9–83 m² |
| Display | switch | Toggle LED display |
| Child Lock | switch | |
| PM2.5 | sensor | µg/m³ |
| AQI | sensor | As reported by MCU |
| Current CADR | sensor | m³/h, updated every 5s |
| Filter Life Left | sensor | % remaining |
| Filter Low | binary_sensor | On when < 5% |
| Filter Lifetime | number | Configurable in months |
| Reset Filter Stats | button | Resets CADR/runtime counters |
| Timer | number | Run timer in minutes |
| MCU Version | text_sensor | |
| Error | text_sensor | "Ok" or "Sensor Error" |
Very similar to Core 300S but the PCB needs to be unclipped from the carry holes after removing the filter and filter housing.
- Place upside down, remove base cover and filter to expose 8 screws (4 have washers)
- Remove all 8 screws — they are soft metal, do not overtighten when reassembling
- Slide a pry tool between the tabs to separate base and top sleeve
- Unplug the logic board (use a screwdriver or kitchen knife from the side)
- Remove the fan unit to access the logic board
I had to use extended wires for re-assembly, did not find another way!
| Pin | Signal |
|---|---|
| 1 | TX |
| 2 | RX |
| 3 | GND |
| 4 | 3.3V |
| 5 | IO0 |
| 6 | EN |
Connect to the J1 debug header (or solder to TXD0/RXD0/IO0/+3V3/GND) with a USB-UART converter (3.3V TTL).
Connect IO0 to GND before powering on to enter bootloader mode.
esptool read_flash 0 ALL levoit-core400s-backup.binNote: may fail if watchdog-protected. Try while the PCB is externally powered.
- Copy
secrets-example.yaml→secrets.yamland fill in your Wi-Fi and encryption key - Adjust the device name in the config if running multiple units
- Check the component README for UART pin mapping per board
esphome run levoit-core400s.yamlReassemble and enjoy!
Use the pre-generated builder yaml to flash without a local clone — all config is inlined, no !include or packages needed:
| File | Board |
|---|---|
levoit-core400s-builder.yaml |
original ESP32-SOLO-1C |
levoit-core400s-builder-c3.yaml |
ESP32-C3 replacement |
levoit-core400s-builder-s3.yaml |
ESP32-S3 replacement |
Upload to the ESPHome web builder or paste into the ESPHome dashboard. Regenerate with .\make-builder-yaml.ps1 from the devices/ folder.
esptool erase_flash
esptool write_flash 0x00 levoit-core400s-backup.binReplacing the original ESP32 lets you keep the original firmware intact and switch back easily.
Recommended modules:
- Seeed XIAO ESP32-C3
- Seeed XIAO ESP32-S3
Wiring: 4 wires — +3.3V, GND, RX, TX
The RX/TX pads are not on the pin header — use the test pads near the original ESP32 on the board. Pull the
ENpin of the original ESP32 to GND to disable it.
TODO: add wiring photos and placement photos





