| # Matter `Bouffalo Lab` Lighting Example |
| |
| This example functions as a light bulb device type, with on/off and level |
| capabilities and uses a test Vendor ID (VID) and a Product ID (PID) |
| of **0x8005**. |
| |
| Current supported boards: |
| |
| - `BL602DK` |
| - `BL706DK` |
| - `BL704LDK` |
| |
| Legacy supported boards: |
| |
| - `BL602-IoT-Matter-V1`, [here](https://www.amazon.com/dp/B0B9ZVGXD8) to |
| purchase. |
| - `BL602-NIGHT-LIGHT` |
| - `XT-ZB6-DevKit` |
| - `BL706-NIGHT-LIGHT` |
| |
| > Warning: Changing the VID/PID may cause compilation problems, we recommend |
| > leaving it as the default while using this example. |
| |
| ## BL602 |
| |
| BL602/BL604 is combo chip-set for Wi-Fi 802.11b/g/n and BLE 5.0 base-band/MAC. |
| |
| ## BL70x |
| |
| BL70x is combo chip-set for BLE and IEEE 802.15.4/ZigBee/Thread. |
| |
| - BL702/BL706 has 14dbm tx power and is recommended for routing devices. SDK |
| uses BL702 as a general name. |
| - BL702L/BL704L is designed for low power application. SDK uses BL702L as a |
| general name. |
| |
| BL70x has fully certified with all Thread 1.3 features, included Thread `SSED` |
| and Thread Border Router. |
| |
| ## Solutions introduction |
| |
| `Bouffalo Lab` has full connectives support for Matter Applications. |
| |
| - Wi-Fi 4/6 application, we have |
| - BL602, Wi-Fi 4 application. |
| - BL706 + BL602, Wi-Fi 4 application. BL602 runs as a normal WLAN |
| transceiver; TCP/IP stack runs as BL706 side. We recommend this solution |
| is for Openthread Border Router application and Matter ZigBee bridge. |
| - Openthread Border Router application, please refer to Openthread |
| Border Router application |
| - Matter ZigBee Bridge application, please contact `Bouffalo Lab` for |
| support. |
| - Thread application, we have |
| - B70X |
| - Ethernet application, we have |
| - BL706. It supports single Matter application, and also Openthread Border |
| Router application and Matter ZigBee bridge |
| - Openthread Border Router application, please refer to Openthread |
| Border Router application |
| - Matter ZigBee application, please contact `Bouffalo Lab` for |
| support. |
| |
| ## Initial setup |
| |
| The following steps in this document were validated on Ubuntu 20.04. |
| |
| - Install dependencies as specified in the **connectedhomeip** repository: |
| [Building Matter](https://github.com/project-chip/connectedhomeip/blob/master/docs/guides/BUILDING.md). |
| |
| - Clone and initialize the **connectedhomeip** repo |
| |
| ``` |
| git clone https://github.com/project-chip/connectedhomeip.git |
| cd connectedhomeip |
| git submodule update --init --recursive |
| source ./scripts/activate.sh -p bouffalolab |
| ``` |
| |
| - Setup build environment for `Bouffalo Lab` SoC |
| |
| ``` |
| ./integrations/docker/images/stage-2/chip-build-bouffalolab/setup.sh |
| ``` |
| |
| Script `setpu.sh` requires to select install path, and please execute |
| following command to export `BOUFFALOLAB_SDK_ROOT` before building. |
| |
| ``` |
| export BOUFFALOLAB_SDK_ROOT="Your install path" |
| ``` |
| |
| ## Build CHIP Lighting App example |
| |
| The following steps take examples for `BL602DK`, `BL704LDK` and `BL706DK`. |
| |
| - Build lighting app with UART baudrate 2000000 |
| |
| ``` |
| ./scripts/build/build_examples.py --target bouffalolab-bl602dk-light build |
| ./scripts/build/build_examples.py --target bouffalolab-bl616dk-light-wifi build |
| ./scripts/build/build_examples.py --target bouffalolab-bl704ldk-light build |
| ./scripts/build/build_examples.py --target bouffalolab-bl706dk-light build |
| ``` |
| |
| - Build lighting app with RPC enabled and UART baudrate 115200. |
| |
| ``` |
| ./scripts/build/build_examples.py --target bouffalolab-bl602dk-light-light-rpc-115200 build |
| ./scripts/build/build_examples.py --target bouffalolab-bl704ldk-light-light-rpc-115200 build |
| ./scripts/build/build_examples.py --target bouffalolab-bl706dk-light-light-rpc-115200 build |
| ``` |
| |
| ### Build options with build_examples.py |
| |
| - `-wifi`, specifies to use Wi-Fi for Matter application. |
| |
| - BL602 uses Wi-Fi by default. `-wifi` could be elided. |
| - BL702 needs it to specify to use BL706 + BL602 for Wi-Fi. |
| |
| - `-thread`, specifies to use Thread for Matter application. |
| |
| - BL70X uses Thread by default. `-thread` could be elided. |
| |
| - `-ethernet`, specifies to use Ethernet for Matter application. |
| |
| - BL706 needs it to specify to use Ethernet. |
| |
| - `-littlefs`, specifies to use `littlefs` for flash access. |
| - `-easyflash`, specifies to use `easyflash` for flash access. |
| - for platform BL602/BL70X, it is necessary to specify one of `-easyflash` |
| and `-littlefs`. |
| - `-mfd`, enable Matter factory data feature, which load factory data from |
| `MFD` partition |
| - Please refer to |
| [Bouffalo Lab Matter factory data guide](../../../docs/guides/bouffalolab/matter_factory_data.md) |
| or contact to `Bouffalo Lab` for support. |
| - `-shell`, enable command line |
| - `-rpc`, enable Pigweed RPC feature |
| - `-115200`, set UART baudrate to 115200 for log and command line |
| - `-cdc`, enable USB CDC feature, only support for BL706, and can't work with |
| Ethernet Board |
| - `-resetCnt`, enable feature to do factory reset when continues power cycle |
| is greater than 3 |
| - `-mot`, to specify to use openthread stack under |
| `third_party/openthread/repo` |
| - Without `-mot` specified, Matter Thread will use openthread stack under |
| `Bouffalo Lab` SDK |
| - `-fp`, to specify to enable frame pointer feature to print call stack when |
| hit an exception for debug purpose. |
| |
| ## Download image |
| |
| - Using script `*.flash.py`. |
| |
| After building gets done, python script `*.flash.py` will generate under |
| build output folder, such as |
| |
| - `chip-bl602-lighting-example.flash.py` for BL602 |
| - `chip-bl702-lighting-example.flash.py` for BL702 |
| - `chip-bl702l-lighting-example.flash.py` for BL702L |
| |
| Download operation steps as below, please check `help` option of script for |
| more detail. |
| |
| - Connect the board to your build machine |
| |
| - Put the board to the download mode: |
| |
| - Press and hold the **BOOT** button. |
| - Click the **RESET** or **EN** button. |
| - Release the **BOOT** button. |
| |
| - Type following command for image download. Please set serial port |
| accordingly, here we use /dev/ttyACM0 as a serial port example. |
| |
| - `BL602DK`, `BL704LDK` and `BL706DK`. |
| |
| |
| ```shell |
| ./out/bouffalolab-bl602dk-light-littlefs/chip-bl602-lighting-example.flash.py --port /dev/ttyACM0 |
| ./out/bouffalolab-bl616dk-light-wifi/chip-bl616dk-lighting-example.flash.py --port /dev/ttyACM0 |
| ./out/bouffalolab-bl704ldk-light-littlefs/chip-bl702l-lighting-example.flash.py --port /dev/ttyACM0 |
| ./out/bouffalolab-bl706dk-light-littlefs/chip-bl702-lighting-example.flash.py --port /dev/ttyACM0 |
| ``` |
| |
| - To wipe out flash and download image, please append `--erase` |
| option. Take BL602DK as example. |
| |
| ```shell |
| ./out/bouffalolab-bl602dk-light/chip-bl602-lighting-example.flash.py --port /dev/ttyACM0 --erase |
| ``` |
| |
| > Note, better to append --erase option to download image for BL602 |
| > develop board at first time. |
| |
| ## Run the example |
| |
| - You can open the serial console. For example, if the device is at |
| `/dev/ttyACM0` with UART baudrate 2000000 built: |
| |
| ```shell |
| picocom -b 2000000 /dev/ttyACM0 |
| ``` |
| |
| - To reset the board, Click the **RESET** or **EN** button. |
| |
| - To toggle the light bulb’s on/off state by clicking BOOT button, which also |
| toggles the LED. |
| |
| - To do factory reset, press BOOT button over 4 seconds, release BOOT button |
| after led blink stopped. |
| |
| ## Test Commission and Control with chip-tool |
| |
| Please follow [chip_tool_guide](../../../docs/guides/chip_tool_guide.md) and |
| [guide](../../chip-tool/README.md) to build and use chip-tool for test. |
| |
| ### Prerequisite for Thread Protocol |
| |
| Thread wireless protocol runs on BL706, which needs a Thread border router to |
| connect Thread network to Wi-Fi/Ethernet network. Please follow this |
| [guide](../../../docs/guides/openthread_border_router_pi.md) to setup a |
| raspberry Pi border router. |
| |
| After Thread border router setup, please type following command on Thread border |
| router to get Thread network credential. |
| |
| ```shell |
| sudo ot-ctl dataset active -x |
| ``` |
| |
| ### Commissioning over BLE |
| |
| - Reset the board or factory reset the board |
| |
| - Enter build out folder of chip-tool and running the following command to do |
| BLE commission |
| |
| - Wi-Fi |
| |
| ```shell |
| ./chip-tool pairing ble-wifi <node_id> <wifi_ssid> <wifi_passwd> 20202021 3840 |
| ``` |
| |
| - Thread |
| |
| ```shell |
| ./chip-tool pairing ble-thread <node_id> hex:<thread_operational_dataset> 20202021 3840 |
| ``` |
| |
| > `<node_id>`, which is node ID assigned to device within chip-tool |
| > fabric<br> `<wifi_ssid>`, Wi-Fi network SSID<br> `<wifi_passwd>`, Wi-FI |
| > network password<br> `<thread_operational_dataset>`, Thread network |
| > credential which running `sudo ot-ctl dataset active -x` command on border |
| > router to get. |
| |
| ### Cluster control |
| |
| After successful commissioning, cluster commands available to control the board. |
| |
| - OnOff cluster |
| |
| The following command shows to toggle the LED on the board |
| |
| ``` |
| $ ./chip-tool onoff toggle <node_id> 1 |
| ``` |
| |
| - Level cluster |
| |
| The following command shows to move level to 128. |
| |
| ``` |
| $ ./chip-tool levelcontrol move-to-level 128 10 0 0 <node_id> 1 |
| ``` |
| |
| - Color cluster |
| |
| The following command shows to change hue and saturation to 240 and 100 |
| |
| ``` |
| $ ./chip-tool colorcontrol move-to-hue-and-saturation 240 100 0 0 0 <node_id> 1 |
| ``` |
| |
| - Identify Light |
| |
| The following command shows to identify the board 10 seconds |
| |
| ```shell |
| ./chip-tool identify identify 10 <node_id> 1 |
| ``` |
| |
| ## Test OTA software upgrade with ota-provider-app |
| |
| Please take [guide](../../ota-provider-app/linux/README.md) for more detail on |
| ota-provider-app build and usage. |
| |
| ### Create the Matter OTA image |
| |
| `Bouffalo Lab` Matter OTA image contains two parts: |
| |
| - `Bouffalo Lab` OTA bootable image: |
| - Add boot parameters, signature/encryption if specified |
| - And specify whether image has be compressed. |
| - Add Matter recognition header by |
| [ota_image_tool.py](../../../docs/guides/openthread_border_router_pi.md). |
| |
| Script `*.flash.py` builds `Bouffalo Lab` bootable image and call |
| [ota_image_tool.py](../../../docs/guides/openthread_border_router_pi.md) to add |
| Matter recognition header. Take `BL602DK` as example. |
| |
| ```shell |
| ./out/bouffalolab-bl602dk-light/chip-bl602-lighting-example.flash.py --build-ota --vendor-id <vendor id> --product-id <product id> --version <version> --version-str <version string> --digest-algorithm <digest algorithm> |
| ``` |
| |
| > lighting-app.ota should have greater software version which is defined by |
| > macro `CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION` in CHIPProjectConfig.h |
| |
| ### Start ota-provider-app |
| |
| - Start ota-provider-app for lighting-app.ota |
| |
| ```shell |
| $ rm -r /tmp/chip_* |
| $ ./chip-ota-provider-app -f <path_to_ota_bin>/lighting-app.ota |
| ``` |
| |
| where `<path_to_ota_bin>` is the folder for lighting-app.ota. |
| |
| - Provision ota-provider-app with assigned node id to 1 |
| ```shell |
| $ ./chip-tool pairing onnetwork 1 20202021 |
| $ ./chip-tool accesscontrol write acl '[{"fabricIndex": 1, "privilege": 5, "authMode": 2, "subjects": [112233], "targets": null}, {"fabricIndex": 1, "privilege": 3, "authMode": 2, "subjects": null, "targets": null}]' 1 0 |
| ``` |
| |
| ### Start ota software upgrade |
| |
| - BLE commission BL602/BL702 lighting if not commissioned. |
| - Start OTA software upgrade process |
| ```shell |
| ./chip-tool otasoftwareupdaterequestor announce-otaprovider 1 0 0 0 <node_id_to_lighting_app> 0 |
| ``` |
| where `<node_id_to_lighting_app>` is node id of BL602/BL702 lighting app. |
| - After OTA software upgrade gets done, BL602/BL702 will get reboot |
| automatically. |
| |
| ## Run RPC Console |
| |
| - Build chip-console following this |
| [guide](../../common/pigweed/rpc_console/README.md) |
| |
| - Start the console |
| |
| ``` |
| $ chip-console --device /dev/ttyUSB0 -b 2000000 |
| ``` |
| |
| - Get or Set the light state |
| |
| `rpcs.chip.rpc.Lighting.Get()` |
| |
| `rpcs.chip.rpc.Lighting.Set(on=True, level=128)` |