Inhoudsopgave:
- Benodigdheden
- Stap 1: Ontwerp aangepaste services en kenmerken
- Stap 2: Arduino-code
- Stap 3: Android Studio-code
- Stap 4: Laatste aanvraag
Video: Bouw een draagbare bewegingstracker (BLE van Arduino naar een aangepaste Android Studio-app): 4 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:14
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:
- Aangepaste GATT-services en -kenmerken ontwerpen?
- Hoe de Adafruit Bluefruit LE SPI Friend te programmeren om op te treden als een GATT-server voor deze aangepaste services en kenmerken
- 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.
- Lezen: de Client (Android App) kan een waarde lezen van de GATT Server (Arduino)
- Schrijven: de client kan een waarde van de GATT-server wijzigen
- 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
- 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:
- 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.
- 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.
- 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
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:
Bouw een amateurradio APRS RX Only IGate met behulp van een Raspberry Pi en een RTL-SDR-dongle in minder dan een half uur - Ajarnpa
Bouw een amateurradio APRS RX Alleen IGate met behulp van een Raspberry Pi en een RTL-SDR-dongle in minder dan een half uur: Houd er rekening mee dat dit nu vrij oud is, dus sommige onderdelen zijn onjuist en verouderd. De bestanden die u moet bewerken, zijn gewijzigd. Ik heb de link bijgewerkt om je de nieuwste versie van de afbeelding te geven (gebruik 7-zip om het te decomprimeren) maar voor volledige instru
Game-saves kopiëren naar een MU van Microsoft of een derde partij op een eenvoudige manier: 9 stappen
Game Saves kopiëren naar een Microsoft of 3rd Party MU op de GEMAKKELIJKE MANIER .: Originele tutorial HIER Er zijn tal van Softmod-tutorials die er zijn en ze zijn allemaal goed, maar het is lastig om de opslagbestanden op de Xbox HDD te krijgen, ik heb een leven gemaakt cd die het eenvoudig maakt om dat te doen. Dit is geen complete softmod-tutorial, dit
Hoe maak je een DIY Bartop Arcade voor 2 spelers met aangepaste Marquee Coin Slots, met behulp van een doos van Pandora - Ajarnpa
Hoe maak je een DIY Bartop Arcade voor 2 spelers met aangepaste Marquee Coin Slots, met behulp van een doos van Pandora De muntsleuven worden zo gemaakt dat ze alleen munten ter grootte van een kwart en groter accepteren. Deze arcade wordt aangedreven
Bouw een willekeurige muziek- en lichtgenerator en een glimp van het bewijs van GOD - Ajarnpa
Bouw een willekeurige muziek- en lichtgenerator en een glimp van bewijs van GOD: echt willekeurige getallen genereren lijkt onmogelijk. Het is echter vrij eenvoudig om een microcontroller te gebruiken om pseudo-willekeurige getallen te genereren en deze vervolgens te gebruiken om geluiden en verschillende gekleurde lichten weer te geven. Terwijl de muziek die wordt gegenereerd n
Hoe bouw je een "top-of-the-line" Aangepaste pc: 12 stappen
Hoe bouw je een "top-of-the-line" Aangepaste pc: Nou, ik ben al een tijdje lid van Instructables nadat ik een jaar of zo geleden op deze website op Google stuitte. Ik besloot dat het tijd was om een Instructable te schrijven en deze ook daadwerkelijk te publiceren. Dus dit wordt uiteindelijk mijn eerste Instructable, dus wees ki