Technologia Bluetooth Low Energy w...
Transcript of Technologia Bluetooth Low Energy w...
Technologia
Bluetooth Low Energy
w Delphi
WITAM! Mateusz Gancarczyk
[email protected] www.mattpro.pl
Pierwsze PCB i zamruganie diodą LED – 2008 rok Delphi od 2009 roku
Pierwsza aplikacja mobilna - 2014 rok.
Plan prezentacji
1. O technologii Bluetooth Low Energy
2. Beacon - Smart Flower Pot
3. Urządzenie Bluetooth Low Energy – Led Conroller
4. Podsumowanie
1. O technologii Bluetooth LE
1. Wersje standardów 2. Warstwa fizyczna 3. GAP – Generic Access Profile 4. GATT - Generic Attribute Profile 5. Kilka słów o Bluetooth 5
Wersje standardu
Bluetooth Clasic 1.0., 2.0, 3.0 …
Bluetooth 5
Bluetooth Low Energy
4.0, 4.1, 4.2
Bluetooth Low Energy Wersje standardu - porównanie
Specyfikacja
techniczna Bluetooth Classic
Bluetooth
Low Energy Bluetooth 5
Zasięg 100 m >100 m ~1km
Prędkość transmisji 1–3 Mbit/s 1 Mbit/s 125kbs-2Mbit/s
Przepustowość 0,7–40 Mbit/s 0,27 Mbit/s 1,4 Mbit/s
Opóźnienie ~100 ms 6 ms 6 ms
Minimalny czas do
wysłania ramki 100 ms 3 ms 3 ms
Bluetooth Low Energy Warstwa fizyczna
Rodzaje urządzeń: 1) Peripheral 2) Central
Bluetooth Low Energy Rodzaje urządzeń
Każde peripheral posiada unikalny 6 bajtowy MAC Address Periodyczne wysyłanie do 31 bajtów danych Scan response – na żądanie centrali
Bluetooth Low Energy Advertising
Tryb advertising – wysłanie danych do nieograniczonej ilości urządzeń typu
central będących w zasięgu.
Bluetooth Low Energy Broadcasting
Charakterystyki – pojedyncze dane.
Serwisy – logiczny zbiór charakterystyk.
Profile – predefiniowanie kolekcje serwisów i charakterystyk zatwierdzone przez Bluetooth SIG.
Bluetooth Low Energy Profile, serwisy i charakterystyki
Kontroluje connections i advertising in Bluetooth LE, Determinuje jak dwa urządzenia oddziałowują między sobą.
Bluetooth Low Energy Profil GAP – Generic Access Profile
Definiuje sposób w jaki dwa połączone ze sobą urządzenia (central i peripheral )
przesyłają dane używając koncepcji serwisów i charakterystyk.
W jednym czasie peripheral może połączyć się tylko z jednym urządzeniem typu central ( połączenie wiąże się ze zatrzymaniem advertisingu ).
Urządzenie typu central może w jednym czasie połączyć się z wieloma peripheral.
Bluetooth Low Energy Profil GATT - Generic Attribute Profile
Peripheral – GATT Server ( trzyma definicje charakterystyk i serwisów ) Central – GATT Client ( wysyła żądania do serwera ) W Peripheral zapisany jest tz. - Connection Interval
Bluetooth Low Energy Profil GATT – architektura client/server
Bluetooth Low Energy Bluetooth Mesh
Bluetooth Low Energy Bluetooth 5
Dwa typy advertisingu: 1) Cała ramka na kanałach advertisingu 2) Header na kanałach advertisingu a reszta na jednym kanale
Platforma Wsparcie od wersji
Windows 8+ (10+)
OS X 10.7+
iOS 5+
Android 4.3+
Bluetooth Low Energy Wsparcie Bluetooth LE
2. Beacon - Smart Flower Pot
1. Opis urządzenia 2. Opis działania – format Eddystone 3. Implementacja: 3.1 Android Studio – Java 3.2 Delphi ( Android Firemonkey )
Tryb tylko advertising - analogia z latarnią morską.
Wykrywanie odległości za pomocą pomiaru RSSI ( ref 1 m ).
Różne typy Eddystone, iBeacon, altBeacon.
Identyfikator: UUID, Major, Minor (iBeacon)
Beacony
Pomiar wilgotności ziemi w doniczce,
Pomiar temperatury ziemi,
Pomiar temperatury powietrza,
Pomiar nasłonecznienia,
Zasilanie z baterii CR2032 ( 230mAh ),
Czas działania na baterii 2 lata ( pomiar i
wysłanie danych co 10 sekund ),
Mikrokontroler nRF52832
Smart Flower Pot Opis urządzenia
Smart Flower Pot Opis urządzenia
Bluetooth LE beacon profile
UUID – 0xFEAA
4 rodzaje ramek:
Format beacon - Eddystone
Nazwa ramki Opis
UID Wysyła stałe ID – pomiar odległości.
EID Wysyła kodowane, zmienne ID.
URL Wysyła adres URL.
TLM Wysyła dane telemetryczne – temperatura, napięcie
baterii, licznik ramek.
Ramka TLM - oryginalna
Format beacon - Eddystone
Numer bajtu Opis
0 Typ ramki – TLM – 0x20
1 Wersja
2, 3 Napięcie na baterii w mV
4, 5 Temperatura
6, 7, 8, 9 Licznik
10, 11, 12, 13 Czas od włączenia
Ramka TLM – Smart Flower Pot
Numer bajtu Opis
0 Typ ramki – TLM – 0x20
1, 2, 3 Kod – 0xDE2981
4, 5 Temperatura doniczki w oC
6, 7 Temperatura powietrza w oC
8 Nawodnienie w %
9 Nasłonecznienie w %
10 Stan baterii w %
Implementacja
Android Studio Aplikacja wyświetlająca dane z
beacon’ów Smart Flower Pot
Place your screenshot here
Implementacja Android Studio – struktura projektu
Adapter widoku do ListView
„Dane” – „Widok”
Definicja klasy
SmartFlowerPot
Główny plik
Layout elementu ListView
Layout główny
Android manifest
SmartFlowerPot Scaner
Demo Android Studio
Implementacja
Firemonkey Aplikacja wyświetlająca dane z
beacon’ów Smart Flower Pot
Place your screenshot here
Implementacja Firemonkey
Komponent TBeacon
Implementacja Typ generyczny - słownik
Deklarowanie:
SmartFlowerPotDeviceList: TDictionary<String, TSmartFlowerPot>;
procedure TForm1.FormCreate(Sender: TObject);
begin
SmartFlowerPotDeviceList := TDictionary<String, TSmartFlowerPot>.Create;
end;
Inicjalizacja:
Operacje:
SmartFlowerPotDeviceList.ContainsKey(ABeacon.DeviceIdentifier));
SmartFlowerPotDeviceList.AddOrSetValue(ABeacon.DeviceIdentifier, currentBeacon);
SmartFlowerPot := SmartFlowerPotDeviceList.Items[ABeacon.DeviceIdentifier];
Implementacja Klasa TSmartFlowerPot
function TSmartFlowerPot.getTemp( const data :array of
byte ): real;
var
temp: real;
tempWord: word;
begin
tempWord := Word(( ((Word(data[1]) and $FF ) shl 8 ) or
((Word(data[2]) and $FF ) ) ) );
temp := tempWord / 10. ;
result := temp;
end;
Implementacja Desing i projektant ListView
Toolbar
ListView
SmartFlowerPot Scaner
Demo Firemonkey
Dalszy rozwój projektu
Aplikacja działająca w tle + powiadomienia
Wysyłanie wyników do chmury – strona WWW z danymi pomiarowymi z doniczek –
Raspberry Pi 3 jako koncentrator danych.
Beacony Dlaczego Low Power?
Czas potrzebny na wysłanie = 2,2 ms
Prąd potrzebny na wysłanie = 10mA
Czas w uśpieniu = 10 s
Prąd w uśpieniu = 7,9 uA
_____________________________
Średni prąd = 11,6 uA
Bateria CR2032 = 230mAh
Life Time = 0,8*230mAh /0,06 uA
= 2 lata!
Zmierz jak najszybciej
~ 900μs
Wyślij jak najszybciej
~2,2ms
Idź spać ;)
10 s
Beacony w górnictwie
Pomiar temperatury noża podczas urabiania
3. Urządzenie BLE – Led Conroller
1. Opis urządzenia 2. Opis działania 3. Implementacja: 3.1 Android Studio – Java 3.2 Delphi ( Android Firemonkey )
Sterowanie diodami LED typu WS2812,
WS2811, SK6812…
Zasilanie z 5V DC
Mikrokontroler nRF52832
LED Controller Opis urządzenia
Serwis Led Controller
LED Controller Podział na serwisy i charakterystyki
Charakterystyka „control”
Kolor czerwony
Kolor zielony
Kolor niebieski
Kolor biały
Jasność Prędkość
efektu Typ
efektu
Wartości od 0-255
Wartości od 0-15
0x00 – stały kolor
0x01 – stała tęcza
0x02 – ruchoma tęcza
Wartości od 0-255
Implementacja
Android Studio Aplikacja do sterowania listwą LED
SK6812
Place your screenshot here
LED Controller
Demo Android Studio
Implementacja
Firemonkey Aplikacja do sterowania listwą LED
SK6812
Place your screenshot here
Implementacja Klasa TLedController
TLedController = class
strict private
FDevice : TBluetoothLEDevice;
FControl : TControlCharacteristic;
FName: string;
FSignalPercent: integer;
FActive : boolean;
FBonded : boolean;
FInicjalizacja : boolean;
FAutoConnect: boolean;
public
constructor Create(const ADevice: TBluetoothLEDevice);
property device: TBluetoothLEDevice read FDevice write FDevice;
property control: TControlCharacteristic read FControl write FControl;
property name: string read Fname write Fname;
property signalPercent: integer read FsignalPercent write FsignalPercent;
property active : boolean read Factive write Factive;
property bonded : boolean read Fbonded write Fbonded;
property autoConnect : boolean read FAutoConnect write FAutoConnect;
property inicjalizacja: boolean read FInicjalizacja write FInicjalizacja;
procedure updateRssiPercent;
end;
Implementacja Firemonkey
Komponent TBluetoothLE
Implementacja Połączenie z urządzeniem
Rozpoczęcie skanowania:
BluetoothLE1.DiscoverDevices(100);
Lista wyszukanych urządzeń:
procedure TForm1.BluetoothLE1EndDiscoverDevices(const Sender: TObject;
const ADeviceList: TBluetoothLEDeviceList);
Zapis do słownika:
BlueLedConnectedDevice := TLedController.Create( LDevice );
BlueLedActiveDeviceList: TDictionary<String, TLedController>;
Łączenie się z konkretny urządzeniem
BlueLedConnectedDevice.device.Connect;
Odkrywanie serwisów i charakterystyk
BluetoothLE1.DiscoverServices(BlueLedConnectedDevice.device);
Implementacja Zapis charakterystyk
Zapis charakterystyk
function TForm1.bluetoothSendControl: Boolean;
var
dataToSend: TBytes;
begin
SetLength(dataToSend, 13);
dataToSend[0] := $AB;
dataToSend[1] := $CD;
dataToSend[2] := BlueLedConnectedDevice.control.red;
.
.
.
try
CharacteristicControl.SetValue(dataToSend);
BluetoothLE1.WriteCharacteristic(BlueLedConnectedDevice.device,CharacteristicControl);
Result := true;
except
Result := false;
end;
end;
Implementacja Odczyt charakterystyk
Odczyt charakterystyk
procedure TForm1.BluetoothLE1CharacteristicRead(const Sender: TObject;
const ACharacteristic: TBluetoothGattCharacteristic; AGattStatus:TBluetoothGattStatus);
begin
if ACharacteristic.UUID.ToString.Contains(CONTROL_CHAR.ToUpper) then
begin
BlueLedConnectedDevice.control.red := ACharacteristic.GetValueAsUInt8(2);
.
.
.
tbRed.Value := BlueLedConnectedDevice.control.red;
.
.
.
lbiEffectsType.ItemData.Detail :=EffectsTypeName[BlueLedConnectedDevice.control.effectType];
end;
end;
BluetoothLE1.ReadCharacteristic(BlueLedConnectedDevice.device, CharacteristicControl);
Implementacja Trick Tip: Łatwe debugowanie w Androidzie
Android Monitor – z pakietu Android SDK
Przykład:
1) Tools->SDK Manager->SDK base path
2) C:\Users\Public\Documents\Embarcadero\Studio\19.0\CatalogRepository\AndroidSDK-2433_19.0.27659.1188
3) Katalog tools/monitor.bat
Log.d('Nowe dane z ' + ABeacon.DeviceIdentifier);
LED Controller
Demo Firemonkey
Want big impact?
USE BIG IMAGE.
4. Podsumowanie
1. Porównanie Android Studio vs Firemonkey 2. Dlaczego wybrałem Delphi?
Podsumowanie Porównanie
Parametr Android Studio Firemonkey
Rozmiar aplikacji Smart Flower Pot Scaner 1,64 MB 50,28 MB
Rozmiar aplikacji Led Controller 2,09 MB 46,44 MB
Szybkość działania i stabilność działania Taka sama
Możliwości Brak ograniczeń Ograniczone
Czas pomiędzy startem kompilacji a
uruchomieniem aplikacji na SmartPhonie Krótszy Dłuższy
Dlaczego wybrałem Delphi?
Jeden projekt/kod – wiele platform naraz
Delphi jest po prostu fajne
Podsumowanie
github.com/mattpro „M. Gancarczyk”
Dziękuję za uwagę! Pytania?