Matterは、Connectivity Standards Alliance(CSA)が策定したスマートホームの為の標準規格です。 本ブログでは、Armadillo-IoT G4 で、仮想的に構築した Matter デバイスを制御します。
本ブログの構成は以下のとおりです。
デモ構成
本ブログ記載のデモ構成は下図の通りです。
Matter で利用する通信方式としては Ethernet、Wi-Fi、Threadが対応していますが、今回はWi-Fi を利用しました。 最初の Matter デバイス検出、接続のステップでは BLE が利用され、その後の Matter デバイス制御のステップで Wi-Fi を利用します。
必要なもの
本ブログでは以下のものを使用します。
機器 | 説明 |
---|---|
Armadillo-IoT G4(LTE+WLANモデル / WLANモデル) 一式 | Matter 対応デバイスを制御するデバイス。Armadillo-IoT G4 本体、AC アダプタ、USB ケーブル、無線 LAN/BT 用外付けアンテナが必要です。 |
ESP32-DevKitC-32E | 仮想的な Matter 対応照明デバイス として動作させるデバイス。ESP32-DevKitC-32E本体、USB ケーブルが必要です。 |
PC | ESP32 上で動作させるアプリケーションをビルドに使用します。 |
LED 等 | ESP32 から制御する照明として使用するLED。ブレッドボード、ジャンパケーブル、LED、抵抗が必要です。 |
無線 LAN ネットワーク環境 | Armadillo-IoT G4 と ESP32 がネットワーク通信できるようにして下さい。 |
ソフトウェア | バージョン情報等 |
---|---|
G4 Linux カーネル | v5.10.161-r0 |
debian コンテナ | 11.6 |
connectedhomeip | commit e64736c9c |
ZAP | v2023.02.25-nightly |
ESP32 のビルドには Linux環境を使用しております。お使いのPCがWindowsの場合はATDE等を使用して下さい。 ATDEのセットアップ方法については、Armadillo-IoT ゲートウェイ G4 製品マニュアル「4.2.1. ATDEのセットアップ」をご確認下さい。
接続方法
ESP32-DevKitC と LED の接続方法は下図の通りです。 ここでは、GPIO5 に LED を接続しています。
ESP32 側の手順
ここでは、ESP32 を仮想的に "Matter 対応照明デバイス" として動作させるアプリケーションのビルドを行います。
- 必要パッケージを追加する
[PC ~]$ sudo apt update && sudo apt upgrade
[PC ~]$ sudo apt install git wget flex bison gperf python3 python3-pip python3-setuptools cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0 generate-ninja
- ESP-IDF のリポジトリをクローンする
[PC ~]$ git clone https://github.com/espressif/esp-idf.git
- ESP-IDF をセットアップする
[PC ~]$ ./install.sh
[PC ~]$ source export.sh
- Matter のリポジトリをクローンする
[PC ~]$ git clone https://github.com/project-chip/connectedhomeip.git
[PC ~]$ cd connectedhomeip/
- Matter 環境をアクティブにする
[PC ~/connectedhomeip]$ source scripts/bootstrap.sh
[PC ~/connectedhomeip]$ source scripts/activate.sh
- デバイス構成の設定を行う
[PC ~/connectedhomeip]$ cd examples/lighting-app/esp32/
[PC ~/connectedhomeip/examples/lighting-app/esp32]$ idf.py set-target esp32
[PC ~/connectedhomeip/examples/lighting-app/esp32]$ idf.py menuconfig
menuconfigでは以下の設定を適用して下さい。
設定 | 説明 |
---|---|
Demo ---> LED GPIO number | 「接続方法」で LED を接続した GPIO 番号を設定します。 |
Demo ---> Eendezvous Mode | Wi-Fi を選択します。 |
Component config ---> CHIP Device Layer ---> WiFi Station Options ---> Default WiFi SSID | 接続する WiFi ネットワークの SSID を設定します。 |
Component config ---> CHIP Device Layer ---> WiFi Station Options ---> Default WiFi Password | 接続する WiFi ネットワークのパスワードを設定します。 |
- サンプルアプリケーションをビルドする
[PC ~/connectedhomeip/examples/lighting-app/esp32]$ idf.py build
- サンプルアプリケーションを ESP32 に書き込む
[PC ~/connectedhomeip/examples/lighting-app/esp32]$ idf.py -p /dev/ttyUSB0 erase-flash
[PC ~/connectedhomeip/examples/lighting-app/esp32]$ idf.py -p /dev/ttyUSB0 flash monitor
Armadillo-IoT G4 側の手順
1. 環境構築
ここでは、Matter デバイスとの接続、制御を行うツール CHIP Tool のビルドを行います。
- 無線 LAN アクセスポイントに接続する
[armadillo ~]# nmcli device wifi connect [SSID] password [PASSWORD]
- コンテナを作成する
[armadillo ~]# vi /etc/atmark/containers/matter-ctrl.conf
set_image docker.io/debian:11.6
add_volumes /run:/run/dbus
set_network host
add_args --cap-add=NET_ADMIN
set_command sleep infinity
[armadillo ~]# abos-ctrl podman-storage --disk
[armadillo ~]# podman pull docker.io/debian:11.6
[armadillo ~]# podman_start matter-ctrl
[armadillo ~]# podman exec -ti matter-ctrl bash
- 必要パッケージを追加する
[container ~]# curl -sL https://deb.nodesource.com/setup_16.x | sudo bash -
[container ~]# apt update && apt upgrade
[container ~]# apt install bluez dbus git gcc g++ pkg-config libssl-dev libdbus-1-dev libglib2.0-dev libavahi-client-dev ninja-build python3-venv python3-dev python3-pip unzip libgirepository1.0-dev libcairo2-dev libreadline-dev wget nodejs
[container ~]# pip3 install click coloredlogs
- bluetoothd を起動する
[container ~]# dbus-daemon --system
[container ~]# bluetoothd &
- ZAPをインストールする
[container ~]# wget https://github.com/project-chip/zap/archive/refs/tags/v2023.02.25-nightly.tar.gz
[container ~]# tar xf v2023.02.25-nightly.tar.gz
[container ~]# cd zap-2023.02.25-nightly/
[container ~/zap-2023.02.25-nightly]# npm install
[container ~/zap-2023.02.25-nightly]# npm audit fix
[container ~/zap-2023.02.25-nightly]# export ZAP_DEVELOPMENT_PATH="~/zap-2023.02.25-nightly/"
- Matter のリポジトリをクローンする
[container ~/zap-2023.02.25-nightly]# cd ../
[container ~]# git clone https://github.com/project-chip/connectedhomeip.git
[container ~]# cd connectedhomeip/
[container ~/connectedhomeip]# git submodule update --init examples/common/QRCode/repo third_party/editline/repo third_party/jsoncpp/repo third_party/libwebsockets/repo third_party/nlassert/repo third_party/nlio/repo third_party/nlunit-test/repo third_party/pigweed/repo
- Matter 環境をアクティブにする
[container ~/connectedhomeip]# source scripts/bootstrap.sh
[container ~/connectedhomeip]# source scripts/activate.sh
- CHIP Tool のビルドを行う
[container ~/connectedhomeip]# ./scripts/build/build_examples.py --target linux-arm64-chip-tool-clang build
- コンテナの変更を保存する
[container ~/connectedhomeip]# exit
[armadillo ~]# podman commit matter-ctrl matter-ctrl:latest
[armadillo ~]# vi /etc/atmark/containers/matter-ctrl.conf
set_image matter-ctrl:latest ★ ここを変更
add_volumes /run:/run/dbus
set_network host
add_args --cap-add=NET_ADMIN
set_command sleep infinity
[armadillo ~]# podman_start matter-ctrl
[armadillo ~]# podman exec -ti matter-ctrl bash
2. Matter デバイスと接続する
[container ~/connectedhomeip]# cd out/linux-arm64-chip-tool-clang/
[container ~/connectedhomeip/out/linux-arm64-chip-tool-clang]# ./chip-tool pairing ble-wifi <node_id> <ssid> <password> <pin_code> <discriminator>
各引数には以下の値を入れます。
引数名 | 値 |
---|---|
node_id | 任意の番号(例:1234) |
ssid | ESP32 の設定時と同様の SSID |
password | ESP32 の設定時と同様のパスワード |
pin_code | デフォルト値 :20202021 |
discriminator | デフォルト値:3840 |
以下のメッセージが表示されれば接続成功です。
CHIP:TOO: Device commissioning completed with success
3. Matter デバイスを制御する
以下のコマンドを使用すると、照明の ON/OFF が切り替えられます。
[container ~/connectedhomeip/out/linux-arm64-chip-tool-clang]$ ./chip-tool onoff toggle <node_id> 1
照明の ON/OFF の切り替えに成功すると lighting-app 側に以下のようなログが出力されます。
I (236002) chip[ZCL]: Toggle ep1 on/off from state 0 to 1
また、切り替えた状態に応じて ESP32 に接続した LED の ON/OFF も切り替わります。
以下のコマンドを使用すると、照明の明るさを変更することが出来ます。
[container ~/connectedhomeip/out/linux-arm64-chip-tool-clang]$ ./chip-tool levelcontrol move-to-level <level> <transition_time> <option_mask> <option_override> <node_id> 1
各引数の説明は以下の通りです。
引数名 | 説明 |
---|---|
level | 照明の明るさ。0〜254で指定できます |
transition_time | 遷移時間 |
option_mask | オプションマスク、0を指定 |
option_override | オプションオーバーライド、0を指定 |
node_id | 「2. Matter デバイスと接続する」で設定した値 |
照明の明るさの変更に成功すると lighting-app 側に以下のようなログが出力されます。
I (377792) chip[ZCL]: RX level-control: MOVE_TO_LEVEL 80 0 0 0
︙
I (377862) chip[ZCL]: Event: move from 1
I (377862) chip[ZCL]: to 128
I (377862) chip[ZCL]: (diff +1)
また、設定した値に応じて ESP32 に接続した LED の明るさも変わります。