Seeed Studio XIAO ESP32C6 でBLEビーコンを試してみる(3)

この記事では、Seeed Studio XIAO ESP32C6を使って、MicroPythonからBluetooth Low Energy(BLE)のアドバタイズを発信し、スマートフォンからビーコンを検出してみます。

この記事で学べること

  • スマートフォンでAdvertisingを確認する方法
  • Primary PHYについて
  • Advertising間隔について
  • RSSIについて

ステップごとの解説

  1. スマートフォンでAdvertisingを確認する
    XIAO ESP32C6からBLE Advertisingを発信した状態で、スマートフォンのBLEスキャナアプリ(今回は、nRF Connectを利用)を起動して周囲のBLE機器を検索します。
    すると、XIAO ESP32C6から発信されたBLE Advertisingを確認することができました。
    今回設定したデバイス名は、
XIAO-ESP32C6

です。
BLEスキャナアプリでは、次のように表示されました。

今回の実験では、XIAO ESP32C6が次のように表示されています。

XIAO-ESP32C6

Primary PHY:   PHY LE 1M
Secondary PHY: PHY LE 161M

RSSI:          -82 dBm
Advertising:   約101.63 ms

これで、XIAO ESP32C6から発信したAdvertisingをスマートフォンで受信できていることを確認できました。

  1. Primary PHYについて
    Primary PHY: PHY LE 1M は、簡単にいうと **「このBLE通信では、基本となる無線通信方式としてLE 1M PHYを使っています」**という意味です。

    PHYとは?

    PHYは Physical Layer(物理層) の略です。
    BLEでは、実際に電波を使って0/1のデータを送受信する部分の通信方式をPHY(Physical Layer)として定義しています。
    今回のスキャナ画面では、
Primary PHY:   PHY LE 1M

となっています。
これは、

BLEのPrimary Channelで「LE 1M PHY」を使用している

ということです。
「1M」は1Mbpsのこと
LE 1M の「1M」は、基本的に1 Mbit/s(1Mbps)のビットレートを意味します。

LE 1M
  │
  └─ 1 Mbpsの物理層通信方式

ただし、ここは少し注意が必要です。
1Mbps = 実際にアプリケーションデータを1秒間に1Mbit送れる、という意味ではありません。
BLEでは、パケットのヘッダーや各種制御情報なども送信するため、実際に利用できるデータ速度はこれより低くなります。

  1. なぜ「Primary PHY」なのか?
    BLEのAdvertisingでは、Advertisingに使用するPrimary Channelsがあります。
    BLEでは2.4GHz帯の40個のチャネルを使いますが、そのうち、
37
38
39

の3つがAdvertising Channelとして使用されます。
イメージとしては、

BLE 2.4GHz帯
│
├─ Advertising Channel
│   ├─ Channel 37
│   ├─ Channel 38
│   └─ Channel 39
│
└─ Data Channel
    └─ その他のチャネル

です。
今回のXIAO ESP32C6が発信しているAdvertisingも、このAdvertising Channelを使って送信されます。
そして、そのPrimary Channelで使用されているPHYが、

PHY LE 1M

ということです。

LE 1M以外もある

BLEには、LE 1M以外にもPHYがあります。
代表的なのが、

PHY

特徴

LE 1M

基本的なBLE PHY

LE 2M

より高速な通信

LE Coded

長距離通信を重視

です。
特にBLE 5以降では、LE 2MLE Coded PHYが利用できるようになっています。
ざっくりイメージすると、

LE 1M
速度:標準
互換性:高い

LE 2M
速度:高速
通信距離:一般的にはLE 1Mより不利になりやすい

LE Coded
速度:低め
通信距離:長距離向け

という違いがあります。

  1. Advertising間隔について
    今回のプログラムでは、
ble.gap_advertise(
    100000,
    adv_data=adv_data
)

として、Advertising間隔を100,000μs、つまり100msに設定しました。
BLEスキャナアプリでは、

101.63 ms

と表示されています。
設定値と完全に同じではありませんが、おおむね100ms間隔でAdvertisingが発信されていることが確認できます。

  1. RSSIについて
    画面には、
-82 dBm

という値も表示されています。
これは**RSSI(Received Signal Strength Indicator)**と呼ばれる、受信した電波の強さを示す値です。
一般的には、

0 dBm
  ↑
  │ 電波が強い
  │
-50 dBm
-70 dBm
-82 dBm
  │
  ↓ 電波が弱い
-100 dBm

のように、値が0に近いほど受信電波が強く、マイナスの値が大きくなるほど弱いと考えます。
ただし、RSSIは距離だけで決まるものではありません。
アンテナの向きや周囲の障害物、壁、人などによっても変化するため、RSSIから距離を正確に求められるわけではありません。
今回は、まず「XIAO ESP32C6からBLE Advertisingを発信し、スマートフォンで受信できる」というところまで確認できました。

なお、スクリーンショットには、

XIAO-ESP32C6

とは別に、

Beacon
Manufacturer Data: Microsoft <0006>
...
Beacon Type: 9 (WindowsDesktop)

というものも見えています。
これは今回のXIAO ESP32C6ではなく、周囲に存在する別のBLEビーコン/Advertising機器です。
つまり、スキャナ画面には、

周囲のBLE機器
│
├─ XIAO-ESP32C6  ← 今回の実験対象
│
├─ Beacon        ← 周囲にあった別のAdvertising
│
└─ N/A           ← その他のBLE機器

と、複数のBLE機器が表示されています。
これは逆に、**BLE Advertisingが「周囲に向けて一方的に発信され、複数の機器からスキャンできる」**という今回の記事の説明にぴったりの実例になっています。

次はこのスクリーンショットを使って、**「Advertisingデータの中身を見てみる」を説明したいと思います。続く

類似投稿