logo elektroda
logo elektroda
X
logo elektroda

How to flash HLK-W801-KIT-V1.1 WinnerMicro board and pair it with Home Assistant?

p.kaczmarek2 2181 1

TL;DR

  • HLK-W801-KIT-V1.1 is a development board built around the 32-bit, 240MHz WinnerMicro W801-C400 SoC for IoT and Home Assistant projects.
  • It flashes over UART with wm_tool.exe or UpgradeTools, using CH340N-controlled RTS/RESET; WX00 chips need only power, RX, TX, GND, and 3.3V.
  • The board includes 2MB of on-board Flash and 288KB of RAM, and the kit is available for as little as $2.
  • Flashed with OpenW800/OpenBeken, it starts an access point, accepts Wi-Fi setup at 192.168.4.1, and supports Home Assistant Discovery.
  • The demo runs DHT11, AHT20, BMP280, DS18B20, and OpenWeatherMap together, but RTS must be cleared for boot and short startup commands are length-limited.
Generated by the language model.
ADVERTISEMENT
📢 Listen (AI):
  • HLK-W801-KIT-V1.1 development board on a breadboard with two sensors.
    The HLK-W801-KIT-V1.1 is a development board powered by the 32-bit, 240MHz WinnerMicro W801-C400 SoC. It includes 2MB of on-board Flash and 288KB of RAM, making it ideal for various IoT applications. The board can easily integrate with Home Assistant using the provided firmware.
    In this guide, I’ll introduce two tools for flashing firmware onto these boards and demonstrate how to use W800/W801 with various sensors supported by my project. This process is also applicable for flashing IoT devices with W800/W801 chips, but if you’re interested in the development board, it’s available for as little as $2:
    W801 development board with dimensions 70mm x 26mm, priced at $1.65 with a 25% discount.

    HLK-W801-KIT-V1.1 development board on a breadboard.
    HLK-W801-KIT-V1.1 development board held by a person using tweezers.
    Close-up of the HLK-W801-KIT-V1.1 development board with a WinnerMicro W801 chip.
    HLK-W801-KIT-V1.1 development board with visible components on a purple background.
    Understanding HLK-W801-KIT-V1.1 board
    Let's consider HLK-W801-KIT-V1 board schematic:
    Circuit diagram of the HLK-W801-KIT-V1.1 development board featuring the W801-C400 chip.
    HLK-W801-KIT-V1.1 features CH340N USB to UART controller which is used for both UART communication and board resetting - communication is done through UART 1 port, PB19 TXD and PB20 RXD, and reset is done via CH340N RTS pin, which can be easily controlled from many applications, for example from Realterm:
    Screenshot of RealTerm program showing RTS and DTR settings.
    This can be used to reset board for flashing without having to physically press the button, but it can be also misleading, because your firmware will not boot as long RST is set. It has to be cleared for firmware to boot:
    Screenshot of RealTerm program with an open serial port logging window.


    Flashing setup
    WX00 family (W800, W801, W600, W601) requires only power and UART signals to flash. No boot signal needed. So if you are doing a DIY version, you only need to solder RX, TX and GND and 3.3V. Then once you start the flashing tool of your choice, you need to either do power off/on cycle or use fifth signal - RESET - to force reboot.

    Flashing with wm_tool.exe
    First tool, the command line-only utility, was already presented here.
    Uploading firmware via wm_tool.exe is very simple, you just need to specify the COM port, source file, and reset while needed:
    
     wm_tool.exe -c COM9 -dl W:\GIT\wm_sdk_w800\bin\w800\w800.fls
    

    So we execute this command and get:
    Command prompt showing the process of loading a file using wm_tool.exe.
    Now you have to reboot the device - either via the RESET button or RTS UART signal on HLK-W801-KIT-V1.1.
    Command line screenshot showing the firmware upload process for the W800-C400 microcontroller.
    There is no need to worry about the 0% progress visible for the entire programming time, the program just does not refresh this counter.
    Once flashed, do reset again so firmware can start.
    Get wm_tool here: https://github.com/openshwprojects/FlashTools/tree/main/WinnerMicro


    Flashing with UpgradeTools
    Second method is the GUI approach. The tool is in Chinese by default, but it can be changed to English:
    Screenshot of Upgrade Tools application version 1.5.9, set to English language.
    Then you need to select the source firmware file (FLS file), target UART port, chip type (W80X or W60X), and click "Open Serial Port". Then press "Download". This is how it looks like during flashing:
    Upgrade Tools V1.5.9 interface with open firmware flashing log on a W80X board.
    Once it flashes, you should see your firmware UART output in the same log window as the flashing log:
    Screenshot of the Upgrade Tools V1.5.9 interface showing a firmware flashing log.
    You can use "RESET" button to reboot your board remotely, but flashing procedure should do this automatically.
    Get UpgradeTools here: https://github.com/openshwprojects/FlashTools/tree/main/WinnerMicro

    W800 SDK setup
    If you want to program W800 manually, you can use
    wm_sdk_w800 tutorial. Keep in mind that W800 firmware is the same as W801, but in order to run it on W600/W601, you need to use w600 SDK.


    W800 with OpenW800/OpenBeken
    You can also flash W800/W801 with OpenBeken firmware, get FLS file here:
    https://github.com/openshwprojects/OpenBK7231T_App
    Download it from Releases tab. Once you flash it and reset, the open access point should appear:
    List of available Wi-Fi networks on a computer with the selected network OpenW800_CDCE8EC7
    Connect to it and navigate to page 192.168.4.1, then open Config, and Configure WiFi:
    User interface of OpenW800 with WiFi and Web configuration option highlighted.

    OpenW800/OpenBeken Demo
    I've prepared a simple OpenBeken demo featuring multiple sensors and drivers on the HLK-W801-KIT-V1.1 board. My setup features:
    - DHT11 for temperature and humidity measurements,
    - AHT20 for enhanced temperature and humidity readings,
    - BMP280 for barometric pressure and temperature,
    - DS18B20 for precise one-wire temperature monitoring,
    - and last but not least, OpenWeatherMap integration for real-time weather information fetched from the web.
    This setup showcases the flexibility of OpenBeken, supporting various sensors simultaneously and allowing seamless integration of OBK scripting engine and Home Assistant Discovery.
    The hardware setup is fairly simple, the only thing worth noting is the presence of 4.7k pull up resistor next to DS18B20:

    HLK-W801-KIT-V1.1 development board on a breadboard
    HLK-W801-KIT-V1.1 development board with connected sensors on a breadboard.
    HLK-W801-KIT-V1.1 development board with sensors connected on a breadboard.
    HLK-W801-KIT-V1.1 development board with sensors on a prototyping board
    All revelant information is shown on main OBK page:
    OpenW800 interface displaying sensor data and weather integration.
    The software is simple as well, but it happens in two different places of the firmware.
    First, some pins are configured in Configure Module tab:
    Pin configuration interface for DHT11 and DS1820 sensors on a development board.
    This specified which IO pin is used for which role. Futhermore, it specified which channels (like variables) are used to store measurement results.
    Then, most of things is scripted in the "Short startup command" script:
    
    waitFor WiFiState 4
    
    startDriver DS1820
    
    startDriver BMP280 PB9 PB8 9 10 11 236
    
    startDriver AHT2X PB12 PB13 11 12
    
    startDriver OpenWeatherMap
    owm_setup 40.7128 -74.0060 KEY_CENSORED
    setChannelType 6 Temperature_div10
    setChannelType 7 Humidity
    setChannelType 8 Pressure_div100
    owm_channels 6 7 8
    owm_request
    
    setChannel 30 0
    again:
    addChannel 30 1
    echo Hello $CH30
    delay_s 1
    goto again
    

    Let's consider this script line by line. First, we have:

    
    waitFor WiFiState 4
    

    which just waits for OBK WiFi state to become connected. Then:

     startDriver DS1820 

    This line initializes the DS1820 temperature sensor driver (using the pin from Configure Module tab).

     startDriver BMP280 PB9 PB8 9 10 11 236 

    This initializes the BMP280 driver, specifying the I2C pins (PB9 for CLK and PB8 for DAT), along with channels used to store temperature, pressure, and humidity data (if present). The "236" specifies I2C address of the device.

     startDriver AHT2X PB12 PB13 11 12 

    This initializes the AHT2X driver for another sensor, specifying PB12 as CLK and PB13 as DAT. Channels 11 and 12 are used to store temperature and humidity data from this sensor.

     startDriver OpenWeatherMap owm_setup 40.7128 -74.0060 KEY_CENSORED 

    Here, the OpenWeatherMap driver is started. The owm_setup command sets the location to New York City (latitude 40.7128, longitude -74.0060) and uses an API key (censored in the script). This allows fetching weather data from OpenWeatherMap, which can be later stored in channels.

     setChannelType 6 Temperature_div10
    setChannelType 7 Humidity
    setChannelType 8 Pressure_div100
    owm_channels 6 7 8 

    These lines define the types of data stored in specific channels:
    - Channel 6 will store temperature data, divided by 10 for scaling.
    - Channel 7 will store humidity data.
    - Channel 8 will store pressure data, divided by 100 for scaling. The owm_channels command associates these channels with the corresponding OpenWeatherMap data.
     owm_request 

    This sends a request to OpenWeatherMap to fetch the current weather data. The data will then populate channels 6, 7, and 8. Keep in mind that you should call this command in a loop or a repeating event periodically if you want to have refreshed data.

    Then, a simple loop is made. First, channel 30 is initialized to 0.
     setChannel 30 0 

    This will be used as a counter or a control variable.

    again:
    addChannel 30 1
    echo Hello $CH30
    delay_s 1
    goto again

    This is a simple infinite loop:
    - addChannel 30 1 increments the value in Channel 30 by 1.
    - echo Hello $CH30 prints "Hello" followed by the current value of Channel 30.
    - delay_s 1 introduces a 1-second delay before repeating the loop.
    - goto again returns to the start of the loop.
    This script demonstrates sensor initialization, data handling, and a basic loop for repetitive tasks. You can later extend it, but keep in mind that short startup command length is limited, so you will need to use autoexec.bat for longer scripts....


    Futher OBK reading
    Please check out our tutorials on Elektroda Youtube:
    https://www.youtube.com/@elektrodacom/playlists
    Our Github repository:
    https://github.com/openshwprojects/OpenBK7231T_App
    Our OBK docs:
    https://github.com/openshwprojects/OpenBK7231T_App/blob/main/docs/README.md
    Online builds and custom OBK driver guides:
    OpenBeken online building system - compiling firmware for all platforms (BK7231, BL602, W800, etc)
    How to create a custom driver for OpenBeken with online builds (no toolchain required)
    HA pairing guide:




    Summary
    HLK-W801-KIT-V1.1 features a W801-C400 microcontroller which is compatible with firmware compiled for W800-C400. It can be programmed with wm_sdk_w800 SDK, but you can also use a premade OpenW800 (OpenBeken port) solution, which supports many various sensors and drivers out of the box. It can be also used to pair device with Home Assistant via Home Assistant Discovery, so you can include W800/W801 in your home automation system.
    Do you have any experience with Winner Micro chips, and did you find them in any IoT products? Let us know and let's discuss.

    Cool? Ranking DIY
    Helpful post? Buy me a coffee.
    About Author
    p.kaczmarek2
    Moderator Smart Home
    Offline 
    p.kaczmarek2 wrote 14360 posts with rating 12274, helped 649 times. Been with us since 2014 year.
  • ADVERTISEMENT
  • #2 21811292
    p.kaczmarek2
    Moderator Smart Home
    Update 2026
    As of 2026, this platform read/write is also supported by our flash tool:
    https://github.com/openshwprojects/BK7231GUIFlashTool
    The connection (soldering, wires), is the same, but you can use our tool instead of the legacy one.
    Please check it out and use it instead of legacy tools, let us know how it works for you!
    Helpful post? Buy me a coffee.
📢 Listen (AI):

FAQ

TL;DR: With 2MB Flash and 288KB RAM, the HLK-W801-KIT-V1.1 is "easy to flash" over UART and can join Home Assistant after you load an OpenBeken/OpenW800 .fls, reset the board, connect to its AP, and set Wi-Fi at 192.168.4.1. This FAQ is for makers who want a fast W801 flashing and pairing path. [#21391305]

Why it matters: This thread turns a low-cost WinnerMicro dev board into a practical Home Assistant sensor node with clear flashing, reset, and scripting steps.

Tool Interface What you do Best use
wm_tool.exe Command line Select COM port, pass .fls, then reset Fast manual flashing
UpgradeTools GUI Pick .fls, UART, chip family, click Download Easier guided flashing
BK7231GUIFlashTool GUI Use the same wiring as legacy tools Preferred newer option

Key insight: W800/W801 flashing needs only UART, power, and a reboot. The most common failure is holding reset low through CH340N RTS, which blocks firmware boot even after a successful flash.

Quick Facts

  • The HLK-W801-KIT-V1.1 uses a 32-bit, 240MHz W801-C400 SoC with 2MB on-board Flash and 288KB RAM, which is enough for OpenBeken/OpenW800 demos with multiple sensors. [#21391305]
  • The board exposes a CH340N USB-to-UART bridge on UART1, using PB19 TXD and PB20 RXD for communication, while RTS can drive reset remotely. [#21391305]
  • WinnerMicro WX00 flashing needs 3.3V, GND, RX, and TX only; no boot pin is required. You use RESET only to reboot into flashing or to start the new firmware. [#21391305]
  • The demo combines DHT11, AHT20, BMP280, DS18B20, plus OpenWeatherMap data, and the DS18B20 wiring specifically uses a 4.7k pull-up resistor. [#21391305]
  • The author notes the development board can cost as little as $2, making it a low-cost test platform for Home Assistant Discovery and sensor scripting. [#21391305]

How do I flash an HLK-W801-KIT-V1.1 WinnerMicro board with wm_tool.exe step by step?

Use wm_tool.exe with the board’s COM port and a .fls firmware file, then reboot the board. 1. Connect the HLK-W801-KIT-V1.1 over USB/UART and note the COM port, such as COM9. 2. Run wm_tool.exe -c COM9 -dl path\to\firmware.fls. 3. Reset or power-cycle the board so flashing starts, then reset again after programming so the firmware boots. The thread shows this exact command format and notes the board uses UART flashing without a boot signal. [#21391305]

What wiring is required to flash a W800 or W801 board over UART, and when do I need to use RESET?

You need 3.3V, GND, RX, and TX to flash a W800 or W801 over UART. WinnerMicro WX00 boards do not need a boot pin for flashing. Use RESET only to reboot after starting the flash tool or after programming finishes. If you build your own adapter, solder RX, TX, GND, and 3.3V first. A fifth line, RESET, is optional but useful for forcing a reboot without unplugging power. [#21391305]

Why does the HLK-W801-KIT-V1.1 firmware not boot if the CH340N RTS line keeps RST asserted?

The firmware does not boot because the board stays held in reset while RTS keeps RST asserted. On the HLK-W801-KIT-V1.1, the CH340N RTS line can control reset remotely. That helps during flashing, but it also creates a failure case: the MCU never starts normal code until you release reset. The thread states this directly: the firmware will not boot as long as RST is set, so you must clear it after flashing. [#21391305]

What is OpenBeken/OpenW800, and how does it help connect a W801 board to Home Assistant?

OpenBeken/OpenW800 is firmware that lets a W800 or W801 run sensors, scripts, and Home Assistant integration without writing a full SDK application. "OpenBeken/OpenW800 is firmware that adds drivers, scripting, and Home Assistant Discovery to WinnerMicro boards, enabling fast IoT setup with prebuilt .fls images." After flashing it, the board creates an access point, exposes configuration pages, and supports multiple sensors out of the box. That shortens setup time on the HLK-W801-KIT-V1.1 significantly. [#21391305]

How do I pair a flashed HLK-W801-KIT-V1.1 with Home Assistant using Home Assistant Discovery?

Flash OpenBeken/OpenW800, connect the board to Wi-Fi, and let Home Assistant Discovery expose the device automatically. 1. Flash the .fls image and reset the board. 2. Join the temporary access point, open 192.168.4.1, and configure Wi-Fi. 3. Enable or use the firmware’s Home Assistant Discovery support so Home Assistant can detect the device and its channels. The thread states this firmware can pair the device with Home Assistant through Discovery after flashing and network setup. [#21391305]

Which flashing tool is better for WinnerMicro boards: wm_tool.exe, UpgradeTools, or BK7231GUIFlashTool?

BK7231GUIFlashTool is the preferred newer option, while wm_tool.exe and UpgradeTools remain workable legacy choices. The January 17, 2026 update says read and write are supported by BK7231GUIFlashTool and recommends using it instead of legacy tools. Choose wm_tool.exe if you want a simple CLI flow. Choose UpgradeTools if you want a GUI with live logs. Choose BK7231GUIFlashTool if you want the author’s current recommendation with the same wiring. [#21811292]

What is the WinnerMicro W801-C400, and how is it related to the W800-C400 firmware mentioned in the guide?

The W801-C400 is the 32-bit, 240MHz SoC on the HLK-W801-KIT-V1.1, and it runs firmware built for the W800-C400 in this guide. The thread explicitly says W801 firmware is the same as W800 firmware. It also adds an exception: W600 and W601 need the separate w600 SDK instead of the wm_sdk_w800 path. That relation matters because you can flash W801 with W800-targeted .fls images and OpenW800 builds. [#21391305]

How do I use UpgradeTools in English to flash a W801 FLS file and monitor the UART log afterward?

Switch UpgradeTools to English, select the .fls file and UART target, then start the serial port and download. 1. Change the interface language from Chinese to English. 2. Choose the firmware file, the correct COM port, and the chip family, such as W80X. 3. Click Open Serial Port, then Download. After flashing, the same log window shows normal UART output from the firmware. The thread notes flashing should reset the board automatically, though a manual RESET button is also available. [#21391305]

Why does wm_tool.exe show 0% progress during programming even though the W801 flash process is still running?

It shows 0% because the utility does not refresh that counter during programming. The thread states there is no need to worry if 0% remains visible for the entire flash session. That is a display limitation, not a write failure. You should judge completion by the tool’s behavior and by resetting the board afterward to confirm the firmware starts. This is a known cosmetic issue in the described workflow. [#21391305]

How do I connect to the OpenBeken access point on a newly flashed W801 board and configure Wi-Fi at 192.168.4.1?

After flashing and resetting, join the board’s open access point and configure Wi-Fi at 192.168.4.1. OpenBeken/OpenW800 starts an AP immediately after first boot in the shown setup. Connect to that AP from a phone or PC, browse to 192.168.4.1, open Config, and use Configure WiFi. Once the board joins your network, it can expose sensors and Discovery data to Home Assistant. That is the first-run onboarding path shown in the guide. [#21391305]

What sensors from the demo setup are supported on the HLK-W801-KIT-V1.1, and how are DHT11, AHT20, BMP280, and DS18B20 assigned to pins or channels?

The demo supports DHT11, AHT20, BMP280, DS18B20, and OpenWeatherMap data on one HLK-W801-KIT-V1.1 board. The script starts DS1820 on a pin defined in Configure Module. It starts BMP280 on PB9 and PB8, storing data in channels 9, 10, and 11, with I2C address 236. It starts AHT2X on PB12 and PB13, using channels 11 and 12. The DS18B20 hardware also needs a 4.7k pull-up resistor. DHT11 appears in the hardware list, but the shown script excerpt does not assign its pin. [#21391305]

How does the OpenBeken short startup command script work on W800/W801, including waitFor, startDriver, owm_setup, and channel configuration?

The script waits for Wi-Fi, starts drivers, maps data into channels, then runs a loop. waitFor WiFiState 4 pauses until the board connects. startDriver loads drivers like DS1820, BMP280, AHT2X, and OpenWeatherMap. owm_setup 40.7128 -74.0060 KEY_CENSORED sets location and API access for weather data. setChannelType and owm_channels 6 7 8 define how temperature, humidity, and pressure are stored. The sample also increments channel 30 once per second with delay_s 1 and goto again. [#21391305]

When should I use autoexec.bat instead of the Short startup command in OpenBeken on WinnerMicro boards?

Use autoexec.bat when your startup script becomes too long for the Short startup command field. The thread says the short startup command has a length limit. The shown example already includes Wi-Fi waiting, four driver starts, channel typing, weather requests, and an infinite loop. That combination can grow quickly once you add more automations. Move larger or more complex logic into autoexec.bat so the board can run longer scripts reliably. [#21391305]

What does Home Assistant Discovery mean in the context of OpenBeken firmware for W800 and W801 devices?

Home Assistant Discovery means the firmware can announce the device and its entities so Home Assistant can add them without manual entity definitions. "Home Assistant Discovery is an integration method that publishes device and sensor metadata automatically, reducing manual setup and making new entities appear in Home Assistant." In this thread, OpenBeken uses that mechanism so a flashed W800 or W801 can join a home automation system after Wi-Fi setup and expose its sensor channels cleanly. [#21391305]

How do I set up OpenWeatherMap in OpenBeken on a W801 board so weather data is fetched into channels and refreshed periodically?

Start the OpenWeatherMap driver, set location and API key, map channels, then call owm_request repeatedly. 1. Add startDriver OpenWeatherMap and owm_setup 40.7128 -74.0060 KEY_CENSORED. 2. Define channel types, such as 6 for Temperature_div10, 7 for Humidity, and 8 for Pressure_div100, then bind them with owm_channels 6 7 8. 3. Run owm_request in a loop or repeating event. The thread explicitly warns that a single request does not keep data fresh. [#21391305]
Generated by the language model.
ADVERTISEMENT