らんらん技術日記

日々の学習メモに

Bluetooth meshを試してみたい part2

前回までの話

それは1週間前のこと。Bluetooth meshを試すべく、Laird社 BL654のUSBドングルを購入した。ついにBluetooth meshを動かせる! そんな期待とは裏腹に、早速一つの壁にぶち当たる。ハードウエアの壁である。果たしてUSBドングルでBluetooth meshを動かすことはできるのか!? 運命やいかに。

回路情報の確認

Lairdが提供するBLE meshのサンプルプロジェクトは、BL654のdevelopmentkits向けのソースコードになっています。私はUSBドングルでBLE meshを動かしたいので、developmentkitsと回路情報を比較し、回路的に問題がありそうな箇所はソースコードの変更で対応することにします。以下のドキュメントを参考にします。
BL654 USB Dongle User Guide v1_0.pdf
BL654 DVK User Guide v1_1.pdf

いずれのドキュメントもLairdのHPから入手可能です。
BL654 Bluetooth Module - Nordic nRF52840 with BLE and NFC

USBドングルのユーザガイドを読む限り、BL654周りの回路はだいたい下のようになっていると思います。
f:id:yukirunrun:20190131223425p:plain
文字と表だけの説明なので、あくまでイメージです。いいから回路図載せろよw、て感じです。中身を開けるのが一番確実ですが、そこまでのやる気はありません。

この回路図とdevelopmentkitsのユーザガイドを照らし合せてみると、次のことがわかります。
・UARTは共通
・LED1も共通
・developmentkitsのButton_1は、USB DongleのVirtual Buttonに対応
・Button2〜4、LED2〜4はdevelopmentkitsのみ
他にもありますが、今回関係あるのはここらへんでしょう。

Smart Basicの変更

というわけで、Smart Basicコードを以下のように変更します。


$autorun$.mesh.sniff.sb
変更不要

$autorun$.mesh.light.switch.proxy.server.sb
GpioInit()関数
 BUTTON1とLED1に関連しないgpiosetfunc(),GpioBindEvent()をコメントアウト

$autorun$.mesh.light.switch.proxy.client.sb
GpioInit()関数
 BUTTON1とLED1に関連しないgpiosetfunc(),GpioBindEvent()をコメントアウト
OnStatus()関数
 GpioWrite()の第一引数をledpin[iElemIdx] -> ledpin[0]に変更



これで大丈夫なはずです! 多分。なんだったら、やらなくても大丈夫な気がします。ちゃんと回路を確認したってことが重要なんです。ちなみに、Smart Basicの文法は以下のドキュメントが参考になります。
smartBASIC Core Functionality Guide_v3_1.pdf
BL654 smartBASIC Extensions Guide v29_2_2_0.pdf

書き込み & 動作確認

UwTerminalXを使って、BL654にSmart Basicのプログラムを書き込みます。
--- 追記情報 ---
後からわかったことなんですが・・・ここでプログラムを書き込むと、以前の状態に戻すのは少し面倒です。 LairdのSmartBasicソリューションには、電源起動と同時にプログラムが走るautorunという仕組みがあるのですが、簡単にはautorunから抜け出せなくなってしまうのです。autorunから抜け出せないと、別のプログラムを書き込んだりファームウエアアップグレードができないので大変です! まぁ、サポート外のことをやっているので仕方ないのですがw( 指定通りにDevkitを使えば簡単に抜け出せると思います)
ですが、少し手数を踏むとautorunからちゃんと抜け出せます! そこへんの話はpart3の記事で記載します。


私の手元にあるBL654は3台なので、Sniffer、Server、Clientをそれぞれ1台ずつ書き込みました。プログラムを書き込んだら、全てのBL654をパソコンのUSBポートに挿入し、UxTerminalX経由で各COMポートを開きます。
f:id:yukirunrun:20190131231706j:plain

UxTerminalXの画面は以下のようになりました。

Server

最初のコメントが出て、その後はうんともすんとも言いません。
ま、まぁ、そういうものだよね・・・
f:id:yukirunrun:20190131232502p:plain

Client

同じく最初のコメントが出て、その後はうんともすんとも言いません。
・・・大丈夫なんでしょうか?
f:id:yukirunrun:20190131232554p:plain

Sniffer

パケットが流れているのを確認できました! 詳細はわかりませんが、ServerとClientそれぞれがアドバタイズしているパケットのようです。とりあえずは環境構築に成功かな!? よかったよかった!
f:id:yukirunrun:20190131232624p:plain

以上、おそらくBLE meshを動かすための下準備は完了したと思います。しかし、BLE meshとしての動きはまだ確認できていないので、次回はmeshとして動かすことを目指します。