7
3

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.

M5Stamp C3でBLE5 Long Range のテスト

Last updated at Posted at 2022-05-21

はじめに

本記事は、
  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]を開きます。
ble5_example.png

名前の通り「複数のAdvertise」です。LE Codedも含まれています。

これをコンパイルし、M5Stamp C3に書き込みます。
再掲しますが、C3Uを使うときは最初は真ん中ボタンを押しながらUSBを繋がないとCDCとして認識しません。
そして、USB CDCの設定をEnabledにしておけば、次回接続時はボタンを押さなくてもCOMポートとして認識してくれます。

書き込みが完了すると、マイコンはBLEで拡張advertiseを投げ始めます。
これをスマホで確認してみましょう。
以下のアプリをインストールします。

  nRF Connect for Mobile

Bluetoothの本家NORDICのモニタリングアプリです。

インストール完了したらアプリを起動して、まずは自分のスマホの性能を知りましょう(^^
下図のように[Device Information]を開けば、スマホがLE Coded PHYや拡張Advertiseに対応しているか確認できます。
nrf_device.png

自分のスマホの性能が分かったら、M5Stamp C3を探します。

下図の一番左のように、デフォルトのままだとApple製品やWindowsノートパソコンなども見つけてしまうので、M5Stamp C3を見つけ出すのは大変です。
そこで、「No filter」と書かれているエリアの一番右の[▼]をタップし、フィルタ設定を開きます。
フィルタ項目の中では、「Exclude:~」と書かれているエリアの一番右の[︙]をタップします。
すると、AppleやMicrosoftなどの主要メーカーの名前があるので、とりあえず全部チェックを入れて、キーボードの[OK]のチェックボタンをタップします。
再度フィルタエリアの右の[▲]をタップしてフィルタを閉じると、余計なBLEデバイスが消えてくれます。

nrf_filterd3.png

上図の一番右で、赤枠で囲んだ4つのデバイスがM5Stamp C3だと分かる理由は、
BLE5_multi_advertisingのプログラムの中にかかれているBLEのインスタンスアドレスと同じだからです。
instance_address.png
このように、プログラムで設定している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を同時に行っている別々のインスタンスです。

それぞれの項目を見ていきましょう。
下図のように、インスタンス部分をタップすると、表示エリアが広くなって詳細が見れるようになります。
nrf_open2.png
この詳細データと先程のプログラムの変数名を比較すると、下記の表のようになっているのが分かります。

画像 変数名 アドレス プライマリ セカンダリ
nrf01.png addr_1m c0:de:52:00:00:01 LE Coded LE 1M
nrf02.png addr_2m c0:de:52:00:00:02 LE 1M LE 2M
nrf03.png addr_legacy c0:de:52:00:00:03 Legacy ---
nrf04.png addr_coded c0:de:52:00:00:04 LE 1M LE Coded

4つ目のComplete Local Nameを見ると、
VERY_LONG_DEVICE_NAME_SENT_USING_EXTENDED_ADVERTISING
となっていて、プログラム中のこのデータだとわかります。
long_message.png

すなわち、こちらのページ 変更点③:8倍の通知データ容量 で紹介されている、
BT5-4_f2.png
BLE5の拡張Advertiseが最大255バイトのペイロード能力を持っていることを試していることがわかります。

S=8モードが使いたい!

ESP32標準のサンプルプログラムでLE Codedが簡単に試せることがわかりました。
しかし、こちらのページ 変更点②:4倍の通信距離 で紹介されている、
BT5-3_f1.png
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のオプションが設定できそうでが、使い方がまだわかりません(>_<)
どなたか、ご存知の方、いらっしゃいますでしょうか。。。

 

7
3
1

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
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?