Cube dla STM32: biblioteki dla zestawu X-Nucleo-BLE (2)

 Pierwsza część artykułu jest dostępna pod adresem.

Oprogramowanie demonstracyjne bazuje na warstwie abstrakcji sprzętu STM32CubeHAL dla mikrokontrolerów STM32 – rysunek 8. Aplikacja wykorzystuje oprócz tego pakiet wsparcia BSP (Board Support Package) dla płytki Nucleo, oraz dla płytki rozszerzenia BlueNRG/BlueNRG-MS. Zastosowany tu procesor BLE BlueNRG-MS charakteryzuje się bardzo małym poborem mocy, a jego firmware jest zgodne ze specyfikacją Bluetooth 4.0/4.1. Warstwa sterowników (Drivers) zapewnia komponentom warstw wyższych (Middleware) dostęp do urządzenia BlueNRG-MS niezależnie od szczegółów sprzętowych. Inaczej mówiąc warstwy wyższe nie muszą znać budowy i szczegółów sterowania procesora BLE. Middleware Low Power Manager optymalizuje pobór mocy.

Rys. 8. Model warstwowy oprogramowania demonstracyjnego

Pakiet oprogramowania zawiera szereg przykładowych aplikacji. Kiedy testowany układ pełni rolę układu peryferyjnego (peripherial device – slave), to wspierana jest obsługa profili specyfikacji GATT:

  • Alert Notification Client
  • Blood Pressure Sensor
  • Find Me Locaqtor
  • Find Me Target
  • Glucose Sensor
  • Health Thermomenter
  • Heart Rate
  • Human Interface Device
  • Phone Alert Client
  • Proximity Monitor
  • Proximity reporter
  • Timer Server

W przypadku pełnienia roli układu centralnego (Central Device – Master) wpierana jest obsługa profili:

  • Alert Notification Client
  • Blood Pressure Collector
  • Find Me locator
  • Glucose Collector
  • Health Thermometer Collector
  • Heart Rate Collector
  • Time Client

Do testowanie działania łącza BLE będzie potrzebna płytka BLE X-Nucleo-IDB05A1 połączona z modułem Nucleo F-401RE, oraz smartfon z pobraną i zainstalowaną aplikacją STM32 BLE Profiles.

Wszystkie programy demonstracyjne obsługujące profile peripherial device symulują dane z czujników zewnętrznych. Z oczywistych względów trudno byłoby testować rzeczywiste pomiary takich parametrów jak poziom glukozy czy ciśnienie krwi.

Tak jest też w przypadku pierwszego wykonywanego testu symulującego pomiar stężenia glukozy we krwi. Test zaczynamy od zaprogramowania mikrokontrolera w module Nucleo-F401RE plikiem wynikowym ProfPerip.GlucoseSensor_F401RE.bin umieszczonym w katalogu Projects/Multi_Applications-Profiles_LowPower/Binary/STM32F401RE_Nucleo. Do programowania pamięci można użyć programu STM32CubeProgrammer. Po podłączeniu modułu do komputera przez złącze USB trzeba kliknąć na przycisk Connect w oknie ST_LINK. W oknie ST-LINK configuration zaznaczamy opcję SWD – rysunek 9.

Rys. 9. Okno obsługi ST-LINK programu STM32CubeProgrammer

Po kliknięciu na Connect następuje połączenie z układem programatora/debuggera na płytce Nucleo i można przejść do programowania. Najpierw wybieramy plik binarny (lub w formacie .hex) i po jego otwarciu klikamy na Start Programmingrysunek 10.

Rys. 10. Programowanie za pomocą STM32CubeProgrammer

Po zaprogramowaniu mikrokontrolera trzeba uruchomić aplikację STM32 BLE Profiles na smartfonie z aktywnym łączem Bluetooth. Aplikacja jest dostępna bezpłatnie w sklepie Google Play (dla systemu Android). Jeżeli Bluetooth nie jest aktywny, to aplikacja poprosi o jego włączenie.

Po nawiązaniu łączności pomiędzy urządzeniem centralnym (smartfon), a urządzeniem peryferyjnym (płytka) aplikacja STM32 BLE Profiles zgłasza wykrycie profilu. Jak wspominałem w naszym przypadku będzie to pomiar poziomu glukozy – fotografia 11.

Fot. 11. Ekran smartfona z wykrytym profilem BLE

Na ekranie są wyświetlane:

  • Nazwa układu peryferyjnego: GlucoseSensor
  • Poziom sygnału radiowego – 74dB
  • Adres
  • Status połączenia – connected
  • Nazwa profilu = Glucose.

Można tez tu rozłączyć połączenie dotykając ikony Disconnect i ponownie je nawiązać naciskając Connect. Po naciśnięciu na nazwę profilu (Glucose) aplikacja przechodzi do wyświetlania symulowanego pomiaru tak jak to zostało pokazane fotografii 12. Jak już wiemy dane o poziomie glukozy są zapisane w programie demonstracyjnym. Mamy tu wartość pomiaru (152mol/L), datę i godzinę pomiaru, oraz miejsce pobrania próbki (z palca). W dolnej części ekranu są wyświetlane właściwości profilu.

Fot. 12. Ekran z wyświetlanymi symulowanymi danymi pomiarowymi

Po wgraniu plików wynikowych ze skompilowanych projektów można przetestować działanie połączenia i symulacji przesyłania danych z kolejnych czujników. Na fotografii 13 pokazano ekran z pomiarem tętna z czujnikiem umieszczonym na ręce.

Rys. 13. Symulacja pomiaru tętna

Zmiany tętna są pokazywane w formie graficznej na wykresie. Kolejny przykład, to pomiar ciśnienia pokazany na fotografii 14.

Rys. 14. Symulowany pomiar ciśnienia tętniczego

W analogiczny sposób sprawdziłem wszystkie programy demonstracyjne z katalogu Projects/Multi_Applications-Profiles_LowPower/Binary/STM32F401RE_Nucleo.

Programów demonstracyjnych jest dużo więcej. Można testować miedzy innymi aplikacje z katalogu SampleAppThT. Potrzebne są dwa zestawy płytek BLE X-Nucleo-IDB05A1 połączonych z modułem Nucleo-F401RE. Jeden jest skonfigurowany jako central, a drugi jako Peripherial. Naciśnięcie przycisku User na jednym z modułów zapala i gasi diodę LED na drugim z modułów ( i vice versa). Doświadczenia z przeprowadzonych testów pozwalają sadzić, że pozostałe tez będą działać poprawnie.

Przykładowe, działające programy z projektami zawierającymi kompletne pliki źródłowe mogą być doskonałą bazą do opracowywania własnych projektów. Dołączenie czujników mierzących rzeczywiste parametry pozwala na błyskawiczne tworzenie użytecznych aplikacji użytkownika przy minimalnym nakładzie pracy własnej.

Tomasz Jabłoński

O autorze

Absolwent Wydziału Elektroniki Politechniki Wrocławskiej, współpracownik miesięcznika Elektronika Praktyczna, autor książek o mikrokontrolerach Microchip i wyświetlaczach graficznych, wydanych nakładem Wydawnictwa BTC.
Zawodowo zajmuje się projektowaniem zaawansowanych systemów mikroprocesorowych.