Spisu treści:

Zbuduj Wearable Motion Tracker (BLE od Arduino do niestandardowej aplikacji Android Studio): 4 kroki
Zbuduj Wearable Motion Tracker (BLE od Arduino do niestandardowej aplikacji Android Studio): 4 kroki

Wideo: Zbuduj Wearable Motion Tracker (BLE od Arduino do niestandardowej aplikacji Android Studio): 4 kroki

Wideo: Zbuduj Wearable Motion Tracker (BLE od Arduino do niestandardowej aplikacji Android Studio): 4 kroki
Wideo: Представляем умопомрачительную биотехнологию регенерации: Майкл Левин 2024, Listopad
Anonim
Zbuduj Wearable Motion Tracker (BLE od Arduino do niestandardowej aplikacji Android Studio)
Zbuduj Wearable Motion Tracker (BLE od Arduino do niestandardowej aplikacji Android Studio)

Bluetooth Low Energy (BLE) to forma komunikacji Bluetooth o małej mocy. Urządzenia ubieralne, takie jak inteligentne ubrania, które pomagam projektować w Predictive Wear, muszą ograniczać zużycie energii, gdy tylko jest to możliwe, aby przedłużyć żywotność baterii i często korzystać z BLE. Grupa SIG (Bluetooth Special Interest Group) definiuje kilka specyfikacji, które urządzenie powinno zaimplementować w celu interakcji z urządzeniem Bluetooth, które określają mianem „profili”. Większość profili aplikacji wykorzystuje ogólny profil atrybutów (GATT) do wysyłania danych przez łącze BLE. W BLE istnieją trzy podstawowe pojęcia: profile, usługi i atrybuty.

Bluetooth SIG ustandaryzował wiele popularnych profili, usług i atrybutów. Jednak podczas tworzenia niestandardowego sprzętu często istnieje potrzeba tworzenia niestandardowych usług i atrybutów, a dostępnych jest niewiele samouczków. Aby utrudnić sprawę, Adafruit nie zapewnia żadnych wskazówek dotyczących projektowania aplikacji mobilnych, które będą sparowane z ich modułami BLE, a kod źródłowy ich aplikacji jest trudny do odtworzenia.

Ten samouczek ma na celu wyjaśnienie:

  1. Jak zaprojektować niestandardowe usługi i charakterystyki GATT
  2. Jak zaprogramować Adafruit Bluefruit LE SPI Friend, aby działał jako serwer GATT dla tych niestandardowych usług i cech?
  3. Jak zaprogramować urządzenie z Androidem do działania jako klient GATT do odczytywania danych z serwera GATT?

Ten samouczek nie jest przeznaczony do przetłumaczenia na aplikację gotową do produkcji - jest to po prostu wprowadzenie do BLE.

Czytanie w tle:

  • Dokumentacja Adafruit Bluefruit LE SPI Friend
  • Jeśli nie znasz GATT lub BLE

Kieszonkowe dzieci

  • 1x - Urządzenie Arduino (używam UNO do tego samouczka)
  • 1x - Adafruit Bluefruit LE SPI Przyjaciel
  • 8x - przewody połączeniowe męskie-męskie
  • Podstawowe wyposażenie do lutowania (do lutowania pinów nagłówka na SPI Friend)
  • Komputer (do programowania urządzenia Arduino i urządzenia z systemem Android)

Krok 1: Zaprojektuj niestandardowe usługi i cechy

WPROWADZANIE

Ten artykuł świetnie się sprawdza, wyjaśniając, jak projektować niestandardowe usługi i cechy. Gorąco polecam przeczytanie tego artykułu. Poniżej przedstawiam bardzo prosty przegląd, który pomija subtelności na rzecz prostoty.

Usługi GATT to zbiór cech charakterystycznych.

Charakterystyki GATT zawierają właściwość, wartość oraz zero lub więcej deskryptorów.

  • Właściwość: jak dane powinny być obsługiwane przez klienta (aplikacja na Androida) m.in. czytać, pisać, pisać bez odpowiedzi, powiadamiać i wskazywać.
  • Wartość: rzeczywista wartość charakterystyki np. 1089
  • Deskryptory: są to informacje o wartości, np. jednostka, milisekundy

PROJEKT

Dobra, teraz wiesz, czym są usługi i cechy, musimy dowiedzieć się, jak zaprojektować niektóre usługi i cechy, aby uzyskać nasze niestandardowe dane i wysłać je z naszego serwera GATT (Arduino) do klienta (aplikacja na Androida). Rozważmy urządzenie Arduino, które zbiera dane z modułu akcelerometr-żyroskop (AGM). Chcemy zbierać pomiary żyroskopowe i przyspieszenia z trzech osi przestrzennych oraz czas ich wykonania i przesyłać te dane do naszej aplikacji mobilnej. Chcemy również wiedzieć, kiedy musimy naładować urządzenie, więc chcemy odczytać poziom naładowania baterii i przesłać go do naszej aplikacji mobilnej.

1. Czy możemy korzystać ze standardowych usług i cech?

Bluetooth SIG ustandaryzował wiele popularnych usług i cech. Najpierw sprawdź je, aby zobaczyć, czy możesz dokooptować którąkolwiek ze standardowych usług i cech. Standardowe usługi i charakterystyki mogą wykorzystywać znacznie mniejsze pakiety danych, ponieważ Universally Unique Identifier (UUID) ma 16 bitów, podczas gdy niestandardowe usługi i charakterystyki muszą wykorzystywać 128 bitów dla swoich UUID. Więcej o UUID później. Podczas naszych poszukiwań znaleźliśmy ustandaryzowaną „usługę baterii”, która zawiera jedną charakterystyczną „poziom baterii”.

2. Oddziel wszystkie wartości danych, które chcesz przesłać przez BLE, na cechy i usługi

Możemy podzielić nasze niestandardowe punkty danych na siedem niestandardowych cech w ramach jednej niestandardowej usługi. Usługę tę będziemy nazywać „usługą AGM”. Będzie zawierał 7 charakterystyk: przyspieszenie x, przyspieszenie y, przyspieszenie z, żyroskop x, żyroskop y, żyroskop z i odniesienie do czasu.

3. Określ właściwości potrzebne dla każdej cechy

Cecha może mieć kilka właściwości.

  1. Odczyt: klient (aplikacja na Androida) może odczytać wartość z serwera GATT (Arduino)
  2. Napisz: Klient może zmienić wartość z serwera GATT
  3. Wskazać: Klient zostanie powiadomiony o zmianie wartości z Serwera GATT i oczekuje się, że Klient wyśle potwierdzenie do Serwera GATT
  4. Powiadom: Klient zostanie powiadomiony, jeśli wartość zmieni się z Serwera GATT, a Klient nie ma wysyłać potwierdzenia do Serwera GATT

W tym samouczku ustawimy wszystkie nasze cechy na read, z wyjątkiem poziomu baterii, który będzie miał zarówno właściwości powiadamiania, jak i odczytu.

4. Wygeneruj UUID dla niestandardowych usług i charakterystyk oraz znajdź standardowe UUID

Jak pokrótce wspomniałem wcześniej, znormalizowane usługi i parametry Bluetooth SIG wykorzystują 16-bitowy UUID, podczas gdy niestandardowe usługi i charakterystyki wykorzystują 128-bitowe UUID. Na przykład, zobacz numer przypisany do serwisu baterii w Bluetooth SIG. Przypisana liczba 0x180F reprezentuje 128-bitowy UUID „0000180F-0000-1000-8000-00805F9B34FB”. Cztery cyfry (16 bitów) wytłuszczone są unikalne dla określonej standardowej usługi lub cechy, podczas gdy pozostałe znaki są zachowane między wszystkimi standardowymi usługami i cechami. Ponieważ zarówno klient, jak i serwer GATT wiedzą, że standardowe usługi i charakterystyki różnią się tylko pogrubionymi cyframi, rozmiary pakietów danych można znacznie zmniejszyć. Jednak usługi i cechy niestandardowe nie mogą działać przy tym samym założeniu.

Zamiast tego niestandardowe usługi i cechy muszą wykorzystywać nieskrócone 128-bitowe identyfikatory UUID. Oto internetowy generator UUID. Każdy UUID inny niż standardowy UUID jest dopuszczalny dla niestandardowego UUID. Jednak typową konwencją nazewnictwa jest oznaczenie usługi niestandardowej 00000001-… i właściwości tej usługi niestandardowej 00000002-…

Oto arkusz z podsumowaniem usług i charakterystyk, które będziemy wdrażać, wraz z ich identyfikatorami UUID

Krok 2: Kod Arduino

ZAKTUALIZUJ BLUEFRUIT LE SPI FRIEND

Najpierw podłącz Adafruit Bluefruit LE SPI Friend zgodnie z opisem w przewodniku podłączania i włącz urządzenie Arduino. Upewnij się, że możesz znaleźć Adafruit Bluefruit LE SPI Friend na swoim urządzeniu z Androidem podczas wyszukiwania urządzeń Bluetooth. Pobierz aplikację Bluefruit Connect, połącz się z Adafruit Bluefruit LE SPI Friend i pozwól mu zaktualizować oprogramowanie na urządzeniu. Ten krok jest ważny. Jeśli nie zaktualizujesz oprogramowania układowego, polecenia wydawane przez urządzenie za pośrednictwem Arduino prawdopodobnie zakończą się niepowodzeniem i nie będzie oczywistego błędu, aby odkryć, na czym polega problem.

Oto moje repozytorium dla tego projektu. Tutaj możesz zobaczyć pełny kod Arduino.

PRZEGLĄD

Kilka ważnych rzeczy do zapamiętania:

  1. W metodzie setup() wszystkie niestandardowe identyfikatory UUID muszą zawierać „-” między każdymi dwoma znakami. Na przykład zadziała „AT+GATTADDCHAR=UUID128=00-00-00-05-62-7E-47-E5-A3-FC-DD-AB-D9-7A-A9-66”. „AT+GATTADDCHAR=UUID128=00000005-627E-47E5-A3fCDDABD97AA966” nie będzie działać.
  2. Zauważ, że w metodzie setup() „battery.begin(true);” wywołuje "ble.reset();" automatycznie. Jeśli nie korzystasz z serwisu baterii tak jak ja, musisz zresetować moduł ble (użyj "ble.reset();"), gdzie mam polecenie "battery.begin(true);".
  3. W metodzie setup() zmień "if (!ble.begin(false))" na "if (!ble.begin(true))", jeśli chcesz debugować.

Ten kod jest dość oczywisty. Dołączyłem opisy każdej niestandardowej metody. Metoda konfiguracji przygotowuje moduł BLE do działania jako serwer GATT. Metoda pętli przechodzi przez fałszywe przemiatanie modułu żyroskopu akcelerometru (AGM) i generuje losową liczbę od 1 do 100 dla tych wartości. Bateria jest rozładowana o 1% w celu symulacji użytkowania baterii. Możesz łatwo zastąpić ten kod rzeczywistymi wartościami czujnika. Ten kod zakłada, że prześlesz tablicę danych AGM o długości 6 pomiarów, a nie pojedynczy pomiar, ponieważ analiza okna danych AGM jest prawdopodobnie bardziej użyteczna niż pojedynczy punkt danych. Jeśli zmienisz rozmiar tablicy, zwróć uwagę, że będą wymagane zmiany w kodzie Android Studio. Aby przechwycić szereg danych, wraz z danymi, które zamierzasz wysłać, musisz przekazać licznik. Ten licznik pozwala znaleźć, gdzie jesteś w oknie z aplikacji Android Studio, dzięki czemu możesz poczekać na odsłuchanie brakujących punktów danych w oknie. Bez licznika lub z tablicą o innym rozmiarze, projekt Android Studio albo przegapi punkty danych, albo utknie w pętli, czekając na pozostałe punkty danych, których oczekuje.

Krok 3: Kod Android Studio

Oto moje repozytorium dla tego projektu. Tutaj możesz zobaczyć pełny kod Android Studio.

PRZEGLĄD

Będę aktualizować to, dodając dokładniejszy opis działania kodu arduino i Androida… Aplikacja jest w pełni funkcjonalna, więc w międzyczasie możesz samodzielnie przyjrzeć się kodowi.

Krok 4: Ostateczna aplikacja

Wniosek końcowy
Wniosek końcowy
Wniosek końcowy
Wniosek końcowy
Wniosek końcowy
Wniosek końcowy

Gratulacje! Twoja aplikacja zostanie pobrana na telefon, a urządzenie do noszenia jest ładowane i przesyła dane.

URUCHOM APLIKACJĘ

Aby rozpocząć, kliknij ikonę programu uruchamiającego dla aplikacji.

ZEZWOLENIA NA PRZYZNANIE

Aby aplikacja działała poprawnie, musisz wyrazić zgodę na użycie niektórych uprawnień.

SKANOWANIE URZĄDZEŃ

Następnie kliknij przycisk „Skanuj” w lewym górnym rogu aplikacji.

WYBIERZ SWOJE URZĄDZENIE DO NOSZENIA

Następnie wybierz swoje urządzenie do noszenia z listy dostępnych urządzeń BLE. Nazywa się „BLE Arduino Hardware”. POBIERZ DANE Poczekaj, aż aplikacja pobierze dane AGM i określi, gdzie użytkownik jest nadal lub się porusza. ZOBACZ SWOJE WYNIKI Sprawdź wyniki na ekranie! Kliknij przycisk synchronizacji, aby uzyskać kolejny odczyt danych.

Zalecana: