W poprzedniej części kursu zajęliśmy się sterowaniem LED-ami naszej płytki deweloperskiej. Dziś dodamy możliwość ustawiania przez smartfon parametrów ich świecenia. Zaprezentujemy również trochę teorii dotyczącej Bluetooth Low Energy.
Bluetooth LE
Na płytce nRF5340DK mamy zamontowany SoC nRF5340, który zawiera dwa procesory Arm® Cortex®-M33: jeden aplikacyjny i jeden sieciowy. Do tej pory działaliśmy na procesorze aplikacyjnym, a teraz zaprzęgniemy procesor sieciowy do obsługi stosu protokołu Bluetooth Low Energy (Bluetooth LE, kolokwialnie BLE).
Bluetooth LE różni się zasadniczo od klasycznego Bluetooth. Powstał w odpowiedzi na rosnące zapotrzebowanie na technologie bezprzewodowe o niskim zużyciu energii, szczególnie w aplikacjach IoT, urządzeniach noszonych (wearables), czujnikach i innych urządzeniach o małej mocy. Tradycyjny Bluetooth (BR/EDR) nie był zoptymalizowany pod kątem energooszczędności, co ograniczało jego zastosowanie w takich aplikacjach. BLE ma, co prawda, mniejszy transfer danych (do 1,4 Mbps), ale oferuje dłuższy czas pracy na baterii.
Ponadto Bluetooth LE – poza połączeniami Point-to-Point – potrafi pracować w topologiach Broadcast i Mesh. Pozwala to budować urządzenia, które po prostu rozgłaszają dane, a nawet budować całe sieci urządzeń oparte na BLE.
Tradycyjny Bluetooth i BLE nie są ze sobą kompatybilne. Ponieważ nRF5340 wspiera jedynie Bluetooth LE, do sterowania naszą płytką jest wymagany smartfon lub tablet wspierający tę technologię. Większość urządzeń wyprodukowanych po 2011 roku powinno to wsparcie oferować.
Przedstawimy teraz nieco podstawowych pojęć związanych z BLE. Nie są one kluczowe dla naszego celu, ale powinny znacząco ułatwić zgłębianie tematu i czytanie dokumentacji.
Urządzenia BLE pracują z reguły w jednej z dwóch ról: Central lub Peripheral.
Central skanuje i inicjuje połączenia z urządzeniami typu Peripheral. Pełni funkcję hosta, odpowiada za typowe zadania tej roli, takie jak nawiązywanie połączeń i zarządzanie nimi oraz przetwarzanie danych. W naszym przypadku smartfon będzie pracował w tym trybie.
Peripheral to urządzenie, które rozgłasza swoje dane, umożliwia nawiązanie połączenia oraz udostępnia jeden lub więcej serwisów (Service). Pełni funkcję serwera. Urządzenia IoT o ograniczonych zasobach, które wymagają niskiego zużycia energii, zazwyczaj odgrywają właśnie tę rolę – w tym kursie funkcję Peripheral będzie pełniła nasza płytka deweloperska.
W przypadku pracy rozgłoszeniowej (Broadcast oriented) role są podobne: zamiast Peripheral mamy Broadcaster, a zamiast Central jest Observer, z tą różnicą, że pierwszy nie udostępnia, a drugi nie nawiązuje połączenia.
Jedno urządzenie może jednocześnie pełnić więcej niż jedną funkcję: udostępniać dane więcej niż jednemu urządzeniu Central i odbierać dane z wielu urządzeń typu Peripheral.
Wymiana danych w BLE odbywa się w ramach Serwisów i Charakterystyk.
Charakterystyka (Characteristic) to podstawowy fragment informacji/danych, który serwer (Peripheral) udostępnia klientowi (Central). Charakterystyka jest zawsze częścią serwisu. W naszym przypadku będzie to parametr pracy LED-a.
Serwis (Service) to po prostu grupa charakterystyk. Z reguły łączą się one w logiczną całość – np. temperatura, wilgotność i jakość powietrza. My utworzymy jeden serwis związany ze sterowaniem LED-em.
W poprzednim odcinku…
…stworzyliśmy aplikację, w której mogliśmy włączać, wyłączać oraz migać diodą naszej płytki deweloperskiej nRF5340-DK za pomocą przycisków.