blob: f02b1b84758f867dbb3dc696638e7ecf45e10fd2 [file] [log] [blame] [view]
# CHIP BL70X Lighting App Example
BL70X is highly integrated BLE and IEEE 802.15.4 combo chip for IoT
applications, and BL702 is a general name for BL70X family.
This example is powered by BL706 and functions as a Thread light bulb device
type, with on/off, level and color capabilities. The steps were verified with
following boards:
- BL706-IoT-DVK
- BL706-NIGHT-LIGHT
## Build
### Prerequisite
- Clone connectedhomeip github repo and update all submodule;
- Install all tools (likely already present for CHIP developers).
- Setup connectedhomeip environment:
- First time, or environment is out of date. Please execute the following
script under root folder of connectedhomeip repo to install and setup
environment, which will take some minutes; meanwhile, Bouffalolab flash
tool, `bflb-iot-tool`, will be installed.
```shell
source scripts/bootstrap.sh
```
> Note, `scripts/bootstrap.sh` only installs `bflb-iot-tool` under
> connectedhomeip build context.
- Others, please execute the following script before any build commands
executed; and `bflb-iot-tool` will import under this environment.
```shell
source scripts/activate.sh
```
## Build CHIP BL702 Lighting App example
- Build with script `gn_bouffalolab_example.sh` under root folder of
connectedhomeip repo
- Command format:
```shell
./scripts/examples/gn_bouffalolab_example.sh <Example folder> <Output folder> <Bouffalolab_board_name> [<Build options>]
```
- Build lighting-app for board BL706-IoT-DVK.
```shell
./scripts/examples/gn_bouffalolab_example.sh lighting-app out/debug BL706-IoT-DVK
```
- Build lighting-app for board BL706-NIGHT-LIGHT
```shell
./scripts/examples/gn_bouffalolab_example.sh lighting-app out/debug BL706-NIGHT-LIGHT
```
- With UART shell command enabled:
```shell
./scripts/examples/gn_bouffalolab_example.sh lighting-app out/debug BL706-IoT-DVK chip_build_libshell=true
```
- With pigweed RPC enabled:
```shell
./scripts/examples/gn_bouffalolab_example.sh lighting-app out/debug BL706-IoT-DVK 'import("//with_pw_rpc.gni")'
```
> Note, UART shell command and pigweed RPC can not build together.
- Build with `build_examples.py`
- Build for BL706-IoT-DVK and BL706-NIGHT-LIGHT as following commands.
```shell
./scripts/build/build_examples.py --target bouffalolab-BL706-IoT-DVK-BL706C-22-light build
./scripts/build/build_examples.py --target bouffalolab-BL706-NIGHT-LIGHT-light build
```
- Build with pigweed RPC enabled as following commands.
```shell
./scripts/build/build_examples.py --target bouffalolab-BL706-IoT-DVK-BL706C-22-light-rpc build
```
- Build options
- Build options list There are some build options for function and debug
purpose as below.
- `chip_build_libshell`, whether to enable shell command line. It is
set to false by default.
- `baudrate`, UART baudrate for log output or shell command line.
- `enable_psram`, whether to enable `PSRAM`. It is set to true by
default.
- How to use Before using these build options, please check whether they
are available to configure in BUILD.gn file under example application
folder.
- build with `build_examples.py` Modify value of build options in
BUILD.gn file under example application folder.
- build with gn_bouffalolab_example.sh Input build options, such as
```
./scripts/examples/gn_bouffalolab_example.sh lighting-app out/debug BL706-IoT-DVK chip_build_libshell=true
```
- Download image
- Using script `chip-bl702-lighting-example.flash.py`.
After building gets done, a python
`chip-bl702-lighting-example.flash.py` will generated under build output
folder. Such as chip-bl702-lighting-example.flash.py for lighting-app
example. Please check `help` option of script for more detail.
- Hold BOOT pin and reset chip, let it be in download mode.
- Download image as following execution under build output folder:
```shell
./chip-bl702-lighting-example.flash.py --port /dev/tty.usbserial-3
```
> Note, where `/dev/tty.usbserial-3` is UART port of device.
- Build Bouffalolab OTA image as following execution under build
output folder:
```shell
./chip-bl702-lighting-example.flash.py --build
```
After script executed, a folder `ota_images` and image
`FW_OTA.bin.xz.hash` will generated. `FW_OTA.bin.xz.hash` is
compressed with hash verification with
`chip-bl702-lighting-example.bin`.
> Note, `chip-bl702-lighting-example.flash.py` uses Python module
> `bflb-iot-tool` to flash device. Please make sure current terminal is
> under matter build environment, otherwise, Python module
> `bflb-iot-tool` should be installed with default Python.
- Using `Bouffalo Lab` flash tool`BLDevCube`
- Hold BOOT pin and reset chip, let it be in download mode.
- Select `DTS` file
`<connectedhomeip_repo_path>/examples/platform/bouffalolab/bl702/flash_config/bl_factory_params_IoTKitA_32M.dts`;
- Select Partition Table
`<connectedhomeip_repo_path>/examples/platform/bouffalolab/bl702/flash_config/partition_cfg_2M.toml`;
- Select Firmware Bin chip-bl702-lighting-example.bin;
- Select Chip Erase if need;
- Choose Target COM port.
- Then click Create & Download.
> Where `connectedhomeip_repo_path` is the root path of repo
> connectedhomeip.
- Firmware Behavior
- IOT Dev board Status LED: TX0<br> Lighting LED: RX1<br> Factory Reset:
Short `IO11` to `GND` over 3 seconds<br>
- Night Light Unprovisioned state: light shows yellow. Provisioned state:
light show white. Factory Reset: Power cycle 3 times before light is on;
at 3rd time, light shows green and does factory reset after 3 seconds
later. And factory reset can be cancelled during 3 seconds wait time.
- UART baudrate for log and shell command
- By default, UART baudrate is 2000000
- To change UART baudrate, please run script `gn_bouffalolab_example.sh`
with `baudrate=[uart baudrate]` followed, such as
`./scripts/examples/gn_bouffalolab_example.sh lighting-app out/debug BL706-NIGHT-LIGHT module_type="BL702" baudrate=115200`
## Test with chip-tool
### Setup Raspberry PI OTBR as [guide](../../../../docs/guides/openthread_border_router_pi.md)
### Build and use chip-tool as [chip_tool_guide](../../../../docs/guides/chip_tool_guide.md) and [guide](../../../chip-tool/README.md)
### Commissioning
- Power on BL702 with chip lighting app
- BLE commissioning with chip-tool
```shell
./chip-tool pairing ble-thread <node_id> hex:<thread_operational_dataset> 20202021 3840
```
`node_id` is matter node id, such as 10; `<thread_operational_dataset>` is
Border Router Dataset, which to get with command
`sudo ot-ctl dataset active -x` on Rasp PI border router.
### Toggle Light
- After BLE commissioning gets successfully,
```
$ ./chip-tool onoff toggle <node_id> 1
```
### Identify Light
- After BLE commissioning gets successfully,
```shell
./chip-tool identify identify <identify_duration> <node_id> 1
```
which `<identify_duration>` is how many seconds to execute identify command.
## OTA software upgrade with ota-provider-app
### Build ota-provider-app as [guide](../../../ota-provider-app/linux/README.md)
### Create the Matter OTA with Bouffalolab OTA bin `FW_OTA.bin.xz.hash`
- Under connectedhomeip repo path
```shell
$ ./src/app/ota_image_tool.py create -v 0xFFF1 -p 0x8005 -vn 1 -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 BL702 lighting if not commissioned.
- Start OTA software upgrade process
```shell
./chip-tool otasoftwareupdaterequestor announce-ota-provider 1 0 0 0 <node_id_to_lighting_app> 0
```
where `<node_id_to_lighting_app>` is node id of BL702 lighting app.
- After OTA software upgrade gets done, BL702 will get reboot automatically.