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 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/BL604 is combo chip-set for Wi-Fi 802.11b/g/n and BLE 5.0 base-band/MAC.
BL70x is combo chip-set for BLE and IEEE 802.15.4/ZigBee/Thread.
BL70x has fully certified with all Thread 1.3 features, included Thread SSED
and Thread Border Router with DUA manager
.
XT-ZB6-DevKit
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.
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 tryscripts/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
The following steps take examples for BL602-IoT-Matter-V1
bl602 board, BL706 develop XT-ZB6-DevKit
and 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-xt-zb6-devkit-light build ./scripts/build/build_examples.py --target bouffalolab-bl704ldk-light build ./scripts/build/build_examples.py --target bouffalolab-bl706dk-light-ethernet build ./scripts/build/build_examples.py --target bouffalolab-bl706dk-light-wifi 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
-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
partitionBouffalo 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.-fp
, to specify to enable frame pointer feature to print call stack when hit an exception for debug purpose.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 BL602chip-bl702-lighting-example.flash.py
for BL702chip-bl702l-lighting-example.flash.py
for BL702LNote 1,
*.flash.py
should be ran under Matter build environment; if python modulebflb_iot_tool
is not found, please try to dosource scripts/bootstrap.sh
or install aspip3 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:
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
, xt-zb6-devkit
and bl704ldk
without additional build options
./out/bouffalolab-bl602-iot-matter-v1-light/chip-bl602-lighting-example.flash.py --port /dev/ttyACM0 ./out/bouffalolab-xt-zb6-devkit-light/chip-bl702-lighting-example.flash.py --port /dev/ttyACM0 ./out/bouffalolab-bl704ldk-light/chip-bl702l-lighting-example.flash.py --port /dev/ttyACM0
xt-zb6-devkit
with 115200 baudrate setting
./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.
./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 ./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.
DTS
file;examples/platform/bouffalolab/bl602/flash_config
or examples/platform/bouffalolab/bl702/flash_config
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.
Please follow chip_tool_guide and guide to build and use chip-tool for test.
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 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.
sudo ot-ctl dataset active -x
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
./chip-tool pairing ble-wifi <node_id> <wifi_ssid> <wifi_passwd> 20202021 3840
BL706
./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
<wifi_ssid>
, Wi-Fi network SSID
<wifi_passwd>
, Wi-FI network password
<thread_operational_dataset>
, Thread network credential which runningsudo ot-ctl dataset active -x
command on border router to get.
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
./chip-tool identify identify 10 <node_id> 1
Please take guide for more detail on ota-provider-app build and usage.
bin.xz.hash
format imageBouffalo 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
$ ./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 for lighting-app.ota
$ 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
$ ./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
./chip-tool otasoftwareupdaterequestor announce-otaprovider 1 0 0 0 <node_id_to_lighting_app> 0where
<node_id_to_lighting_app>
is node id of BL602/BL702 lighting app.Build chip-console following this guide
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)