ESPHome firmware configurations for Levoit Core 200S and Core 300S air purifiers. Flash these to break free from the VeSync cloud and get native Home Assistant control.
- Levoit Core 200S
- Levoit Core 300S
Full walkthrough including teardown, wiring, flashing, and Home Assistant setup: [YouTube Link Coming Soon]
The ESPHome component that makes this possible was built by acvigue. This repo provides ready-to-use configs built on top of that component.
- Home Assistant with the ESPHome add-on installed
- A USB UART adapter (3.3V logic — confirmed working: DSD Tech SH-U09CS)
- Hook probe jumper wires
- Phillips screwdriver
- 300S only: UART adapter powers the board via 3.3V
- 200S only: Mains power required during flashing — have an extension cord handy
Copy secrets.yaml.example to secrets.yaml and fill in your values:
wifi_ssid: "YourNetworkName"
wifi_password: "YourWiFiPassword"
ap_password: "YourFallbackPassword"
api_key: "YourAPIKey"
ota_password: "YourOTAPassword"Never commit your secrets.yaml file. It is already in .gitignore.
- Open ESPHome in Home Assistant
- Click New Device and skip the wizard
- Paste in the config for your model from the
/configsfolder - Click Install → Manual Download → Modern Format
- Save the downloaded
.binfile
See the video for the full wiring guide. Brief summary:
- Connect UART adapter: TX→RX, RX→TX, GND→GND
- 300S: Connect 3.3V from adapter to board VCC
- 200S: Skip VCC connection, power from mains instead
- Jump IO0 to GND before applying power to enter bootloader mode
- Open ESPHome Web, connect, and flash your
.bin - Remove IO0 jumper once erasing begins
- Reassemble and power on
The purifier will appear as a discovered device in Home Assistant. Accept the adoption and your entities will be ready to use.
- Fan (with speed control)
- Master Power switch
- Display On/Off switch
- Display Lock switch
- Filter Reset button
- Auto Mode select
- WiFi Signal sensor
- Uptime sensor
- PM2.5 sensor
- Air Quality Index sensor
Using more than one of the same model? Just duplicate the config file, give it a unique name, and update your secrets entries to match.
MIT