Upload
bartosz-reichel
View
279
Download
3
Embed Size (px)
Citation preview
Przegląd rozwiązań Bluetooth Low Energy w kontekście oprogramowania.
Bartosz ReichelinfoShare
Gdańsk 2015.06.11
Agenda
● Wprowadzenie do BT-LE● Hardware Y
● Software a
● Porównanie możliwości dwóch systemów pod względem API, wstawki sprzętowe.
BLE – kilka słów wprowadzenia
● Info związane z wersjami BT oraz wsparciem● BLE = Bluetooth 4.0, 4.1, 4.2, ...
UWAGA: To, że urządzenie jest zgodne z którąś z wersji nie oznacza, że system operacyjny obsługuje (posiada sterowniki) dla danego „chipsetu”. Niestety taką praktykęReklamy można było spotkać w tańszym sprzęcie pod obsługą systemu Android !!!
Y
Skanowanie
● startLeScan● startLeScan z UUID –
problemy ze stabilnością
● BluetoothLeScanner● ScanCallback/ScanFil
ter
● BluetoothLEAdvertisementWatcher
a
Gdzie jest UUID, czym jest ?
● Struktura podzielona na (Generic Attribute Profile (GATT))
– Serwisy
– Charakterystyki
● UUID może być reprezentowane w pełni, jako 128 bitowa liczba lub jak notacja skrócona (standardowe serwisy określone przez SIG).
a
w odpowiedzi uzyskujemy
● device
● rssi
● ScanRecord
-------------- (New API)
● getTimestampNanos
● getDevice
● getRssi
● getScanRecord
● BluetoothLEAdvertisementReceivedEventArgs
● Advertisement
● AdvertisementType
● BluetoothAddress
● DeviceId
● Timestamp
● RawSignalStrengthInDBm
a
Opcje dodatkowe (filtrowania)
API (filtry) zbudowane w konwencji fluent interface
● new ScanFilter.Builder()
.setRssiRange(-75, 0)
.setServiceUuid(
new ParcelUuid(
UUID.fromString("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"))
)
.build();
● InRangeThresholdInDBm/OutOfRangeThresholdInDBm
● OutOfRangeTimeout
● BluetoothLEScanningMode(Active/Passive)
a
Skanowanie „oszczędne” - w tle
BluetoothLeScanner scanner = getBluetoothAdapter().getBluetoothLeScanner();
ScanSettings settings = new ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_LOW_POWER)).build();
List<ScanFilter> filters = new ArrayList<ScanFilter>();
scanner.startScan(filters, settings, myCallbackMethod);
● BluetoothLEAdvertisementWatcherTrigger
● BackgroundTaskBuilder
● Podejście w aplikacjach windows (WinRT) bazuje na ogólnym rozwiązaniu z użyciem zadań działających w tle (obsługiwane przez system, wymaga utworzenia biblioteki zewnętrznej)
a
RSSI – Proximity ?!
Ogólnie, bajt typu, bajt rozmiaru, dane. Nagłówek zajmuje 2 bajty, czyli maksymalnie przesłać naraz można 29 bajtów.
W tym przypadku - pierwsza flaga oznacza jak jest postrzegane urządzenie (w tym przypadku LE Limited discoverable oraz nieobsługiwane Basic Rate/Enhanced Data Rate – BR/EDR)- druga o długości 26 bajtów, zawiera nagłówek iBeacon:● 4 bajty prefix: Company: 0x4C00, Type: 0x02, Długość danych: 0x15 (21)● GUID/UUID: 0xF7826DA64FA24E988024BC5B71E0893E● Major: 0x792E● Minor: 0xFA06● TX Power: 0xB3 (-77dBm) UWAGA: TX_POWER >= RSSI, ale tu TXPower w sensie zmierzonego RSSI w odległości
1m
a
Struktura serwisów dla „Proximity”*
● Link Loss Service● Immediate Alert Service● Tx Power Service
● Określenie czasów nadawania dla pakietów advertising.
* BLUETOOTH SPECIFICATION Proximity Profilea
Wyliczanie odległości na podstawie RSSI
0 20 40 60 80 100 120 140 160 180 20040
45
50
55
60
65
70
75
80
85
90
FSPL=20log10(d )+20log10( f )−147.55
Y
● Zatem jeśli telefon ma czułość na poziomie -80dBm a nadajnik nadaje z mocą 0dBm (np.. domyślne dla Nordic) to otrzymujemy 80dBm co daje nam w przybliżeniu teoretyczny zasięg 100m
● Niestety, jest on teoretyczny. Zależy od jakości układu antenowego, w jaki sposób użytkownik trzyma telefon, pomieszczenia, …
● Im dalej (okolice 40dBm na wykresie, tym krzywa jest bardziej płaska – błąd, niewielkie zmiany RSSI a duże odległości).
Y
Połączenie - rodzaje
● connectGatt, opcja autoConnect – nie zawsze stabilna
● createBond (BLUETOOTH_ADMIN) - parowanie, możliwe do przeprowadzenia w sekcji urządzeń bluetooth
● Potrzeba utworzenia więzów w systemie (Device Manager), na tym etapie przeprowadzony jest etap parowania urządzeń
a
Indication .vs. notification
● Wymaga potwierdzenia, Handle Value Confirmation
● Lepszy do buforowania większej ilości danych
● Otrzymanie danych
UWAGA: CLIENT CHARACTERISTIC CONFIGURATION = CCCWpisywane do deskryptora charakterystyki odpowiedniej wartości pozwala na otzrymywanie powiadomień
https://android.googlesource.com/platform/external/bluetooth/bluedroid/+/jb-mr2-dev/btif/src/btif_gatt_server.c case BTIF_GATTS_SEND_INDICATION: BTA_GATTS_HandleValueIndication(p_cb->conn_id, p_cb->attr_handle, p_cb->len, p_cb->value, p_cb->confirm); // TODO: Might need to send an ACK if handle value indication is // invoked without need for confirmation.
a
Urządzenia mobilne jako nadające („beacon”)
● BluetoothLeAdvertiser ● BluetoothLEAdvertisementPublisher
a
Oczywiście istnieją opcje podpinania urządzeń powodujących, że urządzenie mobilne może stać się urządzeniem nadającym, jednak tu chodzi o gotowe rozwiązania.
Android Windows
Własny pakiet rozgłoszeniowy
tak ograniczenia*
Moc nadawania (TX Power) skokowa brak
Częstotliwość nadawania skokowa brak
Możliwość połączenia tak tak
Możliwość zbierania danych wracających (callback)
tak brak (?)
* - teoretycznie, API zezwala na ustawienie ale traktuje je jako wartości zabronione. The following advertisement types are system-reserved and are not allowed. Co jest, w niektórych przypadkach, bardzo dużym ograniczeniem (np. name !!).
a
Urządzenia zewnętrzne
● To tylko krótki przegląd, czego możemy obecnie spodziewać się na rynku. Mowa tu o najprostszych urządzeniach (najczęściej z nich kojarzone to beacony)
Firma architektura Stos (wersja BT)
Dodatkowy stos
Inne
Texas Instruments
8051/ARM Cortex M3
4.1
Qualcom (dawniej CSR)
ARM Cortex M0+
4.2
Nordic ARM Cortex M0+
4.1 ANT+
CSEM SoC 4.1 0.9V
Y
Nadawanie – najlepiej w nieskończoność
● Najważniejsze parametry nadawania
– Moc nadawania (nie mylić z TX Power znajdującym się w nagłówku rozgłoszeniowym w niektórych protokołach). Ograniczenia prawne na pasmo ISM 10mW.
– Częstotliwość wysyłania pakietów (tak aby użytkownik zdążył je zobaczyć)
– Długość pakietu (maksymalnie 31 bajtów)● Energia (Klasyczna „bateria”, Energy Harvesting –
odzyskiwanie energii)
Ya
Porównanie dla kilku wybranych parametrów
Ya Wyniki dla optymistycznego wariantu, pomór mocy tylko przy wysyłaniu 50uJ, 0dBm
CR2032
CR2477
CR123
0,2 79,2 416,7 625
0,5 31,7 166,7 250
1 15,8 83,3 125
2 7,9 41,7 62,5
4 4 20,8 31,3
6 2,6 13,9 20,8
8 2 10,4 15,6
10 1,6 8,3 12,5
Wnioski - System
● Częste przebudowy „API”
● Dużo błędów (krytyka samego stosu)
● Niestabilność samego systemu w kontekście BT.
● Nadal wersja „testowa”
● Wiele elementów niejasnych, niedziałających.
● Duże ograniczenia dla nadawania.
● W obecnej chwili wsparcie tylko dla WinRT (częściowe dla innych platform ale ADV tylko dla WinRT)
a
Wnioski - BLE
● BLE na pewno przyszłościowe rozwiązanie.
● Obecnie oczekiwania (pomysły) przerastają możliwości BLE. Oczekiwania na kolejne wersje stosu.
● IoT – rozwój samych procesorów/mikrokontrolerów pokazuje, że dziś „rzeczy” nie należy utożsamiać z układami o niewielkiej mocy obliczeniowej a rozwiązaniami, które naprawdę mogą dużo (np. ARM Cortex M3), pozostając nadal na podobnym zużyciu energii.
● Coraz więcej firm wspiera ogólnie radio na pasmie 2.4GHz. Twórcom systemu operacyjnego pozostanie wspieranie danego stosu (niestety nie wszystkie są darmowe).
Y