はじめに
本記事は、
M5Stamp C3でリモートIDを作りたい
の一部です。
全体が長くなってきたので、部分的に別ページにしました。
2022年6月20日以降に機体登録する100g以上のドローンに搭載が義務付けられている「リモートID」を、
M5Stamp C3を使って、作ってみたいな~という記事の一部です。
M5Stamp C3でBLE5 Long Range のテスト
M5Stamp C3で、まずはBLE5のLong Range(LE Coded)が送信できるかどうかを試します。
スケッチ例の中に、ちょうどよいサンプルがあります。
[ファイル]-[スケッチ例]-[ESP32 BLE Arduino]-[BLE5_multi_advertising]を開きます。
名前の通り「複数のAdvertise」です。LE Codedも含まれています。
これをコンパイルし、M5Stamp C3に書き込みます。
再掲しますが、C3Uを使うときは最初は真ん中ボタンを押しながらUSBを繋がないとCDCとして認識しません。
そして、USB CDCの設定をEnabledにしておけば、次回接続時はボタンを押さなくてもCOMポートとして認識してくれます。
書き込みが完了すると、マイコンはBLEで拡張advertiseを投げ始めます。
これをスマホで確認してみましょう。
以下のアプリをインストールします。
Bluetoothの本家NORDICのモニタリングアプリです。
インストール完了したらアプリを起動して、まずは自分のスマホの性能を知りましょう(^^
下図のように[Device Information]を開けば、スマホがLE Coded PHYや拡張Advertiseに対応しているか確認できます。
自分のスマホの性能が分かったら、M5Stamp C3を探します。
下図の一番左のように、デフォルトのままだとApple製品やWindowsノートパソコンなども見つけてしまうので、M5Stamp C3を見つけ出すのは大変です。
そこで、「No filter」と書かれているエリアの一番右の[▼]をタップし、フィルタ設定を開きます。
フィルタ項目の中では、「Exclude:~」と書かれているエリアの一番右の[︙]をタップします。
すると、AppleやMicrosoftなどの主要メーカーの名前があるので、とりあえず全部チェックを入れて、キーボードの[OK]のチェックボタンをタップします。
再度フィルタエリアの右の[▲]をタップしてフィルタを閉じると、余計なBLEデバイスが消えてくれます。
上図の一番右で、赤枠で囲んだ4つのデバイスがM5Stamp C3だと分かる理由は、
BLE5_multi_advertising
のプログラムの中にかかれているBLEのインスタンスアドレスと同じだからです。
このように、プログラムで設定している4つのアドレス
c0:de:52:00:00:01
c0:de:52:00:00:02
c0:de:52:00:00:03
c0:de:52:00:00:04
がアプリ上で確認できているからです。
一見するとMACアドレスのような6バイトのアドレスですね。
M5Stamp C3は1台の無線機器ですが、プログラムでは4つのAdvertiseを同時に行っている別々のインスタンスです。
それぞれの項目を見ていきましょう。
下図のように、インスタンス部分をタップすると、表示エリアが広くなって詳細が見れるようになります。
この詳細データと先程のプログラムの変数名を比較すると、下記の表のようになっているのが分かります。
画像 | 変数名 | アドレス | プライマリ | セカンダリ |
---|---|---|---|---|
addr_1m | c0:de:52:00:00:01 |
LE Coded | LE 1M | |
addr_2m | c0:de:52:00:00:02 |
LE 1M | LE 2M | |
addr_legacy | c0:de:52:00:00:03 |
Legacy | --- | |
addr_coded | c0:de:52:00:00:04 |
LE 1M | LE Coded |
4つ目のComplete Local Nameを見ると、
VERY_LONG_DEVICE_NAME_SENT_USING_EXTENDED_ADVERTISING
となっていて、プログラム中のこのデータだとわかります。
すなわち、こちらのページ 変更点③:8倍の通知データ容量 で紹介されている、
BLE5の拡張Advertiseが最大255バイトのペイロード能力を持っていることを試していることがわかります。
S=8モードが使いたい!
ESP32標準のサンプルプログラムでLE Codedが簡単に試せることがわかりました。
しかし、こちらのページ 変更点②:4倍の通信距離 で紹介されている、
4倍の通信距離を実現するにはLE Coded PHY S=8で使う必要があります。
Arduino-ESP32のヘッダファイル中には、以下のように
ESP_BLE_GAP_PHY_OPTIONS_PREF_S8_CODING
という定義がされているので、設定することはできそうです。
その下にtypedefされているesp_ble_gap_prefer_phy_options_t
という型を使う関数も見つけました。
ESP-IDFのドキュメントでも紹介されています。
esp_ble_gap_set_prefered_phy
関数を使うことでS=8のオプションが設定できそうでが、使い方がまだわかりません(>_<)
どなたか、ご存知の方、いらっしゃいますでしょうか。。。