Innehållsförteckning:

Bygg en bärbar rörelsetracker (BLE från Arduino till en anpassad Android Studio App): 4 steg
Bygg en bärbar rörelsetracker (BLE från Arduino till en anpassad Android Studio App): 4 steg

Video: Bygg en bärbar rörelsetracker (BLE från Arduino till en anpassad Android Studio App): 4 steg

Video: Bygg en bärbar rörelsetracker (BLE från Arduino till en anpassad Android Studio App): 4 steg
Video: ELF/EMBARC Bronchiectasis conference 2023 with subtitles 2024, Juli
Anonim
Bygg en bärbar rörelsetracker (BLE från Arduino till en anpassad Android Studio -app)
Bygg en bärbar rörelsetracker (BLE från Arduino till en anpassad Android Studio -app)

Bluetooth Low Energy (BLE) är en form av lågeffekts Bluetooth -kommunikation. Bärbara enheter, precis som de smarta plaggen jag hjälper till att designa på Predictive Wear, måste begränsa energiförbrukningen när det är möjligt för att förlänga batteriets livslängd och ofta använda BLE. Bluetooth Special Interest Group (SIG) definierar flera specifikationer som en enhet bör implementera för att interagera med en Bluetooth -enhet, som de kallar "profiler". De flesta applikationsprofiler använder General Attribute Profile (GATT) för att skicka data via en BLE -länk. Det finns tre grundläggande begrepp i BLE: profiler, tjänster och attribut.

Bluetooth SIG har standardiserat många vanliga profiler, tjänster och attribut. Men när du skapar anpassad maskinvara finns det ofta ett behov av att skapa anpassade tjänster och attribut och det finns inte många självstudier tillgängliga. För att göra saken svårare ger Adafruit ingen vägledning om hur man utformar mobilapplikationer för att para ihop med sina BLE -moduler och källkoden för deras applikationer är svår att omvandla.

Denna handledning syftar till att förklara:

  1. Hur man utformar anpassade GATT -tjänster och egenskaper
  2. Hur man programmerar Adafruit Bluefruit LE SPI Friend för att fungera som en GATT -server för dessa anpassade tjänster och egenskaper
  3. Hur man programmerar en Android -enhet för att fungera som GATT -klienten för att läsa data från GATT -servern

Denna handledning är inte avsedd att översättas till en produktionsklar applikation - detta är helt enkelt en introduktion till BLE.

Bakgrundsläsning:

  • Adafruit Bluefruit LE SPI Friend -dokumentation
  • Om du inte är bekant med GATT eller BLE

Tillbehör

  • 1x - En Arduino -enhet (jag använder UNO för denna handledning)
  • 1x - Adafruit Bluefruit LE SPI Friend
  • 8x - han- till han -tröjor
  • Grundläggande lödutrustning (till lödhuvudstiften på SPI Friend)
  • En dator (för att programmera Arduino -enheten och Android -enheten)

Steg 1: Designa anpassade tjänster och egenskaper

INTRODUKTION

Denna artikel gör ett bra jobb med att förklara hur man utformar anpassade tjänster och egenskaper. Jag rekommenderar starkt att läsa igenom denna artikel. Jag ger en mycket enkel översikt nedan som försummar subtiliteterna till förmån för enkelhet.

GATT -tjänster är en samling egenskaper.

GATT -egenskaper innehåller en egenskap, ett värde och noll eller fler beskrivningar.

  • Egendom: hur uppgifterna ska hanteras av klienten (Android App) t.ex. läs, skriv, skriv utan svar, meddela och ange.
  • Värde: det verkliga värdet på karaktäristiken t.ex. 1089
  • Beskrivare: detta är information om värdet t.ex. enheten, millisekunder

DESIGN

Okej, nu vet du vad tjänster och egenskaper är, vi måste ta reda på hur vi utformar vissa tjänster och egenskaper för att få våra anpassade data och skicka den från vår GATT -server (Arduino) till klienten (Android App). Låt oss överväga en Arduino-enhet som samlar in data från en accelerometer-gyroskopmodul (AGM). Vi vill samla gyroskop- och accelerationsmätningar från tre rumsliga axlar och den tid dessa mätningar togs och överföra dessa data till vår mobilapplikation. Vi vill också veta när vi behöver ladda enheten, så vi vill läsa batterinivån och överföra det till vår mobilapplikation.

1. Kan vi använda någon av standardtjänsterna och egenskaperna?

Bluetooth SIG har standardiserat många vanliga tjänster och egenskaper. Kontrollera först dessa för att se om du kan välja någon av de standardiserade tjänsterna och egenskaperna. Standardtjänsterna och egenskaperna kan använda mycket mindre datapaket eftersom UUID (Universally Unique Identifier) är 16 bitar medan anpassade tjänster och egenskaper måste använda 128 bitar för sina UUID: er. Mer om UUID senare. Från vår sökning hittade vi en standardiserad "batteritjänst" som innehåller en karakteristisk "batterinivå".

2. Separera alla datavärden som du vill skicka över BLE i egenskaper och tjänster

Vi kan dela upp våra anpassade datapunkter i sju anpassade egenskaper inom en anpassad tjänst. Vi kommer att kalla denna tjänst för "AGM -tjänsten". Den kommer att innehålla 7 egenskaper: x-acceleration, y-acceleration, z-acceleration, x-gyroskop, y-gyroskop, z-gyroskop och en tidsreferens.

3. Bestäm de egenskaper som behövs för varje egenskap

Det finns flera egenskaper en egenskap kan ha.

  1. Läs: Klienten (Android -appen) kan läsa ett värde från GATT -servern (Arduino)
  2. Skriv: Klienten kan ändra ett värde från GATT -servern
  3. Ange: Kunden kommer att meddelas om ett värde ändras från GATT -servern och klienten förväntas skicka bekräftelse till GATT -servern
  4. Meddela: klienten meddelas om ett värde ändras från GATT -servern och klienten inte förväntas skicka bekräftelse till GATT -servern

För denna handledning kommer vi att ställa in alla våra egenskaper för att läsa, med undantag för batterinivån som kommer att ha både meddelande- och läsegenskaper.

4. Skapa UUID för anpassade tjänster och egenskaper och hitta standard UUID

Som jag tidigare nämnde tidigare använder Bluetooth SIG -standardiserade tjänster och egenskaper en 16 -bitars UUID medan anpassade tjänster och egenskaper använder 128 -bitars UUID. Se till exempel det tilldelade numret för batteritjänsten på Bluetooth SIG. Det tilldelade numret 0x180F representerar 128-bitars UUID "0000180F-0000-1000-8000-00805F9B34FB". De fyra siffrorna (16 bitar) i fetstil är unika för den specifika standardiserade tjänsten eller egenskapen medan de andra tecknen bevaras mellan alla standardiserade tjänster och egenskaper. Eftersom både klienten och GATT -servern vet att standardiserade tjänster och egenskaper endast varierar med fetstil, kan paketstorlekarna för data minskas väsentligt. Anpassade tjänster och egenskaper kan dock inte fungera under samma antagande.

Istället måste anpassade tjänster och egenskaper använda oförkortade 128 -bitars UUID. Här är en online UUID -generator. Alla andra UUID än standardiserade UUID är acceptabla för ett anpassat UUID. En typisk namngivningskonvention är dock att beteckna en anpassad tjänst 00000001-… och egenskaper inom den anpassade tjänsten 00000002-…

Här är ett sammanfattande kalkylblad över de tjänster och egenskaper vi kommer att implementera tillsammans med deras UUID: er

Steg 2: Arduino -kod

UPPDATERA BLUEFRUIT LE SPI -VÄNNEN

Anslut först Adafruit Bluefruit LE SPI Friend som de anger i sin anslutningsguide och slå på Arduino -enheten. Se till att du kan hitta Adafruit Bluefruit LE SPI Friend på din Android -enhet när du söker efter Bluetooth -enheter. Ladda ner Bluefruit Connect -appen, anslut till Adafruit Bluefruit LE SPI Friend och låt den uppdatera firmware på enheten. Detta steg är viktigt. Om du inte uppdaterar den inbyggda programvaran kommer kommandon du ger ut via Arduino sannolikt att misslyckas och det kommer inte att finnas ett uppenbart fel för dig att upptäcka vad problemet är.

Här är min repo för detta projekt. Du kan se hela Arduino -koden här.

ÖVERSIKT

Några viktiga saker att notera:

  1. I setup () -metoden måste alla anpassade UUID: er innehålla "-" mellan varannan tecken. Till exempel fungerar "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" fungerar inte.
  2. Observera att i setup () -metoden, "battery.begin (true);" anropar "ble.reset ();" automatiskt. Om du inte använder batteritjänsten som jag har måste du återställa ble -modulen (använd "ble.reset ();") där jag har kommandot "battery.begin (true);".
  3. I metoden setup () ändrar du "if (! Ble.begin (false))" till "if (! Ble.begin (true))" "om du vill felsöka.

Denna kod är ganska självförklarande. Jag inkluderade beskrivningar av varje anpassad metod. Installationsmetoden gör BLE -modulen redo att fungera som GATT -servern. Loopmetoden går igenom en falsk svepning av accelerometerns gyroskopmodul (AGM) och genererar ett slumpmässigt tal från 1 till 100 för dessa värden. Batteriet dräneras med 1% för att simulera batterianvändning. Du kan enkelt ersätta denna kod med de verkliga sensorvärdena. Den här koden förutsätter att du kommer att överföra en rad AGM -data, 6 mätningar långa, snarare än en enda mätning, eftersom analysering av ett fönster med AGM -data sannolikt är mer användbar än en enda datapunkt. Om du ändrar matrisstorleken, observera att det kommer att krävas ändringar i android studiokoden. För att fånga en mängd data måste du skicka en räknare tillsammans med de data du tänker skicka. Med denna räknare kan du hitta var du befinner dig i fönstret från Android Studio -applikationen så att du kan vänta med att lyssna på de saknade datapunkterna i fönstret. Utan räknaren eller med en annan storlek kommer Android -studioprojektet antingen att sakna datapunkter eller fastna i en slinga i väntan på de återstående datapunkterna som de förväntar sig.

Steg 3: Android Studio Code

Här är min repo för det här projektet. Du kan se hela Android Studio -koden här.

ÖVERSIKT

Jag kommer att uppdatera detta med en mer ingående översikt över hur arduino- och androidkoden fungerar i detalj … Appen är fullt fungerande så titta gärna på koden själv under tiden.

Steg 4: Slutlig ansökan

Slutlig ansökan
Slutlig ansökan
Slutlig ansökan
Slutlig ansökan
Slutlig ansökan
Slutlig ansökan

Grattis! Din ansökan laddas ner till din telefon och din bärbara enhet laddas och överför data.

Lansera appen

För att komma igång, klicka på startikonen för programmet.

BIDRAGSTILLÅTELSER

Du måste godkänna användningen av vissa behörigheter för att appen ska fungera korrekt.

SKANNA PÅ ENHETER

Klicka sedan på knappen "Skanna" i det övre vänstra hörnet av appen.

VÄLJ DIN BÄRBARA ENHET

Välj sedan din bärbara enhet från listan över tillgängliga BLE -enheter. Dess namn är "BLE Arduino Hardware". FÅ DATA Vänta medan appen hämtar AGM -data och avgör var användaren är stilla eller rör sig. SE DINA RESULTAT Kolla in resultaten på skärmen! Klicka på synkroniseringsknappen för att läsa ytterligare data.

Rekommenderad: