OpenMV MicroPython OpenMV MicroPython OpenMV MicroPython
  • Home
  • Tutorial
  • Libraries
  • Boards
  • Shields
  • Sensors
  • Language
  • CPython
  • Internals
  • Changelog
  • License
/
  • English
  • 简体中文
  • 繁體中文
  • Deutsch
  • 日本語
  • Español
  • Русский
  • Français
  • 한국어
  • Italiano
  • Português
  • Nederlands
  • Română
  • Hrvatski
  • Čeština
  • Polski
  • Suomi
  • Svenska
  • Magyar
  • Türkçe
  • 討論
  • 教學
    • 1. 快速入門
    • 2. Python 概觀
    • 3. 硬體控制
    • 4. 視覺感測器
    • 5. 影像處理
    • 6. NumPy
    • 7. 機器學習
    • 8. Asyncio
    • 9. 網路
    • 10. Web 伺服器
    • 11. 藍牙
      • 11.1. 為什麼使用藍牙
      • 11.2. BLE 堆疊
      • 11.3. 無線電與連結層
      • 11.4. 廣告與掃描
      • 11.5. 連線
      • 11.6. 服務與特徵
      • 11.7. GATT 操作
      • 11.8. aioble 模組
      • 11.9. 作為周邊裝置
      • 11.10. 作為中央裝置(central)
      • 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. 藍牙 /
  4. 11.3. 無線電與連結層
檢視原始碼 在 ChatGPT 中開啟 在 Claude 中開啟 在 Perplexity 中開啟

11.3. 無線電與連結層¶

從 Python 的角度來看,BLE 堆疊的最底兩層幾乎完全是自動運作的——無線電晶片以及 MicroPython 在其上執行的各層,會處理從挑選頻道到重傳遺失封包的一切事務。它們所做的選擇中,仍有三項會透出到面向使用者的 API:功率、範圍與吞吐量。

11.3.1. 無線電¶

BLE 使用與 Wi-Fi、微波爐及大多數其他短距離無線裝置相同的 2.4 GHz 工業、科學與醫療(ISM)頻帶。該頻帶被劃分為 40 個寬 2 MHz 的頻道。

  • 40 個頻道中有 三個 保留供 廣播 使用——這是向任何收聽者宣告裝置存在的短促廣播。它們在頻帶上彼此分散,使得收聽者能迅速掃過全部三個,並使任一頻道上的干擾不太可能讓裝置完全失聯。

  • 三十七個 是 資料 頻道。一旦兩個裝置連線,便會在這些頻道上交換封包,依照雙方在連線時議定的偽隨機序列在它們之間跳頻。自適應跳頻 讓任一方都能將某個頻道標記為不良(嚴重的 Wi-Fi 干擾、微波爐、鄰近的 BLE 網路),使序列跳過它。

一條從 2400 MHz 到 2480 MHz 的水平頻率軸, 上面繪有 40 個狹窄的頻道槽。其中三個槽, 分別位於頻帶的下緣、 中間與上緣,被 標示為「廣播頻道」。其餘 37 個則標示為「資料頻道」。

2.4 GHz 頻帶上的 40 個 BLE 頻道。三個用於廣播,其餘的則在開放連線上承載流量。¶

無線電傳送短促的封包——最長不過幾毫秒——並在其間休眠。那段休眠正是使這項技術 低能耗 的關鍵。典型的 BLE 周邊端實際傳送的時間遠低於其運作時間的百分之一;其餘時間裡,無線電都在排定的事件之間關閉電源。

11.3.2. 連結層¶

連結層是 BLE 中與另一裝置上對應部分溝通的最小單位。它處理四項工作。

  • 封包訊框化。 每個封包都帶有一個短標頭(頻道存取位址、封包長度、控制位元)、一個酬載,以及一個 CRC。接收端會檢查 CRC 並丟棄任何損毀的內容。

  • 定址。 每個 BLE 裝置都有一個 48 位元的 裝置位址,用以在無線電上標識它。有些是 公開的——製造商指派的硬體識別碼,可永久追溯。有些則是 隨機的——在裝置上產生、定期輪替,並可選擇性地加密,使竊聽者無法將兩次傳輸連結到同一台實體硬體。位址在 廣告與掃描 中會再次出現。

  • 連線排程。 一旦兩個裝置連線,連結層便會在跳頻序列上排定週期性的無線電事件——彼此相隔一個固定的 連線間隔——並將上層 GATT 層所佇列的任何資料打包進每一個事件中。雙方在事件之間都回到休眠狀態。連線間隔是應用程式可以請求的一個調節旋鈕(參見 連線)。

  • 可靠性。 連線上的每個封包都會由對方確認。連結層會重傳任何未獲回應的內容,因此上層看到的是一個有序、無遺失的位元組串流。與網路那一側的 UDP -- 送出封包,聽天由命 不同,BLE 在正常使用下並沒有一個獨立的不可靠模式——開放連線上的每個封包都會被重試,直到送達或連結被宣告遺失為止。

連結層也是在一對裝置於配對期間議定金鑰之後 加密 運作之處(參見 配對與綁定)。加密連結上的每個封包在上層看到它之前,都會在接收端先行解密。

11.3.3. 相機與對端共享的內容¶

兩端的無線電在連線時會就一小組支配整個對話的參數達成協議:

  • 連線間隔——雙方多久醒來交換一次封包,範圍從 7.5 ms 到 4 s。

  • 周邊端延遲——若周邊端無話可說,它可以跳過多少個連續間隔以節省電力。

  • 監督逾時——當對方靜默時,任一方在宣告連結遺失前要等待多久。

  • MTU——任一方會交付給 GATT 的最大單一封包(預設為 23 個位元組,可協商提高)。

無線電與連結層共同負責將可靠、有序的封包從一個裝置送到另一個裝置,同時盡可能讓兩端的無線電保持關閉。其上的每一層都可以彷彿兩個端點之間存在一條乾淨、私密的位元組通道般地運作。

11.3.4. Python 對這一切看到的內容¶

幾乎什麼都看不到。bluetooth 與 aioble API 不會公開頻道、跳頻序列、封包 CRC 或重傳計時器;那些全都在 BLE 連接埠與無線電內部處理。確實 會透出的部分,是連線時協商所公開的那些——連線間隔、MTU、位址類型。

上一頁
11.2. BLE 堆疊
下一頁
11.4. 廣告與掃描

For OpenMV firmware v5.0.0 · based on MicroPython v1.28 · docs built 16 Jun 2026 · Copyright © 2014-2026 by OpenMV, Damien P. George, and others.

Made with Sphinx using the Shibuya theme.