0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

nRF Connect SDK:本気出してBLE Mesh

Last updated at Posted at 2023-07-05

前書き

なんだよお前Matterの登場でBLE Mesh死んだって言ったじゃねぇか(笑)
それでもやらないといけない時はあるのです!(キリッ

ちなみに過去に少しだけBLE Meshに触れた記事もありますのでよかったらそちらもどうぞ。

ただですね…改めて自分の書いた記事を読んでみると、上記の記事に書いてある内容と現在の動作状態が違うところがいくつかある気がするんですよね。しばらく触っていなかったのは事実なので、もしかしたらその間に仕様変更があった可能性もあります。

ちなみに僕が以前に触っていたときはBLE MeshアプリはVer 1.0.0でした。
現在は3.3.0になっています。

BLE MeshはnRF Meshを使う

以前の記事でも書きましたがBLE Meshは従来のBLEとは通信方式が全く異なるため使用するアプリも異なります。
BLEではnRF Connect for mobileというアプリを使っていましたが、BLE MeshではnRF Meshを使います。

立ち上げてみると…

早速アプリをインストールして立ち上げてみますが何も表示されていません。なんやこれ…とは思ったものの、世の中にBLE Meshがほとんど存在していないことを考えても不思議ではないかな…と思いつつ
Screenshot_20230704-140755.png
nRF Connect for mobileにはデバイスがいっぱい表示されて動いている感が得られる(笑)のを考えると、最初からなんだかとっつきにくいアプリではあります。

仮にMeshデバイスがいっぱいあってもこのスタートアップ画面には出ませんけどね(笑)

Meshデバイスのサンプル

nRF Connect SDKにはBLE Meshのサンプルも用意されています。ここでは一番分かりやすくLight Switchのサンプルを使いたいと思います。
image.png

Meshは最低でも2台のデバイスが必要になります。
このあとLightデバイスも作ります。

コンパイルしてフラッシュに書き込んで…何も出てこないですね。でもそれは正しい状態でnRF Meshのトップ画面はProvisioned Device(ネットワークに参加しているデバイス)を表示する画面であるため、まだ誰もネットワークに参加していない状態では何も表示されません。
ネットワークにデバイスを参加させるには右下の+ボタンを押します。すると…
image.png
先ほどコンパイルしてフラッシュに書き込んだファームウェアがちゃんと動いているようです。
この状態はまだUnprovisioned Device(ネットワークに未参加のデバイス)なのでデバイスを選択します。
image.png
この画面ではデバイス名称を変更したり割り当てるApp Keysを変更したりできるのですが、とりあえずこのままでIDENTIFYをタップし、続いてPROVISIONをタップします。
image.png
OOB(Out of Band)はNo OOBで大丈夫です。
image.png
ネゴシエーションが始まります。
image.png
と思いきや…なんやこれ!
image.png
こんなのnRF5 SDK for Meshの時は一度も見たことがないけど…何かミスったんかな…。と思いつつ数回Provisioningをやり直してみても変わらず。気を取り直して(諦めて)書いてあるとおりにGET COMPOSITION DATAを押してみましたが何も反応がありません。
image.png
ここらへんでさすがに変だなぁと思ったのでデバッグログを確認してみると…なんやこれ!Fatal Error吐き出しとるやんけ!(笑)
image.png
そりゃあ動くわけないですよ、ええ…。

NCS 2.4.0時点での状態でバグだと思われます。
普通の人はここで諦めます(笑)

とりま修正を試みる

ということで詳細は割愛しますが以下の修正を実施することで動くようになります。

prj.conf
CONFIG_NCS_SAMPLES_DEFAULTS=n

単純に上記のコンフィグをOFFにするとLOGもOFFになってしまうのでほとんど何も表示されなくなります。
とりあえず今はこのままで。

無事コンフィギュレーションが終わりました。
image.png

これだけでは何もできない

最初のほうにも書きましたがBLE Meshの動作を確認するには最低でも2台デバイスが必要になります。ここまでの作業でセットアップしたのはLight Switchですが、このデバイスが持つElementを見てみるとGeneric OnOff Clientが4つあります。名前の通り照明用スイッチの役割を持ち、照明デバイスに対してOn or Offのステータスを送信する(Publish)側のデバイスです。この照明用スイッチデバイスが本当に送信しているかどうかを確認するためには、受信する(Subscribe)側のGeneric OnOff ServerのElementを持つデバイスが必要になります。それがLightというプロジェクトになります。
image.png

Lightデバイスのセットアップ

ここまでの流れと全く同じ感じで今度はLightデバイスをセットアップします。基本的な部分は全く一緒なので説明は省略します。あ、もちろんですが

prj.conf
CONFIG_NCS_SAMPLES_DEFAULTS=n

も同様に必要です。

やっと準備が整った

Lightデバイスも登録して準備ができました。
image.png
ここから本格的な設定に入ります。Light Switchデバイスのほうは先ほどちょっとだけ見ましたがElementを4つ持っていました。これはそのまんまでスイッチが4つあることと同義になります。評価ボードにはボタンが4つ付いているので各ボタンにElementが1個ずつ割り当てられます。
Lightデバイスのほうも見てみます。
image.png
同じように4つのElementがあり、それぞれのLEDに割り当てられています。ちなみにElement Nameのところにある0x0006などの数値はUnicast Addressになります。

名前を変更するとこの数字を消すこともできます。
ただし、Elementのどこを見てもこの数字は見つかりません(笑)。

PublishとSubscribeの設定

どちらから設定してもよいのですが、その前にLight Switchデバイスの評価ボードに付いているボタンを押してみましょう。ん?何も起きない?正しいです。なぜなら何も設定していないからです。
ということで、まずはLight Switchのほうから設定していきましょう。Publish側です。
設定をするのはElement: 0x0002を開いたところにあるGeneric On Off Clientです。これをタップすると詳細設定の画面になります。
image.png
App KeysにあるBIND KEYを押してApplication Key1を選択します。ちなみにApplication Keyはもっといっぱい持たせることができるのですが、ここではこのまま選択します。
次にPublish Addressを設定します。ここではLightデバイスが持っている0x0006にPublishします。
image.png
よし!できた!と思ったそこのあなた、ボタンを押してみてください。あれ、自分自身の評価ボードのLEDがON/OFFするだけ…?はい、まだ設定は終わっていません。Lightデバイス側が受信できるように設定する必要があります。
Lightデバイスが持つElement: 0x0006内にあるGeneric On Off ServerをタップしてApplication Keyを設定します。
image.png
Unicast Addressでメッセージを送っているので設定はこれだけでOKです。そしてボタンを押してみると…お、Lightデバイス上のLEDが点灯しました!もう一度押すと消えます。これがBLE Meshの基本になります。

余談

BLE Meshは仕様が複雑すぎて、最初に動かせるようになるまでの色々なパラメーターの理解と設定だけで挫折できます(笑)。
僕も最初にここに辿り着くまでに1年くらい挫折と挑戦を繰り返しました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?