Inhoudsopgave:

Bouw een draagbare bewegingstracker (BLE van Arduino naar een aangepaste Android Studio-app): 4 stappen
Bouw een draagbare bewegingstracker (BLE van Arduino naar een aangepaste Android Studio-app): 4 stappen

Video: Bouw een draagbare bewegingstracker (BLE van Arduino naar een aangepaste Android Studio-app): 4 stappen

Video: Bouw een draagbare bewegingstracker (BLE van Arduino naar een aangepaste Android Studio-app): 4 stappen
Video: ALIEN ISOLATION LOCKDOWN IN SPACE 2024, November
Anonim
Bouw een draagbare bewegingstracker (BLE van Arduino naar een aangepaste Android Studio-app)
Bouw een draagbare bewegingstracker (BLE van Arduino naar een aangepaste Android Studio-app)

Bluetooth Low Energy (BLE) is een vorm van Bluetooth-communicatie met laag vermogen. Draagbare apparaten, zoals de slimme kledingstukken die ik help ontwerpen bij Predictive Wear, moeten het stroomverbruik waar mogelijk beperken om de levensduur van de batterij te verlengen, en regelmatig gebruik maken van BLE. De Bluetooth Special Interest Group (SIG) definieert verschillende specificaties die een apparaat moet implementeren om te communiceren met een Bluetooth-apparaat, die zij "profielen" noemen. De meeste applicatieprofielen gebruiken het General Attribute Profile (GATT) om gegevens via een BLE-link te verzenden. Er zijn drie fundamentele concepten in BLE: profielen, services en attributen.

Bluetooth SIG heeft veel algemene profielen, services en attributen gestandaardiseerd. Bij het maken van aangepaste hardware is het echter vaak nodig om aangepaste services en attributen te maken en er zijn niet veel tutorials beschikbaar. Om de zaken nog moeilijker te maken, biedt Adafruit geen richtlijnen voor het ontwerpen van mobiele applicaties om te koppelen met hun BLE-modules en de broncode voor hun applicaties is moeilijk te reverse-engineeren.

Deze tutorial is bedoeld om uit te leggen:

  1. Aangepaste GATT-services en -kenmerken ontwerpen?
  2. Hoe de Adafruit Bluefruit LE SPI Friend te programmeren om op te treden als een GATT-server voor deze aangepaste services en kenmerken
  3. Hoe een Android-apparaat te programmeren om als de GATT-client te fungeren om de gegevens van de GATT-server te lezen?

Deze tutorial is niet bedoeld om te vertalen naar een productieklare applicatie - dit is gewoon een introductie tot BLE.

Achtergrond lezen:

  • Adafruit Bluefruit LE SPI Friend documentatie
  • Als u niet bekend bent met GATT of BLE

Benodigdheden

  • 1x - Een Arduino-apparaat (ik gebruik de UNO voor deze tutorial)
  • 1x - Adafruit Bluefruit LE SPI Friend
  • 8x - mannelijke naar mannelijke jumperdraden
  • Basis soldeerapparatuur (om header-pinnen op de SPI Friend te solderen)
  • Een computer (om het Arduino-apparaat en het Android-apparaat te programmeren)

Stap 1: Ontwerp aangepaste services en kenmerken

INVOERING

In dit artikel wordt uitstekend uitgelegd hoe u aangepaste services en kenmerken kunt ontwerpen. Ik raad je ten zeerste aan om dit artikel door te lezen. Ik geef hieronder een heel eenvoudig overzicht dat de subtiliteiten verwaarloost ten gunste van eenvoud.

GATT Services zijn een verzameling kenmerken.

GATT-kenmerken bevatten een eigenschap, een waarde en nul of meer descriptoren.

  • Property: hoe de gegevens door de klant moeten worden behandeld (Android App) b.v. lezen, schrijven, schrijven zonder antwoord, informeren en aangeven.
  • Waarde: de werkelijke waarde van het kenmerk b.v. 1089
  • Descriptoren: dit is informatie over de waarde, b.v. de eenheid, milliseconden

ONTWERP

Oké, nu weet je wat services en kenmerken zijn, we moeten uitzoeken hoe we sommige services en kenmerken kunnen ontwerpen om onze aangepaste gegevens te krijgen en deze van onze GATT-server (Arduino) naar de client (Android-app) te sturen. Laten we eens kijken naar een Arduino-apparaat dat gegevens verzamelt van een accelerometer-gyroscope-module (AGM). We willen gyroscoop- en versnellingsmetingen verzamelen van drie ruimtelijke assen en het tijdstip waarop deze metingen zijn gedaan en deze gegevens doorsturen naar onze mobiele applicatie. We willen ook weten wanneer we het apparaat moeten opladen, dus we willen het batterijniveau uitlezen en doorsturen naar onze mobiele applicatie.

1. Kunnen we gebruik maken van een van de standaard services & kenmerken?

Bluetooth SIG heeft veel algemene diensten en kenmerken gestandaardiseerd. Controleer deze eerst om te zien of u een van de gestandaardiseerde services en kenmerken kunt coöpteren. De standaardservices en kenmerken kunnen veel kleinere datapakketten gebruiken, aangezien de Universally Unique Identifier (UUID) 16 bits is, terwijl aangepaste services en kenmerken 128 bits moeten gebruiken voor hun UUID's. Later meer over UUID's. Uit onze zoektocht hebben we een gestandaardiseerde "batterijservice" gevonden die één karakteristiek "batterijniveau" bevat.

2. Scheid alle gegevenswaarden die u via BLE wilt verzenden in kenmerken en services

We kunnen onze aangepaste gegevenspunten opsplitsen in zeven aangepaste kenmerken binnen één aangepaste service. We zullen deze service de "AVA-service" noemen. Het zal 7 kenmerken bevatten: x-versnelling, y-versnelling, z-versnelling, x-gyroscoop, y-gyroscoop, z-gyroscoop en een tijdreferentie.

3. Bepaal de eigenschappen die nodig zijn voor elk kenmerk

Er zijn verschillende eigenschappen die een kenmerk kan hebben.

  1. Lezen: de Client (Android App) kan een waarde lezen van de GATT Server (Arduino)
  2. Schrijven: de client kan een waarde van de GATT-server wijzigen
  3. Geef aan: de klant wordt op de hoogte gebracht als een waarde verandert van de GATT-server en de klant wordt geacht een bevestiging naar de GATT-server te sturen
  4. Informeren: de klant wordt op de hoogte gebracht als een waarde verandert van de GATT-server en de klant wordt niet verwacht een bevestiging naar de GATT-server te sturen

Voor deze zelfstudie stellen we al onze kenmerken in om te lezen, met uitzondering van het batterijniveau dat zowel meldings- als leeseigenschappen heeft.

4. Genereer UUID's voor aangepaste services en kenmerken en vind standaard UUID's

Zoals ik eerder kort vermeldde, gebruiken Bluetooth SIG-gestandaardiseerde services en kenmerken een 16-bits UUID, terwijl aangepaste services en kenmerken 128-bits UUID's gebruiken. Zie bijvoorbeeld het toegewezen nummer van de batterijservice op de Bluetooth SIG. Het toegewezen nummer 0x180F vertegenwoordigt de 128-bits UUID "0000180F-0000-1000-8000-000805F9B34FB". De vier vetgedrukte cijfers (16 bits) zijn uniek voor de specifieke gestandaardiseerde dienst of kenmerk, terwijl de andere karakters behouden blijven tussen alle gestandaardiseerde diensten en kenmerken. Aangezien zowel de client als de GATT-server weten dat gestandaardiseerde services en kenmerken alleen variëren met de vetgedrukte cijfers, kunnen de pakketgroottes van gegevens aanzienlijk worden verminderd. Aangepaste services en kenmerken kunnen echter niet onder dezelfde veronderstelling werken.

In plaats daarvan moeten aangepaste services en kenmerken gebruik maken van niet-afgekorte 128-bits UUID's. Hier is een online UUID-generator. Elke andere UUID dan de gestandaardiseerde UUID is acceptabel voor een aangepaste UUID. Een typische naamgevingsconventie is echter om een aangepaste service 00000001-… en kenmerken binnen die aangepaste service 00000002-… aan te duiden.

Hier is een samenvattende spreadsheet van de services en kenmerken die we samen met hun UUID's zullen implementeren

Stap 2: Arduino-code

UPDATE DE BLUEFRUIT LE SPI FRIEND

Sluit eerst de Adafruit Bluefruit LE SPI Friend aan zoals ze specificeren in hun aansluitgids en schakel het Arduino-apparaat in. Zorg ervoor dat u de Adafruit Bluefruit LE SPI Friend op uw Android-apparaat kunt vinden bij het scannen naar Bluetooth-apparaten. Download de Bluefruit Connect-app, maak verbinding met de Adafruit Bluefruit LE SPI Friend en laat hem de firmware op het apparaat bijwerken. Deze stap is belangrijk. Als u de firmware niet bijwerkt, zullen de opdrachten die u het apparaat via Arduino geeft waarschijnlijk mislukken en zal er geen duidelijke fout zijn om te ontdekken wat het probleem is.

Hier mijn repo voor dit project. Je kunt de volledige Arduino-code hier bekijken.

OVERZICHT

Een paar belangrijke dingen om op te merken:

  1. In de setup()-methode moeten alle aangepaste UUID's "-" bevatten tussen elke twee tekens. Bijvoorbeeld, "AT+GATTADDCHAR=UUID128=00-00-00-05-62-7E-47-E5-A3-FC-DD-AB-D9-7A-A9-66" zal werken. "AT+GATTADDCHAR=UUID128=00000005-627E-47E5-A3fCDDABD97AA966" werkt niet.
  2. Merk op dat in de setup() methode, "battery.begin(true);" roept "ble.reset();" aan automatisch. Als u de batterijservice niet gebruikt zoals ik heb gedaan, moet u de ble-module opnieuw instellen (gebruik "ble.reset();") waar ik het commando "battery.begin(true);" heb.
  3. Wijzig in de setup()-methode "if (!ble.begin(false))" in "if (!ble.begin(true))" als u fouten wilt opsporen.

Deze code is vrij duidelijk. Ik heb beschrijvingen van elke aangepaste methode opgenomen. De installatiemethode zorgt ervoor dat de BLE-module klaar is om als GATT-server te fungeren. De lusmethode doorloopt een nep-sweep van de accelerometer-gyroscoopmodule (AGM) en genereert een willekeurig getal van 1 tot 100 voor deze waarden. De batterij loopt 1% leeg om batterijgebruik te simuleren. U kunt deze code eenvoudig vervangen door de werkelijke sensorwaarden. Deze code gaat ervan uit dat u een reeks AGM-gegevens verzendt, 6 metingen lang, in plaats van een enkele meting, aangezien het analyseren van een venster met AGM-gegevens waarschijnlijk nuttiger is dan een enkel gegevenspunt. Als u de arraygrootte wijzigt, moet u er rekening mee houden dat er wijzigingen nodig zijn in de Android Studio-code. Om een reeks gegevens vast te leggen, moet u een teller doorgeven samen met de gegevens die u wilt verzenden. Met deze teller kun je vinden waar je bent in het venster vanuit de Android Studio-applicatie, zodat je kunt wachten om naar de ontbrekende gegevenspunten in het venster te luisteren. Zonder de teller of met een array van andere grootte, zal het Android-studioproject ofwel datapunten missen of vast komen te zitten in een lus die wacht op de resterende datapunten die het verwacht.

Stap 3: Android Studio-code

Hier mijn repo voor dit project. Je kunt de volledige Android Studio-code hier bekijken.

OVERZICHT

Ik zal dit blijven updaten met een uitgebreider overzicht van hoe de arduino- en Android-code in detail werken … De app is volledig functioneel, dus voel je vrij om in de tussentijd zelf naar de code te kijken.

Stap 4: Laatste aanvraag

Laatste aanvraag
Laatste aanvraag
Laatste aanvraag
Laatste aanvraag
Laatste aanvraag
Laatste aanvraag

Gefeliciteerd! Uw applicatie wordt gedownload naar uw telefoon en uw draagbare apparaat wordt opgeladen en verzendt gegevens.

LANCEER DE APP

Om aan de slag te gaan, klikt u op het opstartpictogram voor de toepassing.

TOESTEMMINGEN

U moet het gebruik van bepaalde machtigingen goedkeuren om de app correct te laten werken.

SCANNEN NAAR APPARATEN

Klik vervolgens op de knop "Scannen" in de linkerbovenhoek van de app.

KIES JE DRAAGBARE APPARAAT

Selecteer vervolgens uw draagbare apparaat in de lijst met beschikbare BLE-apparaten. De naam is "BLE Arduino Hardware". GET DATA Wacht terwijl de app de AGM-gegevens ontvangt en bepaalt waar de gebruiker stilstaat of beweegt. BEKIJK JE RESULTATENBekijk de resultaten op het scherm! Klik op de synchronisatieknop om nog een lezing van gegevens te krijgen.

Aanbevolen: