Cube dla STM32: biblioteki dla zestawu X-Nucleo-BLE (1)
Jednym z fundamentów budowania i użytkowania urządzeń Internetu Rzeczy IoT jest transmisja bezprzewodowa. Kanały transmisyjne często wykorzystują dwa sprowadzone standardy: Wi-Fi i Bluetooth. Oba są bardzo dobrze udokumentowane, a wielu producentów oferuje gotowe moduły transceiverów z wbudowanym firmware obsługującym stosy protokołów transmisyjnych.
Przy transmisji na niewielkie odległości chętnie jest stosowany standard Bluetooth. Pierwsze wersje Bluetooth były optymalizowane do szybkiego przesyłania dużych ilości danych. Bluetooth 3.0 +HS zapewnia przepływność do 24Mb/s. Wersja 4.0 została nazwana Bluetooth Low Energy – BLE. W tym przypadku priorytetem nie były duże prędkości transmisji danych, ale maksymalne ograniczenie poboru energii przez urządzenia komunikujące się za pomocą standardu BLE.
BLE korzysta z pasma ISM 2,4GHz podzielonego na 40 kanałów o szerokości 2MHz. Kanały są logicznie podzielone na 2 grupy: 3 kanały advertising i 37 kanałów data. Kanały data są wykorzystywane do dwukierunkowej transmisji danych pomiędzy urządzeniami w sieci. Kanały advertising biorą udział w procesie wyszukiwania urządzeń BLE znajdujących się w pobliżu, a potem w nawiązywaniu połączenia pomiędzy nimi.
Komunikacja w sieci BLE zaczyna się od rozgłaszania przez węzeł sieci (advertiser), że oczekuje na połączenia. Węzły sieci scanners odbierające komunikat żądanie na połączenie wysyłają komunikat z żądaniem połączenia connection request. Ten komunikat musi zawierać dane niezbędne do zestawienia połączenia. Jeżeli połączenie zostanie nawiązane, to węzeł scanners staje się węzłem master, a węzeł rozgłaszający advertiser węzłem slave. Tworzy się w ten sposób podsieć pracująca w topologii gwiazdy, gdzie jest jeden master, mogący komunikować się z jednym lub więcej węzłów slave. Urządzenie pracujące jako węzeł master nazywane jest Central Device, a urządzenia slave Pheriperial Device – rysunek 1. Central Device to najczęściej komputer, smartfon, tablet itp.
Rys. 1. Podsieć BLE o topologii gwiazdy
Transmisję zawsze inicjuje węzeł master. Węzeł slave musi na przesłać w odpowiedzi informację zwrotną. Po nadaniu jednego pakietu danych musi minąć co najmniej 150 usek (IFS Inter Frame Space). Każdy z pakietów może zawierać wskaźnik MD (More Data) sygnalizujący konieczność przesłania kolejnych danych.
Protokół BLE ma budowę warstwową i składa się z warstwy fizycznej physical layer, warstwy łącza danych link layer, oraz warstwy HCI (Host Controller Interface). W warstwach wyższych jest umieszczony GATT (Generic Attribute Profile) i GAP (Generic Access Profile).
Rys. 2. Budowa stosu BLE
Struktura danych jest podzielona na: charakterystyki, serwisy i profile. Charakterystyki to najmniejsza „porcja” danych, serwis to zbór charakterystyk połączony logiczną zależnością, a profil to predefiniowana kolekcja charakterystyk. Profile są zatwierdzane przez Bluetooth SIG.
Warstwa GATT jest zbudowana w oparciu o protokół Atrribute Protocol (ATT), który wykorzystuje dane GATT do określenia sposobu w jaki dwa urządzenia BLE wysyłają i odbierają standardowe wiadomości. GATT jest zbudowany w oparciu o role klienta i serwera.
Układy Peripherial są serwerami GATT (maja zapisane definicje charakterystyk i serwisów) , a układ Central pełni rolę klienta, bo wysyła żądania do serwera. W specyfikacji GATT jest opisanych wiele profili w tym na przykład pomiar ciśnienia krwi, monitorowania poziomu glukozy, mierzenia rytmu serca, pomiaru temperatury ciała itp.
Moduł BLE X-Nucleo-IDB05A1
Płytka ewaluacyjna X-Nucleo-IDB05A1 jest wykonana zgodnie ze standardem Arduino R3 i współpracuje z firmowymi modułami STM z serii Nucleo (fotografia 4) . Podstawowym elementem jest moduł Bluetooth Low Energy SPBLE-RF SPBLE-RF (fotografia 5) z wbudowanym procesorem BlueNRG-MS komunikującym się z hostem przez szybki interfejs SPI.
Fot. 4. Płytka BLE X-Nucleo-IDB05A1 połączona z modułem Nucleo-F401RE
Fot. 5. Moduł Bluetooth Low Energy SPBLE-RF SPBLE-RF
Połączenia przez BLE z zestawu pokazanego na fotografii 4 można szybko przetestować dzięki udostępnieniu przez STM programów demonstracyjnych X-CUBE-BLE1. Zaczynamy od wejścia na stronę www.st.com/x-nucleo i wybraniu modułu X-Nucleo-IDB05A1, jak to zostało pokazane na rysunku 6.
Rys. 6. Wybór typu modułu w wyszukiwarce www.st.com
Po wybraniu modułu trzeba pobrać ze strony spakowany program demonstracyjny en.X-Cube-BLE1. Po rozpakowaniu możemy korzystać z programów demonstracyjnych z gotowymi projektami dla środowisk projektowych:
- IDE Keil uVision
- IAR EWARM
- AC6
Oprócz tego dla każdego z przykładów mamy do dyspozycji gotowe skompilowane pliki wynikowe. Można skorzystać z zamieszczonych plików wynikowych, lub otworzyć projekty w wybranym środowisku IDE i ewentualnie je modyfikować do własnych potrzeb. Niestety nie ma tu projektów dla Atollic True Studio for STM32. Próby szybkiej konwersji projektów za pomocą narzędzia Open Project from File System się nie powiodły. Przekonwertowany projekt dla AC6 opartego o Eclipse, nie dawał się kompilować , a projekt dla EWARM nie działał po skompilowaniu. Być może potrzebne były niewielkie poprawki, ale ja poprzestałem tylko na sprawdzeniu konwersji bez modyfikacji projektów. W czasie testów korzystałem z gotowych plików wynikowych.
Na rysunku 7 pokazano schematycznie proces pobierania i uruchamiania programów demonstracyjnych.
Tomasz Jabłoński