OpenMV MicroPython OpenMV MicroPython OpenMV MicroPython
  • ホーム
  • チュートリアル
  • コアライブラリ
  • ボード
  • シールド
  • センサー
  • 言語
  • CPython
  • 内部構造
  • 変更履歴
/
  • dev
  • English
  • العربية
  • 简体中文
  • 繁體中文
  • Hrvatski
  • Čeština
  • Nederlands
  • Suomi
  • Français
  • Deutsch
  • עברית
  • Magyar
  • Bahasa Indonesia
  • Italiano
  • 日本語
  • 한국어
  • Polski
  • Português (Brasil)
  • Português (Portugal)
  • Română
  • Русский
  • Español
  • Svenska
  • ไทย
  • Türkçe
  • Українська
  • Tiếng Việt
  • ディスカッション
  • チュートリアル
    • 1. クイックスタート
    • 2. Python概要
    • 3. ハードウェア制御
    • 4. ビジョンセンサー
    • 5. 画像処理
    • 6. NumPy
    • 7. 機械学習
    • 8. Asyncio
    • 9. ネットワーキング
    • 10. Webサーバー
    • 11. Bluetooth
      • 11.1. なぜBluetoothなのか
      • 11.2. BLE スタック
      • 11.3. 無線とリンク層
      • 11.4. アドバタイジングとスキャン
      • 11.5. 接続
      • 11.6. サービスとキャラクタリスティック
      • 11.7. GATT操作
      • 11.8. aioble モジュール
      • 11.9. ペリフェラルとして動作する
      • 11.10. セントラルとして動作する
      • 11.11. L2CAP チャネル
      • 11.12. 同時に複数のロールと複数の接続を扱う
      • 11.13. ペアリングとボンディング
      • 11.14. まとめ
    • 12. ホストプロトコル
    • 13. ツール
    • 14. 量産
  • ライブラリ
  • ボード
  • シールド
  • センサー
  • 言語
  • CPython
  • 内部実装
  • 変更履歴
  • ライセンス

このページの内容

  • 11.3.1. 無線
  • 11.3.2. リンク層
  • 11.3.3. カメラとピアが共有するもの
  • 11.3.4. Python にはこのすべてのうち何が見えるか
micropython-doc 0 0
このページを編集
  1. OpenMV MicroPython /
  2. OpenMV Cam チュートリアル /
  3. 11. Bluetooth /
  4. 11.3. 無線とリンク層
ソースを表示 ChatGPT で開く Claude で開く Perplexity で開く

11.3. 無線とリンク層¶

BLE スタックの下位 2 層は、Python から見るとほぼ完全に自動です -- 無線シリコンと、MicroPython がその上で動作するレイヤが、チャネルの選択から失われたパケットの再送まですべてを処理します。それらが行う選択のうち 3 つは、それでもユーザー向け API に現れます: 電力、到達範囲、そしてスループットです。

11.3.1. 無線¶

BLE は、Wi-Fi、電子レンジ、その他ほとんどの短距離無線と同じ 2.4 GHz の Industrial-Scientific-Medical(ISM)帯を使用します。この帯域は幅 2 MHz の 40 チャネルに分割されています。

  • 40 チャネルのうち 3 つ は アドバタイジング 用に予約されています -- デバイスの存在を、聞いている誰にでも知らせる短いブロードキャストです。これらは帯域全体に分散して配置されているため、リスナーは 3 つすべてを素早くスイープでき、また、どれか 1 つに干渉があってもデバイスが完全に通信不能になる可能性は低くなります。

  • 37 個 は データ チャネルです。2 つのデバイスが接続すると、これらの上でパケットを交換し、接続時に両側で合意した疑似ランダム列に従ってチャネル間をホッピングします。適応周波数ホッピング により、どちらの側もチャネルを不良(Wi-Fi の強い干渉、電子レンジ、近隣の BLE ネットワーク)としてマークでき、その列はそれをスキップします。

A horizontal frequency axis from 2400 MHz to 2480 MHz with 40 narrow channel slots drawn on it. Three of the slots, at the bottom edge, middle, and upper edge of the band, are highlighted as "advertising channels". The remaining 37 are labelled "data channels".

2.4 GHz 帯上の 40 個の BLE チャネル。3 つはアドバタイジング用で、残りは開いた接続上のトラフィックを運びます。¶

無線は短いパケット -- 最大でも数ミリ秒の長さ -- を送信し、その間はスリープします。そのスリープこそが、この技術を 低エネルギー たらしめているものです。一般的な BLE peripheral が実際に送信に費やす時間は 1 パーセントを十分に下回り、残りはスケジュールされたイベントの合間に無線の電源を切っている状態です。

11.3.2. リンク層¶

リンク層は、別のデバイス上の相手と通信する BLE の最小単位です。4 つの仕事を担います。

  • パケットフレーミング。 各パケットは、短いヘッダ(チャネルアクセスアドレス、パケット長、制御ビット)、ペイロード、そして CRC を運びます。受信側は CRC をチェックし、破損したものはすべて破棄します。

  • アドレッシング。 すべての BLE デバイスは、無線上でそれを識別する 48 ビットの デバイスアドレス を持ちます。一部は public -- メーカーが割り当てたハードウェア識別子で、永久に追跡可能です。一部は random -- デバイス上で生成され、定期的にローテーションされ、オプションで暗号化されるため、盗聴者は 2 つの送信を同じ物理ハードウェアに結びつけることができません。アドレスは アドバタイジングとスキャン で再び登場します。

  • 接続スケジューリング。 2 つのデバイスが接続すると、リンク層はホッピング列上で定期的な無線イベントを -- 一定の 接続インターバル 間隔で -- スケジュールし、上位の GATT 層からキューに入れられたデータを各イベントに詰め込みます。両側はイベント間で再びスリープします。接続インターバルは、アプリケーションが要求できるつまみです(接続 を参照)。

  • 信頼性。 接続上の各パケットは、相手側によって確認応答されます。リンク層は応答を得られなかったものをすべて再送するため、上位レイヤには順序の保たれた損失のないバイトストリームが見えます。ネットワーキング側の UDP -- パケットを送って最善を祈る とは異なり、BLE は通常の使用において別個の非信頼モードを持ちません -- 開いた接続上のすべてのパケットは、到着するか、リンクが失われたと宣言されるまで再試行されます。

リンク層はまた、ペアリング中にデバイスのペアが鍵に合意した後に 暗号化 が実行される場所でもあります(ペアリングとボンディング を参照)。暗号化されたリンク上のすべてのパケットは、上位レイヤが見る前に受信側で復号されます。

11.3.3. カメラとピアが共有するもの¶

両端の無線は、その会話を支配する一握りのパラメータについて接続時に合意します:

  • 接続インターバル -- 両側がパケットを交換するために起きる頻度で、7.5 ms から 4 s までの範囲です。

  • peripheral レイテンシ -- peripheral が、伝えることが何もない場合に電力を節約するためにスキップしてよい連続インターバルの数です。

  • スーパービジョンタイムアウト -- 相手が沈黙したとき、いずれの側もリンクが失われたと宣言するまで待つ時間です。

  • MTU -- いずれの側も GATT に届ける単一パケットの最大サイズ(デフォルトは 23 バイト、ネゴシエーションで引き上げ可能)です。

無線とリンク層は合わせて、両方の無線を可能な限りオフに保ちながら、信頼性のある順序付けされたパケットをあるデバイスから別のデバイスへ届けることに責任を負います。その上のすべてのレイヤは、2 つのエンドポイント間にクリーンでプライベートなバイトチャネルが存在するかのように振る舞うことができます。

11.3.4. Python にはこのすべてのうち何が見えるか¶

ほとんど何も見えません。bluetooth および aioble API は、チャネル、ホッピング列、パケット CRC、再送タイマーを公開しません。それらはすべて BLE ポートと無線の内部で処理されます。実際に 現れる 部分は、接続時のネゴシエーションが公開するもの -- 接続インターバル、MTU、アドレスタイプ -- です。

前へ
11.2. BLE スタック
次へ
11.4. アドバタイジングとスキャン

OpenMV ファームウェア v5.0.0 向け · MicroPython v1.28 ベース · ドキュメント生成日 2026年6月19日 · 著作権 © 2014-2026 OpenMV、Damien P. George およびその他。

Sphinx と Shibuya theme を使用して作成されました。