Taula de continguts:

Creeu un rastrejador de moviment usable (BLE des d'Arduino fins a una aplicació personalitzada d'Android Studio): 4 passos
Creeu un rastrejador de moviment usable (BLE des d'Arduino fins a una aplicació personalitzada d'Android Studio): 4 passos

Vídeo: Creeu un rastrejador de moviment usable (BLE des d'Arduino fins a una aplicació personalitzada d'Android Studio): 4 passos

Vídeo: Creeu un rastrejador de moviment usable (BLE des d'Arduino fins a una aplicació personalitzada d'Android Studio): 4 passos
Vídeo: Webinar: Additive Methods for Two-Sided Boards on the V-One 2024, De novembre
Anonim
Creeu un rastrejador de moviment usable (BLE des d'Arduino fins a una aplicació personalitzada d'Android Studio)
Creeu un rastrejador de moviment usable (BLE des d'Arduino fins a una aplicació personalitzada d'Android Studio)

Bluetooth Low Energy (BLE) és una forma de comunicació Bluetooth de baixa potència. Els dispositius portables, com ara les peces intel·ligents que ajudo a dissenyar a Predictive Wear, han de limitar el consum d’energia sempre que sigui possible per allargar la vida de la bateria i fer servir sovint BLE. El Grup d'Interès Especial Bluetooth (SIG) defineix diverses especificacions que un dispositiu hauria d'implementar per interactuar amb un dispositiu Bluetooth, que anomenen "perfils". La majoria de perfils d'aplicacions utilitzen el perfil general d'atribut (GATT) per enviar dades mitjançant un enllaç BLE. Hi ha tres conceptes fonamentals a BLE: perfils, serveis i atributs.

Bluetooth SIG ha normalitzat molts perfils, serveis i atributs comuns. No obstant això, quan es crea maquinari personalitzat, sovint cal crear serveis i atributs personalitzats i no hi ha molts tutorials disponibles. Per fer les coses més difícils, Adafruit no proporciona cap guia sobre el disseny d’aplicacions mòbils per combinar-les amb els seus mòduls BLE i el codi font de les seves aplicacions és difícil d’enginyeria inversa.

Aquest tutorial pretén explicar:

  1. Com dissenyar serveis i característiques GATT personalitzats
  2. Com programar Adafruit Bluefruit LE SPI Friend perquè actuï com a servidor GATT per a aquests serveis i característiques personalitzats
  3. Com programar un dispositiu Android perquè actuï com a client GATT per llegir les dades del servidor GATT

No es pretén que aquest tutorial es pugui traduir en una aplicació preparada per a la producció, sinó simplement una introducció a BLE.

Lectura de fons:

  • Documentació Adafruit Bluefruit LE SPI Friend
  • Si no esteu familiaritzat amb GATT o BLE

Subministraments

  • 1x: un dispositiu Arduino (estic utilitzant UNO per a aquest tutorial)
  • 1x - Adafruit Bluefruit LE SPI Friend
  • 8x: cables de pont masculí a masculí
  • Equip bàsic de soldadura (per soldar els passadors de capçalera del SPI Friend)
  • Un ordinador (per programar el dispositiu Arduino i el dispositiu Android)

Pas 1: dissenyar serveis i característiques personalitzats

INTRODUCCIÓ

Aquest article fa una gran feina explicant com dissenyar serveis i característiques personalitzats. Us recomano llegir aquest article. A continuació ofereixo una descripció molt senzilla que descuida les subtileses a favor de la simplicitat.

Els serveis GATT són una col·lecció de característiques.

Les característiques del GATT contenen una propietat, un valor i zero o més descriptors.

  • Propietat: com han de gestionar les dades el client (aplicació per a Android), p. llegir, escriure, escriure sense resposta, notificar i indicar.
  • Valor: el valor real de la característica, p. Ex. 1089
  • Descriptors: es tracta d'informació sobre el valor, p. la unitat, mil·lisegons

DISSENY

D’acord, ara ja sabeu què són els serveis i les característiques, hem d’esbrinar com dissenyar alguns serveis i característiques per obtenir les nostres dades personalitzades i enviar-les des del nostre servidor GATT (Arduino) al client (aplicació per a Android). Considerem un dispositiu Arduino que recopila dades d’un mòdul acceleròmetre-giroscopi (AGM). Volem recollir mesures de giroscopi i acceleració de tres eixos espacials i el temps en què es van prendre aquestes mesures i transmetre aquestes dades a la nostra aplicació mòbil. També volem saber quan hem de carregar el dispositiu, de manera que volem llegir el nivell de la bateria i transmetre’l a la nostra aplicació mòbil.

1. Podem utilitzar algun dels serveis i característiques estàndard?

Bluetooth SIG ha normalitzat molts serveis i característiques comuns. En primer lloc, comproveu-los per veure si podeu cooptar amb algun dels serveis i característiques estandarditzats. Els serveis i les característiques estàndard poden utilitzar paquets de dades molt més petits, ja que l’identificador únic universal (UUID) és de 16 bits, mentre que els serveis i característiques personalitzats han d’utilitzar 128 bits per als seus UUID. Més informació sobre els UUID més endavant. De la nostra cerca, hem trobat un "servei de bateria" estandarditzat que conté un "nivell de bateria" característic.

2. Separeu tots els valors de dades que vulgueu enviar per BLE en característiques i serveis

Podem dividir els nostres punts de dades personalitzats en set característiques personalitzades dins d’un servei personalitzat. Anomenarem aquest servei "servei AGM". Contindrà 7 característiques: acceleració x, acceleració y, acceleració z, giroscopi x, giroscopi y, giroscopi z i una referència temporal.

3. Determineu les propietats necessàries per a cada característica

Hi ha diverses propietats que pot tenir una característica.

  1. Llegir: el client (aplicació Android) pot llegir un valor des del servidor GATT (Arduino)
  2. Escriure: el client pot canviar un valor des del servidor GATT
  3. Indiqueu: es notificarà al client si canvia un valor del servidor GATT i s’espera que el client enviï confirmació al servidor GATT
  4. Notificar: el client rebrà una notificació si canvia un valor del servidor GATT i no s’espera que el client enviï confirmació al servidor GATT

Per a aquest tutorial, establirem totes les nostres característiques a llegir, a excepció del nivell de bateria que tindrà propietats de notificació i lectura.

4. Genereu UUID per a serveis i característiques personalitzats i cerqueu UUID estàndard

Com he esmentat breument anteriorment, els serveis i característiques estandarditzats per Bluetooth SIG utilitzen un UUID de 16 bits mentre que els serveis i característiques personalitzats utilitzen UUID de 128 bits. Per exemple, consulteu el número assignat del servei de bateria al Bluetooth SIG. El número assignat 0x180F representa el UUID de 128 bits "0000180F-0000-1000-8000-00805F9B34FB". Els quatre dígits (16 bits) en negreta són exclusius del servei o característica estandarditzada particulars, mentre que els altres caràcters es conserven entre tots els serveis i característiques estandarditzats. Atès que tant el client com el servidor GATT saben que els serveis i les característiques estandarditzades només varien segons els dígits en negreta, es poden reduir substancialment les mides dels paquets de dades. No obstant això, els serveis i les característiques personalitzades no poden funcionar sota aquest mateix supòsit.

En canvi, els serveis i característiques personalitzats han d’utilitzar UUID de 128 bits sense abreviar. Aquí hi ha un generador d’UUID en línia. Qualsevol UUID que no sigui l’UUID estandarditzat és acceptable per a un UUID personalitzat. No obstant això, una convenció de noms típica consisteix a designar un servei personalitzat 00000001- … i les característiques d'aquest servei personalitzat 00000002- …

Aquí teniu un full de càlcul resum dels serveis i característiques que implementarem juntament amb els seus UUID

Pas 2: Codi Arduino

ACTUALITZA EL BLUEFRUIT LE SPI FRIEND

En primer lloc, connecteu l’Adafruit Bluefruit LE SPI Friend tal com especifiquen a la seva guia de connexió i engegueu el dispositiu Arduino. Assegureu-vos que podeu trobar Adafruit Bluefruit LE SPI Friend al vostre dispositiu Android en cercar dispositius Bluetooth. Descarregueu l'aplicació Bluefruit Connect, connecteu-vos a l'Adafruit Bluefruit LE SPI Friend i permeteu-li actualitzar el firmware del dispositiu. Aquest pas és important. Si no actualitzeu el microprogramari, és probable que fallin les ordres que emeteu el dispositiu mitjançant Arduino i no hi haurà cap error evident per descobrir quin és el problema.

Aquí el meu repositori per a aquest projecte. Podeu veure el codi Arduino complet aquí.

VISIÓ GENERAL

Algunes coses importants a tenir en compte:

  1. Al mètode setup (), tots els UUID personalitzats han de contenir "-" entre cada dos caràcters. Per exemple, funcionarà "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" no funcionarà.
  2. Tingueu en compte que al mètode setup (), "battery.begin (true);" crida "ble.reset ();" automàticament. Si no utilitzeu el servei de bateria com he fet, haureu de restablir el mòdul ble (utilitzeu "ble.reset ();") on tinc l'ordre "battery.begin (true);".
  3. Al mètode setup (), canvieu "if (! Ble.begin (false))" per "if (! Ble.begin (true))" si voleu depurar.

Aquest codi s’explica per si mateix. He inclòs descripcions de cada mètode personalitzat. El mètode de configuració prepara el mòdul BLE per actuar com a servidor GATT. El mètode de bucle passa per un fals escombrat del mòdul giroscopi de l’acceleròmetre (AGM) i genera un número aleatori d’1 a 100 per a aquests valors. La bateria s’esgota un 1% per simular l’ús de la bateria. Podeu substituir aquest codi fàcilment pels valors reals del sensor. Aquest codi suposa que transmetreu una matriu de dades AGM, de 6 mesures de longitud, en lloc d'una mesura única, ja que probablement és més útil analitzar una finestra de dades AGM que un sol punt de dades. Si modifiqueu la mida de la matriu, tingueu en compte que hi haurà canvis necessaris al codi d'estudi d'Android. Per capturar un conjunt de dades, heu de passar un comptador juntament amb les dades que vulgueu enviar. Aquest comptador us permet trobar on us trobeu a la finestra des de l'aplicació Android Studio, de manera que podeu esperar a escoltar els punts de dades que falten a la finestra. Sense el comptador o amb una matriu de mida diferent, el projecte Android Studio faltarà punts de dades o quedarà atrapat en un bucle esperant els punts de dades restants que espera.

Pas 3: Codi d'Android Studio

Aquí el meu repositori per a aquest projecte. Podeu veure el codi complet d'Android Studio aquí.

VISIÓ GENERAL

Seguiré actualitzant-ho amb una visió general més completa de com funcionen detalladament el codi arduino i Android … L’aplicació és totalment funcional, així que no dubteu a mirar el codi vosaltres mentrestant.

Pas 4: sol·licitud final

Sol·licitud final
Sol·licitud final
Sol·licitud final
Sol·licitud final
Sol·licitud final
Sol·licitud final

Enhorabona! La vostra aplicació es descarrega al telèfon i el dispositiu portàtil es carrega i transmet dades.

INICIU L'APLICACIÓ

Per començar, feu clic a la icona del menú d'aplicacions de l'aplicació.

PERMISOS DE CONCESSIÓ

Haureu d'aprovar l'ús d'alguns permisos perquè l'aplicació funcioni correctament.

RECERCA DE DISPOSITIUS

A continuació, feu clic al botó "Escaneja" a l'extrem superior esquerre de l'aplicació.

Trieu el vostre dispositiu usable

A continuació, seleccioneu el dispositiu usable de la llista de dispositius BLE disponibles. El seu nom és "BLE Arduino Hardware". OBTENCIÓ DE DADES Espereu mentre l'aplicació obtingui les dades AGM i determini on l'usuari es troba o es mou. VEURE ELS SEUS RESULTATS Consulteu els resultats a la pantalla. Feu clic al botó de sincronització per obtenir una altra lectura de dades.

Recomanat: