Technologia Bluetooth Low Energy w...

Post on 26-May-2020

8 views 0 download

Transcript of Technologia Bluetooth Low Energy w...

Technologia

Bluetooth Low Energy

w Delphi

WITAM! Mateusz Gancarczyk

gancarczyk.mateusz@gmail.com 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?