This repository contains the Zigbee firmware for Xiaomi LYWSD03MMC Bluetooth temperature and humidity sensor.
The LYWSD03MMC is a Bluetooth temperature and humidity sensor that can be integrated into a Zigbee network using this firmware. This repository hosts the code and related resources to flash the device and make it compatible with Zigbee networks.
-
Full-featured firmware to convert Xiaomi LYWSD03MC device with default ZCL battery, temperature and relative humidity clusters
-
Display support for known revisions
-
OTA support in firmware and binaries in ZCL format for update
-
Flashable over-the-air from custom ATC firmware https://pvvx.github.io/ATC_MiThermometer/TelinkMiFlasher.html
-
Flashable over SWS-UART interface using one of:
- Zigbee compatible hardware (e.g., Zigbee coordinator or gateway).
- Necessary tools for flashing firmware to the sensor.
-
Clone TC32 toolchain according to your host OS:
git clone https://github.com/devbis/tc32.git -b linux
git clone https://github.com/devbis/tc32.git -b macos
git clone https://github.com/devbis/tc32.git -b windows
-
Clone this repository and SDK:
git clone https://github.com/devbis/z03mmc.git git clone https://github.com/devbis/tl_zigbee_sdk.git -b 3.6.8.5 --depth 1 cd z03mmc
-
Configure and build:
cmake -DSDK_PREFIX=$(pwd)/../tl_zigbee_sdk -DTOOLCHAIN_PREFIX=$(pwd)/../tc32 -B build . cmake --build build --target z03mmc.zigbee
Firmware binary is located at
build/src/z03mmc.bin
The binary with OTA header is at the same folder, ending withz03mmc.zigbee
- Open an awesome tool from ATC_MiThermometer https://pvvx.github.io/ATC_MiThermometer/TelinkMiFlasher.html
- Click "Connect" button and find device LYWSD03MMC, wait connection (Connected in logs)
- On new device with stock firmware click "Do Activation" and wait some time
- Next "Select Firmware", choose file with custom bluetooth firmware ATC_ota_400000, click "Start Flashing"
- You will see in logs "Update done after NN seconds"
- Reboot device removing battery, refresh web-page with flashing tool and connect device again (with name ATC_802190 or similar, based on mac-address). Do not change any control on page
- Flash latest z03mmc.bin firmware over transitional firmware to convert it to zigbee. Use https://devbis.github.io/telink-zigbee/ page if previous flasher stops because of the firmware size.
- TTL-USB adaptor
- 1k-1.8k Ohm resistor
- python3 with pyserial module installed
To flash a new firmware via an standard USB to UART adapter, simply connect the Thermometer as seen in the picture Mi_SWS_Connection.jpg to the USB to UART converter and run the TLSR825xComFlasher.py tool.
Example: python3 TLSR825xComFlasher.py -p COM3 wf 0 z03mmc.bin
Example: python3 TLSR825xComFlasher.py -p /dev/ttyUSB0 wf 0 z03mmc.bin
In case if the SWS pin is used by the firmware, try this sequence:
- Power off the sensor
python3 TLSR825xComFlasher.py -p <YOUR_COM_PORT> -t5000 wf 0 z03mmc.bin
- Now you have 5 seconds to power on the sensor
- In case the chip has not started being flashed, run
python3 TLSR825xComFlasher.py -p <YOUR_COM_PORT> wf 0 z03mmc.bin
without the timeout again.
If the flashing fails try to increase timeouts in the script.
The UART flasher software uses the tool from https://github.com/pvvx/ATC_MiThermometer. Thanks to pvvx for the awesome work on this!
z03mmc is based on the original work of @pvvx, and @atc1441, who developed the initial firmware versions for bluetooth-capable device.
- Flash the firmware
- Enable pairing mode on Zigbee coordinator
- In case it is not joining, close the RESET and GND contacts on the board for 3 seconds to reset Zigbee settings. Replug the battery may require
- For zigbee2mqtt you need to add custom converter if you use version 1.33.1 or earlier
This project is licensed under the GNU General Public License 3.0 or later - see the LICENSE.txt file for details.