Indholdsfortegnelse:

Byg en bærbar bevægelsessporer (BLE fra Arduino til en brugerdefineret Android Studio App): 4 trin
Byg en bærbar bevægelsessporer (BLE fra Arduino til en brugerdefineret Android Studio App): 4 trin

Video: Byg en bærbar bevægelsessporer (BLE fra Arduino til en brugerdefineret Android Studio App): 4 trin

Video: Byg en bærbar bevægelsessporer (BLE fra Arduino til en brugerdefineret Android Studio App): 4 trin
Video: Самый крутой ноутбук с двумя экранами👨🏼‍💻 2024, November
Anonim
Byg en bærbar bevægelsessporer (BLE fra Arduino til en brugerdefineret Android Studio App)
Byg en bærbar bevægelsessporer (BLE fra Arduino til en brugerdefineret Android Studio App)

Bluetooth Low Energy (BLE) er en form for lavstrøm Bluetooth -kommunikation. Bærbare enheder, ligesom de smarte beklædningsgenstande, jeg hjælper med at designe på Predictive Wear, skal begrænse strømforbruget, hvor det er muligt, for at forlænge batteriets levetid og ofte bruge BLE. Bluetooth Special Interest Group (SIG) definerer flere specifikationer, en enhed skal implementere for at interagere med en Bluetooth -enhed, som de kalder "profiler". De fleste applikationsprofiler anvender GATT (General Attribute Profile) til at sende data via et BLE -link. Der er tre grundlæggende begreber i BLE: profiler, tjenester og attributter.

Bluetooth SIG har standardiseret mange almindelige profiler, tjenester og attributter. Når du opretter brugerdefineret hardware, er der imidlertid ofte et behov for at oprette brugerdefinerede tjenester og attributter, og der er ikke mange tutorials til rådighed. For at gøre sagen vanskeligere giver Adafruit ingen vejledning om design af mobilapplikationer, der skal parres med deres BLE -moduler, og kildekoden til deres applikationer er vanskelig at bakke om.

Denne vejledning har til formål at forklare:

  1. Sådan designes brugerdefinerede GATT -tjenester og egenskaber
  2. Sådan programmeres Adafruit Bluefruit LE SPI Friend til at fungere som en GATT -server for disse brugerdefinerede tjenester og egenskaber
  3. Sådan programmeres en Android -enhed til at fungere som GATT -klienten til at læse dataene fra GATT -serveren

Denne vejledning er ikke beregnet til at blive oversat til en produktionsklar applikation - dette er simpelthen en introduktion til BLE.

Baggrundslæsning:

  • Adafruit Bluefruit LE SPI Friend dokumentation
  • Hvis du ikke er bekendt med GATT eller BLE

Forbrugsvarer

  • 1x - En Arduino -enhed (jeg bruger UNO til denne vejledning)
  • 1x - Adafruit Bluefruit LE SPI Friend
  • 8x - han- til hanstrømper
  • Grundlæggende loddeudstyr (til lodningsspidser på SPI Friend)
  • En computer (til at programmere Arduino -enheden og Android -enheden)

Trin 1: Design tilpassede tjenester og egenskaber

INTRODUKTION

Denne artikel gør et godt stykke arbejde med at forklare, hvordan man designer tilpassede tjenester og egenskaber. Jeg anbefaler stærkt at læse denne artikel igennem. Jeg giver et meget enkelt overblik herunder, der forsømmer finesser til fordel for enkelhed.

GATT Services er en samling af egenskaber.

GATT -egenskaber indeholder en egenskab, en værdi og nul eller flere deskriptorer.

  • Ejendom: hvordan dataene skal håndteres af klienten (Android App) f.eks. læse, skrive, skrive uden svar, give besked og angive.
  • Værdi: den faktiske værdi af karakteristikken f.eks. 1089
  • Descriptors: dette er information om værdien f.eks. enheden, millisekunder

DESIGN

Okay, nu ved du, hvad tjenester og egenskaber er, vi skal finde ud af at designe nogle tjenester og egenskaber for at få vores tilpassede data og sende dem fra vores GATT -server (Arduino) til klienten (Android App). Lad os overveje en Arduino-enhed, der indsamler data fra et accelerometer-gyroskopmodul (AGM). Vi ønsker at indsamle gyroskop- og accelerationsmålinger fra tre rumakser og den tid, disse målinger blev taget og overføre disse data til vores mobilapplikation. Vi vil også vide, hvornår vi skal oplade enheden, så vi vil læse batteriniveauet og overføre det til vores mobilapplikation.

1. Kan vi bruge nogen af standardtjenesterne og -egenskaberne?

Bluetooth SIG har standardiseret mange almindelige tjenester og egenskaber. Kontroller først disse for at se, om du kan co-optage nogen af de standardiserede tjenester og egenskaber. Standardtjenesterne og -egenskaberne kan udnytte meget mindre datapakker, da Universally Unique Identifier (UUID) er 16 bits, mens brugerdefinerede tjenester og egenskaber skal bruge 128 bit til deres UUID'er. Mere om UUID'er senere. Fra vores søgning fandt vi en standardiseret "batteriservice", som indeholder et karakteristisk "batteriniveau".

2. Adskil alle dataværdier, du vil sende over BLE, til egenskaber og tjenester

Vi kan opdele vores brugerdefinerede datapunkter i syv tilpassede egenskaber inden for en brugerdefineret service. Vi kalder denne service "AGM service". Det vil indeholde 7 egenskaber: x-acceleration, y-acceleration, z-acceleration, x-gyroskop, y-gyroskop, z-gyroskop og en tidsreference.

3. Bestem de egenskaber, der er nødvendige for hver egenskab

Der er flere egenskaber, en egenskab kan have.

  1. Læs: Klienten (Android App) kan læse en værdi fra GATT -serveren (Arduino)
  2. Skriv: Klienten kan ændre en værdi fra GATT -serveren
  3. Angiv: Kunden får besked, hvis en værdi ændres fra GATT -serveren, og klienten forventes at sende bekræftelse til GATT -serveren
  4. Meddel: Klienten får besked, hvis en værdi ændres fra GATT -serveren, og klienten ikke forventes at sende bekræftelse til GATT -serveren

Til denne vejledning sætter vi alle vores karakteristika til at læse, med undtagelse af batteriniveauet, der vil have både meddelelses- og læseegenskaber.

4. Generer UUID'er til brugerdefinerede tjenester og egenskaber, og find standard UUID'er

Som jeg kort nævnte tidligere, bruger Bluetooth SIG -standardiserede tjenester og egenskaber en 16 bit UUID, mens brugerdefinerede tjenester og egenskaber anvender 128 bit UUID'er. Se f.eks. Det tildelte nummer til batteritjenesten på Bluetooth SIG. Det tildelte nummer 0x180F repræsenterer 128 bit UUID "0000180F-0000-1000-8000-00805F9B34FB". De fire cifre (16 bits) med fed skrift er unikke for den særlige standardiserede tjeneste eller egenskab, mens de andre tegn er bevaret mellem alle standardiserede tjenester og egenskaber. Da både klienten og GATT -serveren ved, at standardiserede tjenester og egenskaber kun varierer med fed skrift, kan pakkestørrelserne for data reduceres betydeligt. Brugerdefinerede tjenester og egenskaber kan imidlertid ikke fungere under samme antagelse.

I stedet skal brugerdefinerede tjenester og egenskaber anvende ikke -forkortede 128 bit UUID'er. Her er en online UUID generator. Enhver anden UUID end den standardiserede UUID er acceptabel for en brugerdefineret UUID. En typisk navngivningskonvention er imidlertid at betegne en brugerdefineret service 00000001-… og egenskaber inden for den brugerdefinerede service 00000002-…

Her er et sammenfattende regneark over de tjenester og egenskaber, vi vil implementere sammen med deres UUID'er

Trin 2: Arduino -kode

OPDATER BLUEFRUIT LE SPI -VENNEN

Tilslut først Adafruit Bluefruit LE SPI Friend, som de angiver i deres tilslutningsguide, og start Arduino -enheden. Sørg for, at du kan finde Adafruit Bluefruit LE SPI Friend på din Android -enhed, når du scanner efter Bluetooth -enheder. Download Bluefruit Connect -appen, opret forbindelse til Adafruit Bluefruit LE SPI Friend, og lad den opdatere firmwaren på enheden. Dette trin er vigtigt. Hvis du ikke opdaterer firmwaren, vil de kommandoer, du udsteder enheden via Arduino, sandsynligvis mislykkes, og der vil ikke være en åbenbar fejl for dig at opdage, hvad problemet er.

Her er min repo for dette projekt. Du kan se den fulde Arduino -kode her.

OVERSIGT

Et par vigtige ting at bemærke:

  1. I setup () -metoden skal alle brugerdefinerede UUID'er indeholde "-" mellem hvert andet tegn. For eksempel fungerer "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" fungerer ikke.
  2. Bemærk, at i setup () -metoden "battery.begin (true);" kalder "ble.reset ();" automatisk. Hvis du ikke bruger batteritjenesten som jeg har, skal du nulstille ble -modulet (brug "ble.reset ();"), hvor jeg har kommandoen "battery.begin (true);".
  3. I metoden setup () skal du ændre "if (! Ble.begin (false))" til "if (! Ble.begin (true))" ", hvis du vil fejlsøge.

Denne kode er temmelig selvforklarende. Jeg inkluderede beskrivelser af hver brugerdefineret metode. Opsætningsmetoden gør BLE -modulet klar til at fungere som GATT -serveren. Loop -metoden går gennem en falsk fejning af accelerometer -gyroskopmodulet (AGM) og genererer et tilfældigt tal fra 1 til 100 for disse værdier. Batteriet aflades med 1% for at simulere batteriforbrug. Du kan nemt erstatte denne kode med de aktuelle sensorværdier. Denne kode forudsætter, at du sender en række AGM -data, 6 målinger lange, frem for en enkelt måling, da analyse af et vindue med AGM -data sandsynligvis er mere nyttig end et enkelt datapunkt. Hvis du ændrer matrixstørrelsen, skal du bemærke, at der vil være nødvendige ændringer i Android -studiekoden. For at fange en matrix af data skal du sende en tæller sammen med de data, du har til hensigt at sende. Denne tæller giver dig mulighed for at finde, hvor du befinder dig i vinduet fra Android Studio -applikationen, så du kan vente med at lytte til de manglende datapunkter i vinduet. Uden tælleren eller med en anden størrelse array, vil android studio -projektet enten savne datapunkter eller sidde fast i en loop og vente på de resterende datapunkter, det forventer.

Trin 3: Android Studio -kode

Her er min repo for dette projekt. Du kan se den fulde Android Studio -kode her.

OVERSIGT

Jeg vil blive ved med at opdatere dette med et mere grundigt overblik over, hvordan arduino- og android -koden fungerer i detaljer … Appen er fuldt funktionel, så kig gerne selv på koden imens.

Trin 4: Endelig ansøgning

Endelig ansøgning
Endelig ansøgning
Endelig ansøgning
Endelig ansøgning
Endelig ansøgning
Endelig ansøgning

Tillykke! Din applikation downloades til din telefon, og din bærbare enhed oplades og sender data.

LASCHER APPEN

For at komme i gang skal du klikke på ikonet til launcher for applikationen.

TILLADELSETILLADELSER

Du skal godkende brugen af nogle tilladelser for at appen fungerer korrekt.

SCAN efter enheder

Klik derefter på knappen "Scan" i øverste venstre hjørne af appen.

VÆLG DIN BÆRBARE ENHED

Vælg derefter din bærbare enhed fra listen over tilgængelige BLE -enheder. Dens navn er "BLE Arduino Hardware". HENT DATA Vent, mens appen får AGM -dataene og bestemmer, hvor brugeren stadig er eller bevæger sig. SE DINE RESULTATER Tjek resultaterne på skærmen! Klik på synkroniseringsknappen for at få en anden læsning af data.

Anbefalede: