BT/TH オプションモジュールを装着した Armadillo-640 を、Thread 対応 Matter コントローラーとして使用する手順を説明します。
- 2023-11-20: 「Matter 用 Thread ファームウェアを BT/TH オプションモジュールに書き込む」で使用する、Matter 用 Thread ファームウェア書込み用のコンテナイメージの内容に間違いがありましたので、更新しました。
はじめに
この Howto では、Thread 対応の BT/TH オプションモジュールを Armadillo-640 に装着して、Matter over Thread 対応家電を操作できるようにするまでの手順を説明します。 2023年9月12日に、Apple 社が iPhone15 の上位機種で Thread 対応を発表しました。 また、北米でのみ販売されていた Nanoleaf 社の Matter over Thread 対応のスマート電球が、その少し前に日本国内でも販売開始されました。 Matter over Thread 対応家電製品が、これから増えていきそうです。
この Howto は、Linux の CUI シェル操作に慣れた方を対象読者として想定しており、マニュアルの ログイン までの手順は、迷わずにできるものと前提しています。
目次
- Matter over Thread でできること
- Armadillo-640 のセットアップに必要なもの
- セットアップ手順
- Matter over Thread デバイスをコミッショニングする
- Matter over Thread デバイスを Armadillo で操作する
- Matter over Thread デバイスのペアリングを解除する
- Matter ロゴと認定製品について
- 付録
Matter over Thread でできること
Matter は、Connectivity Standards Alliance(CSA)が策定したスマートホームのための標準規格です。 その規格に適合することで、USB のように、異なるメーカーの製品同士を相互に接続でき、メーカーを問わない相互運用性が保証されます。 Matter は、従来からあるスマホアプリ型のスマートホーム用のサービスと違い、クラウドサービスに依存せず、宅内のネットワークだけで接続を完結できること、および、デバイス間の通信のセキュリティが確保されていることから、スマートホームのための規格として期待されています。
Matter の接続に用いる無線通信では、Thread の他に WiFi がサポートされています。WiFi 接続の Matter 対応デバイスが先に製品化され、2023年9月時点では、WiFi 接続の製品の方が多く販売されているようです。当社のブログでも、Matter over WiFi デバイスを Armadillo から操作する内容を、2023年2月に公開しています:
Matter over Thread
Thread は、2015年に 1.0 版の規格が発表された低消費電力型のメッシュネットワーク技術で、IoT 製品を意識して設計された無線通信プロトコルです。 Matter が使用しているのは、Thread の 1.3 版です。 Thread 通信するデバイスは、デバイス同士がメッシュネットワークを自己形成しますので、電波が互いに直接届かない場所のデバイス同士も通信できるという利点があります。
Matter over Thread に対応した Matter コントローラー製品を、Apple、Google、Amazon 各社が既に販売しています。 Apple の HomeKit、Google の Google Home、Amazon の Alexa Smart Home など、各社のスマートホームシステムが、それぞれ Matter 対応しています。 Matter 対応製品は、どれか一つだけのスマートホームシステムに縛り付けられることなく、複数のスマートホームシステムで同時に利用できるのが特徴です。 Armadillo-640 で Matter コントローラー機能を動作させる場合も、それらのスマートホームシステムと同時に利用できる、というわけです。
この Howto のシステム構成
システム構成を示す図です:
図に示したシステム構成要素を、以下に説明します。
-
Thread ボーダールーター (otbr)
Thread ネットワークを作成して Thread 対応デバイスと接続し、接続した Thread デバイスと、有線 LAN や無線 LAN 上との間での IPv6 通信を仲介します。 Thread のオープンソース実装である OpenThread の一部としてリリースされている、OpenThread Border Router を Armadillo-640 上のコンテナで動作させます。
OpenThread Border Router は、Thread プロトコルの MAC 層より上位の実装を内包しており、MAC 層の実装を持つ Thread 通信モジュールを使用して Thread 通信を行います。 ここで、現在 BT/TH オプションモジュール用に提供している Thread ファームウェアは、Thread プロトコルの実装を全て内包した NCP (Network Co-Processor)型であり、OpenThread Border Router と互換性がありません。 実装している Thread プロトコルのバージョンも、Matter が必要とする 1.3 よりも古い版です。 そのため、この Howto で提供する、RCP (Radio Co-Processor)型の Thread ファームウェアを、 BT/TH オプションモジュールに書き込んで使います。
-
Matter コントローラー (chip-tool)
Matter デバイスを、スマートホームシステムのネットワーク(Matter の用語では Fabric)に登録・参加させる役割と、Matter デバイスを操作する役割を担います。 Matter SDK に収録されている CHIP Tool (chip-tool) を、これも Armadillo-640 上のコンテナで動作させます。
Matter コントローラーが、Matter デバイスを Fabric に登録・参加させる動作(これを Commissioning(コミッショニング) と呼びます)では、BLE (Bluetooth Low Energy) 通信を使います。 このことは、Matter の無線通信に WiFi を使うデバイスでも Thread を使うデバイスでも同じです。 Comissioning 動作のために BLE 通信モジュールが必要ですので、BT/TH オプションモジュールの WLAN コンボ対応を装着する場合は、WLAN コンボチップの BT 機能を使用します。 WLAN コンボ無しの BT/TH オプションモジュールを使用する場合は、別途、BLE 対応の Bluetooth ドングルが必要です。
-
Matter over Thread 対応デバイス (Matter Device)
この Howto を作成する際に、Matter over Thread 対応デバイスとして動作確認に使用したのは、Nanoleaf 社のスマート電球です。 Howto 作成時点で入手可能だった Matter over Thread 対応家電が、他に見当たらなかったのが選定理由ですが、今後登場するであろう他社のスマート電球やスマート照明であっても、Matter デバイスとして同じ振る舞いをするはずです。 したがって、Matter コントローラーの操作手順は、製品を違えても変わりません。
この Howto の前提事項/制限
- コミッショニングする Matter over Thread デバイスは、他のスマートホームネットワークに登録されていない状態でなければいけません。
- Thread ボーダールーターが作成した Thread ネットワークに Matter over Thread デバイスを参加させる動作は、デバイス販売元が提供しているスマホアプリの Matter コントローラーなど、chip-tool 以外の Matter コントローラーで行うことは、できません。
この後の説明の流れ
以上が、Howto の手順を始めるにあたっての説明です。 この後は、セットアップに必要なハードウェアとソフトウェアが何かを示し、Thread ボーダールーターと Matter コントローラーの構築手順を述べます。 そして、Matter over Thread を BLE 経由でコミッショニングして操作する手順を述べます。
Armadillo-640 のセットアップに必要なもの
ハードウェア
ソフトウェア
セットアップ手順
Armadillo-640 と BT/TH オプションモジュール
Armadillo Base OS をインストールする
Armadillo-640 に Armadillo Base OS をインストールするには、インストールディスクイメージをダウンロードして、インストールディスクを作成します。 ただし、以下で述べるように、シリアルコンソールのシリアルポートを UART3 に切り替える必要があるため、「Armadillo Base OS インストールディスクイメージ(UART3コンソール)」をダウンロードしてお使いください。 インストールディスクの作成手順は、マニュアルの初期化インストールディスクの作成をご覧ください。 作成したインストールディスクを使って、Armadillo-640 の eMMC を初期化する手順は、マニュアルのインストールディスクを使用するに記載しています。
Armadillo-640 の eMMC を初期化せず、内容を残したい場合は、microSD カードで Armadillo Base OS のブートディスクを作成して、SD ブートしてください。 ブートディスクの作成手順と SD ブートの手順は、マニュアルのブートディスクの作成とSDブートの実行に記載しています。
シリアルポートを切り替える
BT/TH オプションモジュールを取り付ける前に、コンソールを CON9 (ttymxc0; UART1) から CON3 (ttymxc2; UART3) に移動します。 この手順は、マニュアルのBT を使用する準備をご覧ください。 コンソールを CON3 に移動したら、作業用 PC との接続を、USBシリアル変換アダプタからシリアルクロスケーブルと USB-RS232C 変換ケーブルに切り替えて下さい。
BT/TH オプションモジュールを取り付ける
マニュアルのオプションボードの組み立てを参考にして、BT/TH オプションモジュールを Armadillo-640 の CON9 に取り付けてください。
Matter 用 Thread ファームウェアを BT/TH オプションモジュールに書き込む
Matter 用 Thread ファームウェアを書き込む手順は、マニュアルの使用方法に記載しているものと同様です。 使用するコンテナイメージが違いますので、マニュアルに記載しているコマンドの並びのうち、curl でダウンロードする URL を https://download.atmark-techno.com/sample/a640-matter-howto/firmware-at-thread-rcp-writer.tar に変えてください。さらに、コンテナの名前を localhost/firmware-at-thread-rcp-writer に変えてください。 それ以外は同じです。
OpenThread Border Router (otbr) コンテナを作成する
otbr のコンテナイメージをロードする
otbr のコンテナイメージは、Docker Hub で公開されている nrfconnect/otbr を使用します。 Armadillo にログインした後、以下のコマンドを実行すると、otrb のコンテナイメージがロードされます。
[armadillo ~]# abos-ctrl podman-storage --disk
[armadillo ~]# podman pull docker.io/nrfconnect/otbr:9185bda
[armadillo ~]# abos-ctrl podman-storage --tmpfs
otbr のコンテナを作成する
ロードした otbr コンテナのイメージからコンテナを作成して起動するには、次のコマンドを実行してください。 この手順は、Nordic Semiconductor 社の nRF Connect SDK オンラインドキュメントの、Running OTBR using Dockerを参考にしています。 OpenThread のサイトにある、オリジナルの otbr のドキュメントは、こちらです。
以下のコマンドで、参考にしたドキュメントと違うのは、avahi-daemon サービスの停止と、IPv6 の accept_ra に関する設定です。 avahi-daemon サービスを停止するのは、otbr コンテナ内でも avahi-daemon が動作するため、それとの競合を避けるためです。 Armadillo Base OS で直接動作している方の avahi-daemon を停止してください。 コミッショニング時に、Matter デバイスが Thread ボーダールーターに関する DNS-SD のクエリを Thread ネットワークに送出しますが、そのクエリに応答できるよう、otbr コンテナ内で動く方の avahi-daemon を活かす必要があるのです。
[armadillo ~]# rc-service avahi-daemon stop
[armadillo ~]# modprobe ip6table_filter
[armadillo ~]# sysctl net.ipv6.conf.eth0.accept_ra=2
[armadillo ~]# sysctl net.ipv6.conf.eth0.accept_ra_rt_info_max_plen=128
[armadillo ~]# podman network create --ipv6 --subnet fd11:db8:1::/64 -o com.docker.network.bridge.name=otbr0 otbr
[armadillo ~]# podman run -d --privileged --name otbr --net otbr -p 8080:80 \
--sysctl=net.ipv6.conf.all.disable_ipv6=0 --sysctl=net.ipv4.conf.all.forwarding=1 --sysctl=net.ipv6.conf.all.forwarding=1 \
--volume /dev/ttyACM0:/dev/radio nrfconnect/otbr:9185bda --radio-url spinel+hdlc+uart:///dev/radio?uart-baudrate=1000000
上の手順では、IPv6 のサブネットを指定してコンテナのネットワークデバイスを作成し、それをネットワークインタフェースに割り当てたコンテナを作成します。
/dev/ttyACM0 は、BT/TH オプションモジュールに搭載されている EYSKBNZWB に対応するデバイス名です。
otbr のドキュメントに記載されている例と違い、podman run コマンドに --rm オプションを指定していません。
そのため、コンテナを終了してもコンテナが使用したストレージ領域が残り、コンテナが消えずに Exit 状態で残ります。
ただし、Armadillo Base OS の場合は、起動し直すとコンテナが消えます。これは、コンテナのストレージ領域が tmpfs 上にあるからです。
詳細は、マニュアルのイメージを eMMC に保存するに記載している「abos-ctrl podman-storage」の説明をご覧になってみてください。
Armadillo を起動した時に、このコンテナを自動的に作成して起動するには、マニュアルのコンテナ起動設定ファイルを作成するを参考にしてください。
起動した otbr コンテナを終了するには、podman stop otbr
を実行してください。
Matter chip-tool + bluez コンテナを作成する
chip-tool + bluez コンテナイメージをロードする
ビルド済みの chip-tool と bluez パッケージをインストール済みのコンテナイメージを、https://download.atmark-techno.com/sample/a640-matter-howto/debian_bluez_1.0.1.tar からダウンロードしてお使いください。 以下のコマンドを実行すると、chip-tool + bluez コンテナのイメージがロードされます。
[armadillo ~]# cd /var/app/volumes
[armadillo /var/app/volumes]# wget https://download.atmark-techno.com/sample/a640-matter-howto/debian_bluez_1.0.1.tar
[armadillo /var/app/volumes]# abos-ctrl podman-storage --disk
[armadillo /var/app/volumes]# podman load -i debian_bluez_1.0.1.tar
[armadillo /var/app/volumes]# rm debian_bluez_1.0.1.tar
[armadillo /var/app/volumes]# abos-ctrl podman-storage --tmpfs
このコンテナイメージに格納している chip-tool は、この Howto を作成した時点の最新ソースをビルドしたものです。 今後、chip-tool のソースが更新されても、それに合わせてコンテナイメージを更新することはありません。 ご自分で chip-tool をビルドしたい方は、付録のchip-tool のビルド手順に記した手順を参考にしてください。
chip-tool + bluez コンテナを作成する
ロードした chip-tool + bluez コンテナのイメージからコンテナを作成して起動するには、次のコマンドを実行してください。
[armadillo ~]# podman run --name debian \
--net host --cap-add=NET_ADMIN \
-d debian_bluez:1.0.1
起動したコンテナを終了するには、podman stop debian
を実行してください。
この後で説明する、コミッショニングや Matter デバイスの操作手順では、コンテナ上で CUI シェル(bash)を起動して、 CUI シェルで chip-tool を実行します。
Matter over Thread デバイスをコミッショニングする
作成済みのコンテナを使って、Matter over Thread 対応デバイスをコミッショニングするまでの手順を述べます。 大まかな手順は、次の通りです:
- Thread ボーダールーターで Thread ネットワークを作成して、Thread ネットワークの識別情報(dataset)を取得する。
- Matter デバイス(Matter over Threaad 対応デバイス)の本体や、本体に同梱された紙に印刷された QR コードを読み取る。
- QR コードを読み取った内容を chip-tool で解析して、Matter デバイスの BLE 接続情報を取り出す。
- Thread ネットワークの識別情報と Matter デバイスの BLE 接続情報を引数にして、chip-tool のペアリングコマンドを実行する。
以下に、これらの手順の詳細を示します。
OpenThread Border Router (otbr) コンテナを起動する
podman run
の前に実行したのと同じコマンドです。[armadillo ~]# rc-service avahi-daemon stop
[armadillo ~]# modprobe ip6table_filter
[armadillo ~]# sysctl net.ipv6.conf.eth0.accept_ra=2
[armadillo ~]# sysctl net.ipv6.conf.eth0.accept_ra_rt_info_max_plen=128
[armadillo ~]# podman network create --ipv6 --subnet fd11:db8:1::/64 -o com.docker.network.bridge.name=otbr0 otbr
otbr コンテナ用のコンテナ起動設定ファイルを作成して、これらのコマンドをコンテナ起動設定ファイルに記載していれば、コンテナの自動起動時に、これらのコマンドも自動的に実行されます。
[armadillo ~]# podman run -d --privileged --name otbr --net otbr -p 8080:80 \
--sysctl=net.ipv6.conf.all.disable_ipv6=0 --sysctl=net.ipv4.conf.all.forwarding=1 --sysctl=net.ipv6.conf.all.forwarding=1 \
--volume /dev/ttyACM0:/dev/radio nrfconnect/otbr:9185bda --radio-url spinel+hdlc+uart:///dev/radio?uart-baudrate=1000000
コンテナ作成後に Armadillo Base OS を起動し直しておらず、さらに、otbr のコンテナを作成するで述べた手順で、podman stop otbr
を実行していなけければ、otbr は既に動作中です。podman stop otbr
を実行した場合は、podman start otbr
を実行して otbr コンテナを起動してください。
otbr コンテナが起動したら、次のコマンドを実行して、Thread ボーダールーターの動作が開始していることを確認してください。
[armadillo ~]# podman exec -it otbr sh -c "ot-ctl state"
ot-ctl がエラーする場合は、数秒待ってから再度実行してみてください。
[armadillo ~]# ip -6 route add fd11:22::/64 dev otbr0 via fd11:db8:1::2
ここで、fd11:22::
は、Thread ボーダールーターが Thread ネットワークを作成する時に割り当てる、デフォルトのアドレスプレフィクスです。
ip address
コマンドで確認して、そのアドレスのポート 8080 を Web ブラウザで開いてください(例: http://192.168.1.3:8080)。
otbr の Web GUI 画面を Web ブラウザで開いたら、表示された画面のサイドバーから "Form" を選んで Form 画面に変え、その画面の "Form" ボタンをクリックすると、デフォルトの設定値で Thread ネットワークが作成されます。
詳細は、OpenThread の otbr ガイドの Web GUI にある、Form a Thread network をご覧ください。
Web GUI を使わずに、ot-ctl を使って CLI で設定する手順は、otbr についての Codelab の Form a Thread network に記載されています。[armadillo ~]# podman exec -it otbr sh -c "ot-ctl dataset active -x"
出力された dataset の内容を、テキストエディタなどにコピーしておいてください。 なお、この dataset の値は、Thread ネットワークの名前などのパラメータを同じにしても、作成するたびに違う値になります。
Matter chip-tool + bluez コンテナを起動する
[armadillo ~]# podman run --name debian \
--net host --cap-add=NET_ADMIN \
-d debian_bluez:1.0.1 /bin/bash
chip-tool コンテナが起動すると、コンテナ内で bluetoothd が自動起動します。 そのため、bluez の bluetoothctl コマンドを使った Bluetooth デバイスの制御ができますし、chip-tool がコミッショニング時に使用する BLE 通信も可能となっています。
[armadillo ~]# podman exec -it debian /bin/bash
Matter over Thread デバイスの QR コードから接続情報を取り出す
[container ~]# cd /matter
[container /matter]# ./chip-tool payload parse-setup-payload <QR コード内容の文字列>
たとえば、Matter SDK の Matter デバイスサンプルアプリケーションが出力するテスト用の QR コード内容(MT:6FCJ142C00KA0648G00)の場合、次のような出力になります:
[container /matter]# ./chip-tool payload parse-setup-payload MT:6FCJ142C00KA0648G00
[1695633025.627722][5010:5010] CHIP:SPL: Parsing base38Representation: MT:6FCJ142C00KA0648G00
[1695633025.637556][5010:5010] CHIP:SPL: Version: 0
[1695633025.637613][5010:5010] CHIP:SPL: VendorID: 65521
[1695633025.637625][5010:5010] CHIP:SPL: ProductID: 32773
[1695633025.637635][5010:5010] CHIP:SPL: Custom flow: 0 (STANDARD)
[1695633025.637647][5010:5010] CHIP:SPL: Discovery Bitmask: 0x02 (BLE)
[1695633025.637687][5010:5010] CHIP:SPL: Long discriminator: 3840 (0xf00)
[1695633025.637698][5010:5010] CHIP:SPL: Passcode: 20202021
chip-tool が出力した内容のうち、'Passcode' と 'Long discriminator' の内容を、コミッショニングで使用します。それぞれ、chip-tool の pairing ble-thread コマンドに渡す pin_code と discriminator です。
コミッショニングを実行する
[container ~]# bluetoothctl
> menu scan
> transport le
> back
> exit
[container ~]# bluetoothctl scan on
...
Ctrl-C
bluetoothctl scan on
でスキャンを実施すると、受信した BLE アドバタイズパケットの概要が表示されます。'Matter xx' というような名前のアドバタイズパケットが見えたら、Matter デバイスから受信できてます。
Matter デバイスの BLE アドバタイズパケットを受信確認できたら、Ctr-C でスキャン動作を停止してください。
pairing ble-thread
コマンドを使います。
次のコマンドを実行してください:[container /matter]# ./chip-tool pairing ble-thread <node_id_> hex:<Thread ネットワークの dataset> <pin_code> <discriminator> --paa-trust-store-path /matter/paa-root-certs
ここで、'node_id' は、Matter デバイスに割り当てる ID で、任意の数値です(例: 1, 100, 123)。
このコマンドがエラーなく実行完了すると、コミッショニング成功です。この後に述べる手順で、Thread ネットワーク経由で Matter デバイスを操作できます。 Matter デバイスは、コミッショニングした内容、つまり、自身を登録した Matter の Fabric 情報を記録しており、電源を切っても保持します。 Matter デバイスの電源を切り、再び入れた後も、同じように chip-tool で操作できるのです。
さて、上のコマンドで、--paa-trust-store-path
オプション引数で指定しているのは、Matter デバイスの CA 証明書群を配置したディレクトリのパスです。
認証された Matter デバイスは、自身の正当性を証明するための証明書を内蔵しており、それを、コミッショニングの際に Matter コントローラーからの要求に応じて渡します。
Matter コントローラーは、コミッショニング相手の Matter デバイスが提示した証明書が参照する CA(Certificate Authority; 認証局) が、認定済み Matter デバイスのベンダーが取得している CA 証明書群のどれかに対応するのかどうかをチェックして、対応するものが存在しない場合は、不正なデバイスと判定します。
Matter コントローラーは、不正なデバイスと判定されるデバイスをコミッショニングしません。
この仕組みにより、スマートホームネットワークに不正なデバイスが侵入することを防ぐのです。
Matter デバイスの CA 証明書群を取得する手順は、付録に記載しています。
Matter over Thread デバイスを Armadillo で操作する
以下に、スマート電球の三種類の操作例を示します。
[container /matter]# ./chip-tool onoff toggle <node_id> 1
[container /matter]# ./chip-tool levelcontrol move-to-level <level> <transition_time> 0 0 <node_id> 1
たとえば、照度を 10 に変える動作を2秒かけて行わせる場合は、次のコマンドを実行して下さい。
[container /matter]# ./chip-tool levelcontrol move-to-level 10 2 0 0 <node_id> 1
[container /home/atmark/work/matter]# ./chip-tool colorcontrol move-to-color <ColorX> <ColorY> <TransitionTime> <OptionsMask> <OptionsOverride> <node_id> <endpoint-id-ignored-for-group-command>
たとえば、次のコマンドを実行すると、スマート電球の照明が赤っぽい色に変わります:
[container /matter]# ./chip-tool colorcontrol move-to-color 0x5000 0x4000 0 0 0 <node_id> 1
Matter over Thread デバイスのペアリングを解除する
Matter デバイスをコミッショニングして Matter コントローラーにペアリングした後、ペアリングを解除するには、chip-tool の pairing unpair コマンドを使います。
[container /matter]# ./chip-tool pairing unpair <node_id>
以上で、この Howto のテーマである、Armadillo-640 を Thread 対応 Matter コントローラーとして使用する手順の説明を終わります。
chip-tool を、Armadillo にログインして直接操作するのではなく、chip-tool と連携する Web GUI を実装して宅内から遠隔操作できるようにすれば、便利に使えるかも知れません。 また、湿度センサーや温度センサーの計測値に連動して Matter デバイスを制御することも、chip-tool と連携するソフトウェアを実装することで可能になるでしょう。 Armadillo を、Matter 対応家電で構成されたスマートホームシステムのコントローラーとして利用することは、不可能ではありません。 ただし、留意しなければならないことがありますので、次に説明します。
Matter ロゴと認定製品について
この Howto では、Matter SDK に収録された chip-tool を Matter コントローラーとして使用しました。 Matter SDK は Apache 2.0 ライセンスで公開されており、そのライセンスのもとで利用できます。 しかし、Matter SDK を使用して実装したソフトウェアやデバイスで Matter のロゴを利用できるわけでは、ありません。 Matter のロゴを使用するためには、CSA に加入したうえで Matter の認証を得なければいけません。詳細は、Matter SDK の NOTICE をご覧ください。
付録
Matter chip-tool のドキュメント
https://project-chip.github.io/connectedhomeip-doc/guides/chip_tool_guide.html
chip-tool の Android アプリケーションのビルド手順
https://project-chip.github.io/connectedhomeip-doc/guides/android_building.html
Matter 仕様書のダウンロードページ
https://csa-iot.org/developer-resource/specifications-download-request/
chip-tool のビルド手順
Armadillo の開発環境である ATDE を使って、chip-tool を Armadillo-640 用にクロスビルドする手順を以下に述べます。 ここでは、ATDE のバージョン 9 を使う前提です。 以下の手順で示すコマンドは、ATDE にログインして行ってください。
[ATDE ~]$ sudo dpkg --add-architecture armhf
[ATDE ~]$ sudo apt-get install --no-install-recommends -y gnupg2
[ATDE ~]$ sudo apt-get update
[ATDE ~]$ sudo apt-get install --no-install-recommends -y ninja-build git-lfs ruby ruby-dev gdb-multiarch nlohmann-json3-dev \
libdbus-glib-1-dev libgirepository1.0-dev
[ATDE ~]$ sudo apt-get install --no-install-recommends -y libavahi-client-dev:armhf libssl-dev:armhf libsystemd-dev:armhf \
libwrap0-dev:armhf uthash-dev:armhf libsqlite3-dev:armhf libedit-dev:armhf libyaml-cpp0.6:armhf libmosquitto-dev:armhf \
libreadline-dev:armhf libncurses5-dev:armhf libncursesw5-dev:armhf libyaml-cpp-dev:armhf libboost-atomic-dev:armhf \
libboost-chrono-dev:armhf libboost-filesystem-dev:armhf libboost-regex-dev:armhf libboost-program-options-dev:armhf \
libboost-serialization-dev:armhf libboost-system-dev:armhf libboost-thread-dev:armhf libboost-log-dev:armhf \
procps:armhf libmbedtls-dev:armhf libglib2.0-dev:armhf crossbuild-essential-armhf
[ATDE ~]$ sudo apt update && sudo apt upgrade
[ATDE ~]$ sudo apt autoremove
必要なパッケージをインストールしたら、reboot コマンドで ATDE を再起動してください。
[ATDE ~]$ sudo reboot
[ATDE ~]$ curl -L https://repo.anaconda.com/miniconda/Miniconda3-py39_4.12.0-Linux-x86_64.sh --output /tmp/Miniconda.sh
[ATDE ~]$ echo 78f39f9bae971ec1ae7969f0516017f2413f17796670f7040725dd83fcff5689 /tmp/Miniconda.sh > /tmp/Miniconda.sh.sha256
[ATDE ~]$ sha256sum -c /tmp/Miniconda.sh.sha256
[ATDE ~]$ sudo bash /tmp/Miniconda.sh -b -p /usr/local/miniconda
[ATDE ~]$ sudo /usr/local/miniconda/condabin/conda init bash
[ATDE ~]$ exit
※ ATDE で新しい端末を開いて、以下のコマンドを実行してください。
[ATDE ~]$ sudo ln -sf /usr/local/miniconda/bin/python3.9 /usr/bin/python3
[ATDE ~]$ sudo ln -sf /usr/local/miniconda/bin/pip3 /usr/bin/pip3
[ATDE ~]$ export RUST_VERSION=1.67.0
[ATDE ~]$ export RUSTUP_HOME=/opt/rustup-home
[ATDE ~]$ export CARGO_HOME=/opt/cargo-home
[ATDE ~]$ export RUST_TRIPLES="$RUST_TRIPLES armv7-unknown-linux-gnueabihf"
[ATDE ~]$ su
※ここから先は、ATDE の root ユーザーのパスワードを入力して root ユーザーになり、root 権限で実行してください。
# curl https://sh.rustup.rs -sSf --output /tmp/sh.rustup.rs
# cd /tmp && chmod +x sh.rustup.rs
# ./sh.rustup.rs -y --profile minimal --target ${RUST_TRIPLES} --default-toolchain ${RUST_VERSION}
# rm /tmp/sh.rustup.rs
# /opt/cargo-home/bin/cargo install cargo2junit --locked
# /opt/cargo-home/bin/cargo install cargo-deb --git https://github.com/kornelski/cargo-deb.git --branch main
# chmod -R a+rw ${RUSTUP_HOME} ${CARGO_HOME}
# find ${RUSTUP_HOME} ${CARGO_HOME} -type d -exec chmod a+x {} \;
# exit
※この後は、再び一般ユーザー(atmark)で実行してください。
[ATDE ~]$ export PATH="${CARGO_HOME}/bin:${PATH}"
[ATDE ~]$ curl -L https://github.com/Kitware/CMake/releases/download/v3.19.2/cmake-3.19.2-Linux-x86_64.sh --output /tmp/cmake-3.19.2-Linux-x86_64.sh
[ATDE ~]$ echo 2fc84c1bd5a5fa8850426905a76147fbf897cf67ef324b009bcdb7eceafa9662 /tmp/cmake-3.19.2-Linux-x86_64.sh > /tmp/cmake-3.19.2-Linux-x86_64.sh.sha256
[ATDE ~]$ sha256sum -c /tmp/cmake-3.19.2-Linux-x86_64.sh.sha256
[ATDE ~]$ chmod +x /tmp/cmake*.sh
[ATDE ~]$ sudo /tmp/cmake*.sh --prefix=/usr/local --skip-license
[ATDE ~]$ rm /tmp/cmake*
[ATDE ~]$ cd && mkdir -p work/matter
[ATDE ~]$ cd work/matter
[ATDE ~/work/matter]$ git clone --depth 1 --branch external/matter-bridge-unstable https://github.com/SiliconLabs/UnifySDK.git --recursive ../uic-matter
[ATDE ~/work/matter]$ cd ../uic-matter
[ATDE ~/work/uic-matter]$ cmake -DCMAKE_INSTALL_PREFIX=$PWD/stage -GNinja -DCMAKE_TOOLCHAIN_FILE=../cmake/armhf_debian.cmake -B build_unify_armhf/ -S components
[ATDE ~/work/uic-matter]$ cmake --build build_unify_armhf
[ATDE ~/work/uic-matter]$ cmake --install build_unify_armhf --prefix $PWD/stage
※クロスビルドしてできた armhf 用のライブラリやインクルードファイルを参照するための環境変数を設定します。
[ATDE ~/work/uic-matter]$ export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$PWD/stage/share/pkgconfig
[ATDE ~/work/uic-matter]$ export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/arm-linux-gnueabihf/pkgconfig
[ATDE ~/work/uic-matter]$ cd ../matter
[ATDE ~/work/matter]$ sudo apt-get install -y libavahi-client-dev python3-venv libcairo2-dev libreadline-dev
[ATDE ~/work/matter]$ git clone https://github.com/project-chip/connectedhomeip.git
※リポジトリを取得したら、Matter SDK のディレクトリに移動して、SDK 付属のスクリプトで環境構築します。
[ATDE ~/work/matter]$ cd connectedhomeip
[ATDE ~/work/matter/connectedhomeip]$ source scripts/activate.sh
※このスクリプトの実行には、数10分、場合によっては1時間以上かかります。
activate.sh を実行すると、Matter SDK のディレクトリ配下にツールチェーンが配置され、SDK のビルド用の仮想環境が構築されます。
[ATDE ~/work/matter/connectedhomeip]$ cd examples/chip-tool
[ATDE ~/work/matter/connectedhomeip/examples/chip-tool]$ gn gen out/armhf --args='target_cpu="arm"'
[ATDE ~/work/matter/connectedhomeip/examples/chip-tool]$ ninja -C out/armhf
ビルドが終わると、out/armhf ディレクトリに chip-tool の実行ファイルが出現します。 USB メモリや scp を使って Armadillo にコピーしてください。 chip-tool の実行ファイルは、サイズが 100MB 程度と巨大ですので、コピーする時は、ルートファイルシステムではなく、Armadillo Base OS の /var/app/volumes 配下にコピーしてください。
Matter デバイスの CA 証明書群の取得手順
Matter SDK のディレクトリ(connectedhomeip)の直下にある credentials ディレクトリに収録されている fetch-paa-certs-from-dcl.py を使います。 以下のコマンドを実行してみてください:
[ATDE ~/work/matter]$ cd connectedhomeip
[ATDE ~/work/matter/connectedhomeip]$ python credentials/fetch-paa-certs-from-dcl.py --use-main-net-http
実行すると、connectedhomeip/paa-root-certs
ディレクトリに証明書群がダウンロードされます。
これらを Armadillo にコピーして、コピーしたディレクトリのパスを chip-tool の pairing ble-thread コマンドの --paa-trust-store-path オプションで指定すればよいのです。
この手順については、こちらの Blog を参考にしました。有難うございます:
Remo nano で Matter をはじめよう!: https://engineering.nature.global/entry/blog-fes-2023-get-started-matter-with-nano