OpenMV MicroPython OpenMV MicroPython OpenMV MicroPython
  • Strona główna
  • Samouczek
  • Podstawowe biblioteki
  • Płytki
  • Nakładki
  • Sensory
  • Język
  • CPython
  • Wewnętrzna struktura
  • Historia zmian
/
  • 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
  • Dyskusja
  • Samouczek
    • 1. Szybki start
    • 2. Przegląd Pythona
    • 3. Sterowanie sprzętem
    • 4. Sensory wizyjne
    • 5. Przetwarzanie obrazu
    • 6. NumPy
    • 7. Uczenie maszynowe
    • 8. Asyncio
    • 9. Sieci
    • 10. Serwery WWW
    • 11. Bluetooth
      • 11.1. Dlaczego Bluetooth
      • 11.2. Stos BLE
      • 11.3. Radio i warstwa łącza
      • 11.4. Rozgłaszanie i skanowanie
      • 11.5. Połączenia
      • 11.6. Usługi i charakterystyki
      • 11.7. Operacje GATT
      • 11.8. Moduł aioble
      • 11.9. Działanie jako urządzenie peryferyjne
      • 11.10. Działanie jako central
      • 11.11. Kanały L2CAP
      • 11.12. Współbieżne role i wiele połączeń
      • 11.13. Parowanie i wiązanie
      • 11.14. Podsumowanie
    • 12. Protokół hosta
    • 13. Narzędzia
    • 14. Produkcja
  • Biblioteki
  • Płytki
  • Nakładki
  • Sensory
  • Język
  • CPython
  • Wewnętrzne mechanizmy
  • Dziennik zmian
  • Licencja

Na tej stronie

  • 11.3.1. Radio
  • 11.3.2. Warstwa łącza
  • 11.3.3. Co kamera dzieli z urządzeniem partnerskim
  • 11.3.4. Co z tego wszystkiego widzi Python
micropython-doc 0 0
Edytuj tę stronę
  1. OpenMV MicroPython /
  2. Samouczek OpenMV Cam /
  3. 11. Bluetooth /
  4. 11.3. Radio i warstwa łącza
Wyświetl źródło Otwórz w ChatGPT Otwórz w Claude Otwórz w Perplexity

11.3. Radio i warstwa łącza¶

Dwie najniższe warstwy stosu BLE są z perspektywy Pythona niemal całkowicie automatyczne – krzem radiowy oraz warstwy, które MicroPython uruchamia ponad nim, obsługują wszystko, od wyboru kanału po retransmisję utraconego pakietu. Trzy z podejmowanych przez nie decyzji nadal przebijają się do API widocznego dla użytkownika: moc, zasięg i przepustowość.

11.3.1. Radio¶

BLE używa tego samego pasma 2,4 GHz Industrial-Scientific-Medical (ISM) co Wi-Fi, kuchenki mikrofalowe i większość pozostałych technologii bezprzewodowych krótkiego zasięgu. Pasmo jest podzielone na 40 kanałów o szerokości 2 MHz.

  • Trzy z 40 kanałów są zarezerwowane na rozgłaszanie – krótkie transmisje, które ogłaszają obecność urządzenia każdemu, kto nasłuchuje. Są rozmieszczone w paśmie tak, by nasłuchujący mógł szybko przeszukać wszystkie trzy i by zakłócenie na którymkolwiek z nich raczej nie wyłączyło urządzenia całkowicie z eteru.

  • Trzydzieści siedem to kanały danych. Gdy dwa urządzenia się połączą, wymieniają na nich pakiety, przeskakując między nimi według pseudolosowej sekwencji uzgodnionej przez obie strony w momencie połączenia. Adaptacyjne przeskakiwanie częstotliwości (adaptive frequency hopping) pozwala każdej ze stron oznaczyć kanał jako zły (silne zakłócenia Wi-Fi, kuchenka mikrofalowa, sąsiednia sieć BLE), tak by sekwencja go pomijała.

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".

40 kanałów BLE w paśmie 2,4 GHz. Trzy służą do rozgłaszania, pozostałe przenoszą ruch w otwartym połączeniu.¶

Radio transmituje krótkie pakiety – najwyżej kilka milisekund długości – a w przerwach śpi. To właśnie ten sen czyni technologię niskoenergetyczną (low energy). Typowy peripheral BLE spędza znacznie poniżej jednego procenta czasu na faktycznej transmisji; przez resztę radio jest wyłączone między zaplanowanymi zdarzeniami.

11.3.2. Warstwa łącza¶

Warstwa łącza to najmniejsza jednostka BLE, która komunikuje się ze swoim odpowiednikiem na innym urządzeniu. Realizuje cztery zadania.

  • Ramkowanie pakietów. Każdy pakiet niesie krótki nagłówek (adres dostępu do kanału, długość pakietu, bity sterujące), ładunek oraz CRC. Odbiornik sprawdza CRC i odrzuca wszystko, co uszkodzone.

  • Adresowanie. Każde urządzenie BLE ma 48-bitowy adres urządzenia, który identyfikuje je w eterze. Niektóre są publiczne – identyfikator sprzętowy przypisany przez producenta, możliwy do śledzenia na zawsze. Niektóre są losowe – generowane na urządzeniu, okresowo rotowane i opcjonalnie szyfrowane, tak by podsłuchujący nie mógł powiązać dwóch transmisji z tym samym fizycznym sprzętem. Adresy pojawiają się ponownie w Rozgłaszanie i skanowanie.

  • Harmonogramowanie połączenia. Gdy dwa urządzenia się połączą, warstwa łącza harmonogramuje okresowe zdarzenia radiowe w sekwencji przeskoków – co stały interwał połączenia (connection interval) – i pakuje do każdego z nich dane zakolejkowane przez warstwę GATT powyżej. Obie strony wracają do snu między zdarzeniami. Interwał połączenia to pokrętło, o które aplikacja może poprosić (zobacz Połączenia).

  • Niezawodność. Każdy pakiet w połączeniu jest potwierdzany przez drugą stronę. Warstwa łącza retransmituje wszystko, co nie otrzymało odpowiedzi, dzięki czemu warstwy powyżej widzą uporządkowany, bezstratny strumień bajtów. W odróżnieniu od UDP – wyślij pakiet i miej nadzieję na najlepsze po stronie sieci, BLE nie ma w normalnym użyciu osobnego trybu zawodnego – każdy pakiet w otwartym połączeniu jest ponawiany, aż dotrze albo łącze zostanie uznane za utracone.

Warstwa łącza to także miejsce, w którym działa szyfrowanie, gdy para urządzeń uzgodni klucz podczas parowania (zobacz Parowanie i wiązanie). Każdy pakiet na szyfrowanym łączu jest odszyfrowywany u odbiorcy, zanim warstwy powyżej w ogóle go zobaczą.

11.3.3. Co kamera dzieli z urządzeniem partnerskim¶

Radia na obu końcach uzgadniają w momencie połączenia garść parametrów, które rządzą całą rozmową:

  • Interwał połączenia (connection interval) – jak często obie strony budzą się, by wymienić pakiety, w zakresie od 7,5 ms do 4 s.

  • Opóźnienie peripherala (peripheral latency) – ile kolejnych interwałów peripheral może pominąć, jeśli nie ma nic do powiedzenia, aby oszczędzać energię.

  • Limit czasu nadzoru (supervision timeout) – jak długo każda ze stron czeka, zanim uzna łącze za utracone, gdy druga strona milknie.

  • MTU – największy pojedynczy pakiet, jaki każda ze stron dostarczy do GATT (domyślnie 23 bajty, można negocjować w górę).

Radio i warstwa łącza razem odpowiadają za dostarczanie niezawodnych, uporządkowanych pakietów z jednego urządzenia do drugiego, utrzymując oba radia wyłączone tak długo, jak to możliwe. Każda warstwa powyżej może zachowywać się tak, jakby między dwoma punktami końcowymi istniał czysty, prywatny kanał bajtowy.

11.3.4. Co z tego wszystkiego widzi Python¶

Niemal nic. API bluetooth oraz aioble nie udostępniają kanałów, sekwencji przeskoków, CRC pakietów ani liczników retransmisji; wszystkim tym zajmuje się wnętrze portu BLE oraz radio. Elementy, które faktycznie się przebijają, to te udostępniane przez negocjację w momencie połączenia – interwał połączenia, MTU, typ adresu.

Poprzednia
11.2. Stos BLE
Następna
11.4. Rozgłaszanie i skanowanie

Dla OpenMV firmware v5.0.0 · oparty na MicroPython v1.28 · dokumentacja zbudowana 19 czerwca 2026 · Prawa autorskie © 2014-2026 OpenMV, Damien P. George i innych.

Wykonano przy użyciu Sphinx z motywem Shibuya theme.