| # `Bouffalo Lab` |
| |
| 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**. |
| |
| The steps were verified on `Bouffalo Lab` BL602 and BL706 development board. |
| |
| - `BL602-IoT-Matter-V1`, [here](https://www.amazon.com/dp/B0B9ZVGXD8) to |
| purchase. |
| - `BL602-NIGHT-LIGHT` |
| - `XT-ZB6-DevKit` |
| - `BL706-NIGHT-LIGHT` |
| - `BL706DK` |
| - `BL704LDK` |
| |
| > 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. |
| |
| ### BL602-IoT-Matter-V1 |
| |
| <img src="../../platform/bouffalolab/doc/chart/BL602-IoT-Matter_V1.png" style="zoom:25%;" /> |
| |
| ## 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 with `DUA manager`. |
| |
| ### `XT-ZB6-DevKit` |
| |
| <img src="../../platform/bouffalolab/doc/chart/bl706_dev_board.jpg" style="zoom:23%;" /> |
| |
| ## Initial setup |
| |
| The following steps in this document were validated on Ubuntu 18.04/20.04 and |
| Mac OS. |
| |
| - 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 |
| ``` |
| |
| > After environment setup `Bouffalo Lab` flash tool, `bflb-iot-tool`, |
| > imports under this environment. If not, please try |
| > `scripts/bootstrap.sh -p bouffalolab` for matter environment update. |
| |
| - Setup build environment for `Bouffalo Lab` SoC |
| |
| Run `setup.sh` to install `Bouffalo Lab` SDK to /opt/bouffalolab_sdk |
| |
| ``` |
| cd third_party/bouffalolab/repo |
| sudo bash scripts/setup.sh |
| ``` |
| |
| Please execute following command to export `BOUFFALOLAB_SDK_ROOT` before |
| building. |
| |
| ``` |
| export BOUFFALOLAB_SDK_ROOT=/opt/bouffalolab_sdk |
| ``` |
| |
| ## Build CHIP Lighting App example |
| |
| The following steps take examples for `BL602-IoT-Matter-V1` BL602 board, |
| `BL706DK` BL706 board, and `BL704LDK` BL704L board . |
| |
| - Build lighting app with UART baudrate 2000000 |
| |
| ``` |
| ./scripts/build/build_examples.py --target bouffalolab-bl602-iot-matter-v1-light build |
| ./scripts/build/build_examples.py --target bouffalolab-bl706dk-light build |
| ./scripts/build/build_examples.py --target bouffalolab-bl706dk-light-ethernet build |
| ./scripts/build/build_examples.py --target bouffalolab-bl706dk-light-wifi build |
| ./scripts/build/build_examples.py --target bouffalolab-bl704ldk-light build |
| ``` |
| |
| - Build lighting app with UART baudrate 115200 |
| |
| ``` |
| ./scripts/build/build_examples.py --target bouffalolab-bl602-iot-matter-v1-light-115200 build |
| ./scripts/build/build_examples.py --target bouffalolab-bl706dk-light-light-115200 build |
| ./scripts/build/build_examples.py --target bouffalolab-bl704ldk-light-light-115200 build |
| ``` |
| |
| - Build lighting app with RPC enabled and UART baudrate 115200. |
| |
| ``` |
| ./scripts/build/build_examples.py --target bouffalolab-bl602-iot-matter-v1-light-rpc build |
| ./scripts/build/build_examples.py --target bouffalolab-bl706dk-light-light-rpc build |
| ./scripts/build/build_examples.py --target bouffalolab-bl704ldk-light-light-rpc build |
| ``` |
| |
| ### Build options with build_examples.py |
| |
| - `-shell`, enable UART command line |
| - `-115200`, set UART baudrate to 115200 for log and command line |
| - `-rpc`, enable Pigweed RPC feature |
| - `-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 |
| - `-mfd`, enable Matter factory data feature, which load factory data from |
| `DTS` region and `MFD` partition |
| - Please contact to `Bouffalo Lab` for Matter factory data support. |
| - `-mfdtest`, enable Matter factory data module, but only load factory data |
| from `FactoryDataProvider.cpp` file. |
| - `-wifi`, to specify that connectivity Wi-Fi is enabled for Matter |
| application. |
| - `-ethernet`, to specify that connectivity Ethernet is enabled for Matter |
| application. |
| - `-thread`, to specify that connectivity Thread is enabled for Matter |
| application. |
| - `-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 |
| |
| > Note 1, `*.flash.py` should be ran under Matter build environment; if |
| > python module `bflb_iot_tool` is not found, please try to do |
| > `source scripts/bootstrap.sh` or install as |
| > `pip3 install bflb-iot-tool`.<br> Note 2, different build options will |
| > generate different output folder. |
| |
| 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. |
| |
| - `bl602-iot-matter-v1`, `bl706dk` and `bl704ldk` without additional |
| build options |
| |
| ```shell |
| ./out/bouffalolab-bl602-iot-matter-v1-light/chip-bl602-lighting-example.flash.py --port /dev/ttyACM0 |
| ./out/bouffalolab-bl706dk-light/chip-bl702-lighting-example.flash.py --port /dev/ttyACM0 |
| ./out/bouffalolab-bl704ldk-light/chip-bl702l-lighting-example.flash.py --port /dev/ttyACM0 |
| ``` |
| |
| - `bl706dk` with 115200 baudrate setting |
| |
| ```shell |
| ./out/bouffalolab-bl706dk-light-115200/chip-bl702-lighting-example.flash.py --port /dev/ttyACM0 |
| ``` |
| |
| - To wipe out flash and download image, please append `--erase` to the |
| above command. |
| |
| ```shell |
| ./out/bouffalolab-bl602-iot-matter-v1-light/chip-bl602-lighting-example.flash.py --port /dev/ttyACM0 --erase |
| ./out/bouffalolab-bl706dk-light-115200/chip-bl702-lighting-example.flash.py --port /dev/ttyACM0 --erase |
| ./out/bouffalolab-bl704ldk-light/chip-bl702l-lighting-example.flash.py --port /dev/ttyACM0 --erase |
| ``` |
| |
| > Note, better to append --erase option to download image for BL602 |
| > develop board at first time. |
| |
| - Using `Bouffalo Lab` GUI flash tool `BLDevCube`, please download on |
| [this page](https://dev.bouffalolab.com/download). |
| - Hold BOOT pin and reset chip, put the board in download mode. |
| - Select `DTS` file; |
| - Select Partition Table under |
| `examples/platform/bouffalolab/bl602/flash_config` or |
| `examples/platform/bouffalolab/bl702/flash_config` |
| - Select Firmware Bin; |
| - Select Chip Erase if need; |
| - Choose Target COM port. |
| - Then click Create & Download. |
| |
| ## 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 |
| |
| - BL602 |
| |
| ```shell |
| ./chip-tool pairing ble-wifi <node_id> <wifi_ssid> <wifi_passwd> 20202021 3840 |
| ``` |
| |
| - BL706 |
| |
| ```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 with Bouffalolab OTA `bin.xz.hash` format image |
| |
| - `Bouffalo Lab` OTA `bin.xz.hash` format image |
| |
| - Build `Bouffalo Lab` OTA image as following execution using python |
| script `*.flash.py` under firmware build out folder, |
| `shell ./<output_firmware_name>.flash.py --build` After script executed, |
| a folder `ota_images` and an image `FW_OTA.bin.xz.hash` will be |
| generated. `FW_OTA.bin.xz.hash` is compressed with hash verification for |
| build out firmware. |
| |
| - `bin.xz.hash` image |
| |
| After compile done, the build script will call |
| `<output_firmware_name>.flash.py` to generate `Bouffalo Lab` OTA format |
| image as above, and put it under out folder with name likes |
| `<output_firmware_name>.bin.xz.hash` |
| |
| * Build Matter `*.ota` OTA image with `Bouffalo Lab` OTA image under |
| **connectedhomeip** repo folder |
| |
| ```shell |
| $ ./src/app/ota_image_tool.py create -v 0xFFF1 -p 0x8005 -vn 10 -vs "1.0" -da sha256 <FW_OTA.bin.xz.hash> lighting-app.ota |
| |
| ``` |
| |
| > 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)` |