|
| 1 | +# Arduino-ESP32 Zigbee Multi-Switch Example |
| 2 | + |
| 3 | +This example demonstrates how to configure a Zigbee device as a multi-switch controller that can control up to three different Zigbee lights independently. The switch can operate in either coordinator or router mode, making it compatible with Home Assistant integration. |
| 4 | + |
| 5 | +# Supported Targets |
| 6 | + |
| 7 | +Currently, this example supports the following targets. |
| 8 | + |
| 9 | +| Supported Targets | ESP32-C6 | ESP32-H2 | |
| 10 | +| ----------------- | -------- | -------- | |
| 11 | + |
| 12 | +## Hardware Required |
| 13 | + |
| 14 | +* One development board (ESP32-H2 or ESP32-C6) acting as Zigbee multi-switch controller |
| 15 | +* One or more Zigbee light devices (loaded with Zigbee_On_Off_Light example) |
| 16 | +* A USB cable for power supply and programming |
| 17 | + |
| 18 | +### Configure the Project |
| 19 | + |
| 20 | +The example uses the BOOT button (pin 9) on ESP32-C6 and ESP32-H2 as the physical switch input. The switch can be configured to operate in two modes: |
| 21 | + |
| 22 | +1. **Coordinator Mode**: For running your own Zigbee network |
| 23 | +2. **Router Mode**: For Home Assistant integration |
| 24 | + |
| 25 | +#### Using Arduino IDE |
| 26 | + |
| 27 | +To get more information about the Espressif boards see [Espressif Development Kits](https://www.espressif.com/en/products/devkits). |
| 28 | + |
| 29 | +* Before Compile/Verify, select the correct board: `Tools -> Board` |
| 30 | +* Select the Zigbee mode: `Tools -> Zigbee mode: Zigbee ZCZR (coordinator/router)` |
| 31 | +* Select Partition Scheme for Zigbee: `Tools -> Partition Scheme: Zigbee 4MB with spiffs` |
| 32 | +* Select the COM port: `Tools -> Port: xxx` where the `xxx` is the detected COM port |
| 33 | +* Optional: Set debug level to verbose to see all logs from Zigbee stack: `Tools -> Core Debug Level: Verbose` |
| 34 | + |
| 35 | +## Features |
| 36 | + |
| 37 | +The multi-switch example provides the following functionality: |
| 38 | + |
| 39 | +1. **Light Configuration** |
| 40 | + - Configure up to 3 different lights using their endpoint and IEEE address |
| 41 | + - Configuration is stored in NVS (Non-Volatile Storage) and persists after power loss |
| 42 | + - Remove configured lights when needed |
| 43 | + |
| 44 | +2. **Control Commands** |
| 45 | + - Control all bound lights simultaneously: |
| 46 | + - Turn all bound lights ON |
| 47 | + - Turn all bound lights OFF |
| 48 | + - Toggle all bound lights |
| 49 | + - Control individual lights (1-3): |
| 50 | + - Turn light ON |
| 51 | + - Turn light OFF |
| 52 | + - Toggle light |
| 53 | + |
| 54 | +3. **Network Management** |
| 55 | + - Factory reset capability |
| 56 | + - Open network for device joining |
| 57 | + - View bound devices and current light configurations |
| 58 | + |
| 59 | +## Serial Commands |
| 60 | + |
| 61 | +The example accepts the following commands through the serial interface: |
| 62 | + |
| 63 | +* `config` - Configure a new light (requires light number, endpoint, and IEEE address) |
| 64 | +* `remove` - Remove a configured light |
| 65 | +* `on` - Turn all bound lights ON |
| 66 | +* `off` - Turn all bound lights OFF |
| 67 | +* `toggle` - Toggle all bound lights |
| 68 | +* `1on`, `2on`, `3on` - Turn individual light ON |
| 69 | +* `1off`, `2off`, `3off` - Turn individual light OFF |
| 70 | +* `1toggle`, `2toggle`, `3toggle` - Toggle individual light |
| 71 | +* `freset` - Perform factory reset |
| 72 | +* `open_network` - Open network for device joining (only for coordinator role) |
| 73 | + |
| 74 | +## Troubleshooting |
| 75 | + |
| 76 | +If the End device flashed with the example `Zigbee_On_Off_Light` is not connecting to the coordinator, erase the flash of the End device before flashing the example to the board. It is recommended to do this if you re-flash the coordinator. |
| 77 | +You can do the following: |
| 78 | + |
| 79 | +* In the Arduino IDE go to the Tools menu and set `Erase All Flash Before Sketch Upload` to `Enabled` |
| 80 | +* In the `Zigbee_On_Off_Light` example sketch call `Zigbee.factoryReset()` |
| 81 | + |
| 82 | +By default, the coordinator network is closed after rebooting or flashing new firmware. |
| 83 | +To open the network you have 2 options: |
| 84 | + |
| 85 | +* Open network after reboot by setting `Zigbee.setRebootOpenNetwork(time)` before calling `Zigbee.begin()` |
| 86 | +* In application you can anytime call `Zigbee.openNetwork(time)` to open the network for devices to join |
| 87 | + |
| 88 | +***Important: Make sure you are using a good quality USB cable and that you have a reliable power source*** |
| 89 | + |
| 90 | +* **LED not blinking:** Check the wiring connection and the IO selection |
| 91 | +* **Programming Fail:** If the programming/flash procedure fails, try reducing the serial connection speed |
| 92 | +* **COM port not detected:** Check the USB cable and the USB to Serial driver installation |
| 93 | + |
| 94 | +If the error persists, you can ask for help at the official [ESP32 forum](https://esp32.com) or see [Contribute](#contribute). |
| 95 | + |
| 96 | +## Contribute |
| 97 | + |
| 98 | +To know how to contribute to this project, see [How to contribute.](https://github.com/espressif/arduino-esp32/blob/master/CONTRIBUTING.rst) |
| 99 | + |
| 100 | +If you have any **feedback** or **issue** to report on this example/library, please open an issue or fix it by creating a new PR. Contributions are more than welcome! |
| 101 | + |
| 102 | +Before creating a new issue, be sure to try Troubleshooting and check if the same issue was already created by someone else. |
| 103 | + |
| 104 | +## Resources |
| 105 | + |
| 106 | +* Official ESP32 Forum: [Link](https://esp32.com) |
| 107 | +* Arduino-ESP32 Official Repository: [espressif/arduino-esp32](https://github.com/espressif/arduino-esp32) |
| 108 | +* ESP32-C6 Datasheet: [Link to datasheet](https://www.espressif.com/sites/default/files/documentation/esp32-c6_datasheet_en.pdf) |
| 109 | +* ESP32-H2 Datasheet: [Link to datasheet](https://www.espressif.com/sites/default/files/documentation/esp32-h2_datasheet_en.pdf) |
| 110 | +* Official ESP-IDF documentation: [ESP-IDF](https://idf.espressif.com) |
0 commit comments