Bluetooth LE dla Xamarin.Forms. Kontrolowanie obiektów z poziomu aplikacji mobilnej

Pierwsze podejście do programowania miałem w podstawówce. Podczas lekcji informatyki nawigowaliśmy małego żółwia w Logo, co okazało się być bardzo satysfakcjonujące. Wtedy zacząłem fascynować się programowaniem. Kto by pomyślał, że w przyszłości stworzę aplikację wykorzystującą Bluetooth LE do kontrolowania prawdziwych rzeczy takich jak roboty?

Tomasz Kuźniar. Mobile Developer w firmie ServoCode i Cervi Robotics. Zna każdy zakątek platformy Xamarin, Unity 3D, a C# nie ma przed nim tajemnic. Po pracy pozostaje przy biurku i zamienia się w producenta muzycznego.


Podstawy protokołu Bluetooth LE

Dobra, koniec nostalgii, bierzemy się do roboty. Protokołu Bluetooth LE używamy do komunikacji pomiędzy dwoma urządzeniami. Każde z nich może przyjmować jedną z następujących ról:

  • GATT Client
  • GATT Server


Ta konstrukcja jest bardzo podobna do tradycyjnej architektury Klient-Serwer. Zanim na dobre zatopimy się w kodzie, musisz poznać kilka przydatnych definicji:

Serwisy — dostarczane funkcje i powiązane zachowania stworzone by wchodzić w integracje z Klientem. Każda usługa zawiera zbiór charakterystyk. Pamiętaj, najpierw serwisy, potem charakterystyki!

Charakterystyki — definicja danych podzielonych na wartość i deklarację. Występują w kilku trybach: read, write, notify, indicate.

Deskryptor opcjonalny atrybut, który zawiera dane na temat konkretnej wartości i sposobach dotarcia do niej. Znajduje się w charakterystykach.

UUID Unikalne ID urządzenia. W ten sposób Klient może przekazywać informację na temat serwisów, które dostarcza, do centralnego urządzenia.

 

Bluetooth LE: Schemat Klient – Serwer

Uwaga! Nie możesz opuścić tej strony, jeśli nie zapamiętasz trzech ważnych rzeczy:

  • Możesz połączyć Klienta Bluetooth LE tylko z jednym centralnym urządzeniem w danym momencie.
  • Klient musi uzyskać pozwolenie od serwera aby wysłać dane.
  • Serwer uruchamia operacje Notifications i Indications za każdym razem, gdy wartość w bazie danych zmienia się.

Zanotowane? Dobra, lecimy dalej!

Aplikacja Xamarin.Forms jako Klient GATT

Do komunikacji wieloplatformowej aplikacji z Bluetooth LE w użyjemy biblioteki ACR Reactive BluetoothLE Plugin. Znajdziesz ją tutajPaczkę instalujemy do każdego projektu. (Core, Android, iOS)

Android setup

W Androidzie dodajemy permissions do AndroidManifest.xml. Pamiętajmy jednak, że w przypadku Androida od wersji 6 w górę należy poprosić użytkownika o uprawnienia podczas działania aplikacji. Przyda się tutaj wtyczka PermissionPlugin dostępna w tym miejscu

iOS setup

W przypadku iOS’a, dodaj następujące klucze do pliku Info.plist:

Wyszukiwanie urządzeń

Aby wyszukać urządzenia w pobliżu wykorzystujemy adapter z ACR Reactive BluetoothLE Plugin, który posiada następujące metody:

Istnieje możliwość podpięcia eventa, który poinformuje nas o znalezieniu urządzenia:

_adapter.ScanForUniqueDevices().Subscribe(device => DeviceDiscovered(device));

Połączenie z urządzeniem

Przed połączeniem z urządzeniem możemy podpiąć się pod eventy m.in: Device.

Pozwolą nam one monitorowanie połączenia z urządzeniem, a także znalezienie potrzebnych do komunikacji charakterystyk.

Rozłączenie z urządzeniem

Następuje po wykonaniu następującego kodu:

Komunikacja

ODBIERANIE DANYCH

var result = await characteristic.Read(); // use result.Data to see response

WYSYŁANIE DANYCH

await characteristic.Write(bytes);

NASŁUCHIWANIE NOTYFIKACJI

Teraz wiesz, jak stworzyć swoją armię robotów sterowanych smartfonem, która…, znaczy nabyłeś nową umiejętność z zakresu IoT! 😉

Zobacz także: GitLAb Continuous Integration dla Xamarin.Forms.


Artykuł został pierwotnie opublikowany na servocode.com. Zdjęcie główne artykułu pochodzi z unsplash.com.

Patronujemy

 
 
Polecamy
Xamarin.Forms czy Xamarin Native? Moja pierwsza aplikacja