# `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` > Warning: Changing the 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 ## BL706 BL702/BL706 is combo chip-set for BLE and IEEE 802.15.4/ZigBee/Thread. In some cases, e.g. in SDK, we use BL702 as a general name for BL702/BL706 family. ### `XT-ZB6-DevKit` ## 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 ``` > After environment setup Bouffalolab flash tool, `bflb-iot-tool`, imports > under this environment. If not, please try `scripts/bootstrap.sh` 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 develop board `BL602-IoT-Matter-V1` and BL706 develop board `XT-ZB6-DevKit`. - 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-xt-zb6-devkit-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-xt-zb6-devkit-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-xt-zb6-devkit-light-rpc build ``` ## Download image - Using script `*.flash.py`. After building gets done, python script `chip-bl602-lighting-example.flash.py` or `chip-bl702-lighting-example.flash.py` will generate under build output folder for BL602 or BL702 building. > 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`.
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` without additional build options ```shell ./out/bouffalolab-bl602-iot-matter-v1-light/chip-bl602-lighting-example.flash.py --port /dev/ttyACM0 ``` - `xt-zb6-devkit` with 115200 baudrate setting ```shell ./out/bouffalolab-xt-zb6-devkit-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-xt-zb6-devkit-light-115200/chip-bl702-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](../../../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](../../../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 20202021 3840 ``` - BL706 ```shell ./chip-tool pairing ble-thread hex: 20202021 3840 ``` > ``, which is node ID assigned to device within chip-tool > fabric
``, Wi-Fi network SSID
``, Wi-FI > network password
``, 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 1 ``` - Level cluster The following command shows to move level to 128. ``` $ ./chip-tool levelcontrol move-to-level 128 10 0 0 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 1 ``` - Identify Light The following command shows to identify the board 10 seconds ```shell ./chip-tool identify identify 10 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 with Bouffalolab OTA bin `FW_OTA.bin.xz.hash` - Build `Bouffalo Lab` OTA image as following execution using python script `*.flash.py` under firmware build out folder, ```shell ./.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. * 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 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 /lighting-app.ota ``` where `` 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-ota-provider 1 0 0 0 0 ``` where `` 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)`