Sommario:

Costruisci un rilevatore di movimento indossabile (BLE da Arduino a un'app Android Studio personalizzata): 4 passaggi
Costruisci un rilevatore di movimento indossabile (BLE da Arduino a un'app Android Studio personalizzata): 4 passaggi

Video: Costruisci un rilevatore di movimento indossabile (BLE da Arduino a un'app Android Studio personalizzata): 4 passaggi

Video: Costruisci un rilevatore di movimento indossabile (BLE da Arduino a un'app Android Studio personalizzata): 4 passaggi
Video: ELF/EMBARC Bronchiectasis conference 2023 with subtitles 2024, Dicembre
Anonim
Costruisci un rilevatore di movimento indossabile (BLE da Arduino a un'app Android Studio personalizzata)
Costruisci un rilevatore di movimento indossabile (BLE da Arduino a un'app Android Studio personalizzata)

Bluetooth Low Energy (BLE) è una forma di comunicazione Bluetooth a bassa potenza. I dispositivi indossabili, come gli indumenti intelligenti che aiuto a progettare presso Predictive Wear, devono limitare il consumo energetico ove possibile per prolungare la durata della batteria e utilizzare frequentemente BLE. Il Bluetooth Special Interest Group (SIG) definisce diverse specifiche che un dispositivo dovrebbe implementare per interagire con un dispositivo Bluetooth, che chiamano "profili". La maggior parte dei profili delle applicazioni utilizza il General Attribute Profile (GATT) per inviare dati tramite un collegamento BLE. Ci sono tre concetti fondamentali in BLE: profili, servizi e attributi.

Bluetooth SIG ha standardizzato molti profili, servizi e attributi comuni. Tuttavia, durante la creazione di hardware personalizzato è spesso necessario creare servizi e attributi personalizzati e non sono disponibili molti tutorial. Per rendere le cose più difficili, Adafruit non fornisce alcuna guida sulla progettazione di applicazioni mobili da abbinare ai loro moduli BLE e il codice sorgente per le loro applicazioni è difficile da decodificare.

Questo tutorial ha lo scopo di spiegare:

  1. Come progettare servizi e caratteristiche GATT personalizzati
  2. Come programmare Adafruit Bluefruit LE SPI Friend per fungere da server GATT per questi servizi e caratteristiche personalizzati
  3. Come programmare un dispositivo Android per agire come client GATT per leggere i dati dal server GATT

Questo tutorial non è pensato per essere traducibile in un'applicazione pronta per la produzione: questa è semplicemente un'introduzione a BLE.

Lettura di sfondo:

  • Adafruit Bluefruit LE SPI Amico documentazione
  • Se non hai familiarità con GATT o BLE

Forniture

  • 1x - Un dispositivo Arduino (sto usando UNO per questo tutorial)
  • 1x - Adafruit Bluefruit LE SPI Friend
  • 8x - cavi jumper maschio-maschio
  • Attrezzatura di saldatura di base (per saldare i pin dell'intestazione su SPI Friend)
  • Un computer (per programmare il dispositivo Arduino e il dispositivo Android)

Passaggio 1: progettare servizi e caratteristiche personalizzati

INTRODUZIONE

Questo articolo fa un ottimo lavoro spiegando come progettare servizi e caratteristiche personalizzati. Consiglio vivamente di leggere questo articolo. Fornisco una panoramica molto semplice di seguito che trascura le sottigliezze a favore della semplicità.

I servizi GATT sono un insieme di caratteristiche.

Le caratteristiche GATT contengono una proprietà, un valore e zero o più descrittori.

  • Proprietà: come i dati devono essere gestiti dal cliente (App Android) es. leggere, scrivere, scrivere senza risposta, notificare e indicare.
  • Valore: il valore effettivo della caratteristica, ad es. 1089
  • Descrittori: si tratta di informazioni sul valore, ad es. l'unità, millisecondi

DESIGN

Ok, ora che sai quali sono i servizi e le caratteristiche, dobbiamo capire come progettare alcuni servizi e caratteristiche per ottenere i nostri dati personalizzati e inviarli dal nostro server GATT (Arduino) al client (App Android). Consideriamo un dispositivo Arduino che sta raccogliendo dati da un modulo accelerometro-giroscopio (AGM). Vogliamo raccogliere le misurazioni del giroscopio e dell'accelerazione da tre assi spaziali e l'ora in cui sono state effettuate queste misurazioni e trasmettere questi dati alla nostra applicazione mobile. Vogliamo anche sapere quando è necessario caricare il dispositivo, quindi vogliamo leggere il livello della batteria e trasmetterlo alla nostra applicazione mobile.

1. Possiamo utilizzare uno qualsiasi dei servizi e delle caratteristiche standard?

Bluetooth SIG ha standardizzato molti servizi e caratteristiche comuni. Innanzitutto, controlla questi per vedere se puoi cooptare uno dei servizi e delle caratteristiche standardizzati. I servizi e le caratteristiche standard possono utilizzare pacchetti di dati molto più piccoli poiché l'identificatore univoco universale (UUID) è di 16 bit mentre i servizi e le caratteristiche personalizzati devono utilizzare 128 bit per i loro UUID. Maggiori informazioni sugli UUID in seguito. Dalla nostra ricerca, abbiamo trovato un "servizio batteria" standardizzato che contiene un "livello batteria" caratteristico.

2. Separare tutti i valori dei dati che si desidera inviare tramite BLE in caratteristiche e servizi

Possiamo suddividere i nostri punti dati personalizzati in sette caratteristiche personalizzate all'interno di un servizio personalizzato. Chiameremo questo servizio il "servizio AGM". Conterrà 7 caratteristiche: accelerazione x, accelerazione y, accelerazione z, giroscopio x, giroscopio y, giroscopio z e un riferimento temporale.

3. Determinare le proprietà necessarie per ciascuna caratteristica

Ci sono diverse proprietà che una caratteristica può avere.

  1. Leggi: il Client (App Android) può leggere un valore dal Server GATT (Arduino)
  2. Scrivi: il Cliente può modificare un valore dal Server GATT
  3. Indicare: il Cliente riceverà una notifica se un valore cambia dal Server GATT e il Cliente dovrà inviare conferma al Server GATT
  4. Notifica: il Cliente riceverà una notifica se un valore cambia dal Server GATT e non è previsto che il Cliente invii una conferma al Server GATT

Per questo tutorial, imposteremo tutte le nostre caratteristiche da leggere, ad eccezione del livello della batteria che avrà proprietà sia di notifica che di lettura.

4. Genera UUID per servizi e caratteristiche personalizzati e trova UUID standard

Come accennato in precedenza, i servizi e le caratteristiche standardizzati di Bluetooth SIG utilizzano un UUID a 16 bit mentre i servizi e le caratteristiche personalizzati utilizzano UUID a 128 bit. Ad esempio, vedere il numero assegnato al servizio batteria sul Bluetooth SIG. Il numero assegnato 0x180F rappresenta l'UUID a 128 bit "0000180F-0000-1000-8000-00805F9B34FB". Le quattro cifre (16 bit) in grassetto sono uniche per il particolare servizio o caratteristica standardizzata, mentre gli altri caratteri sono conservati tra tutti i servizi e le caratteristiche standardizzati. Poiché sia il client che il server GATT sanno che i servizi e le caratteristiche standardizzati variano solo in base alle cifre in grassetto, le dimensioni dei pacchetti di dati possono essere sostanzialmente ridotte. Tuttavia, i servizi e le caratteristiche personalizzati non possono funzionare sotto questo stesso presupposto.

Invece, i servizi e le caratteristiche personalizzati devono utilizzare UUID a 128 bit non abbreviati. Ecco un generatore di UUID online. Qualsiasi UUID diverso dall'UUID standard è accettabile per un UUID personalizzato. Tuttavia, una convenzione di denominazione tipica è quella di indicare un servizio personalizzato 00000001-… e le caratteristiche all'interno di tale servizio personalizzato 00000002-…

Ecco un foglio di calcolo riassuntivo dei servizi e delle caratteristiche che implementeremo insieme ai loro UUID

Passaggio 2: codice Arduino

AGGIORNA L'AMICO BLUEFRUIT LE SPI

Innanzitutto, collega Adafruit Bluefruit LE SPI Friend come specificato nella loro guida di collegamento e accendi il dispositivo Arduino. Assicurati di poter trovare Adafruit Bluefruit LE SPI Friend sul tuo dispositivo Android durante la scansione dei dispositivi Bluetooth. Scarica l'app Bluefruit Connect, connettiti all'Adafruit Bluefruit LE SPI Friend e consentigli di aggiornare il firmware sul dispositivo. Questo passaggio è importante. Se non aggiorni il firmware, i comandi che invii al dispositivo tramite Arduino probabilmente falliranno e non ci sarà un errore evidente per scoprire qual è il problema.

Qui il mio repo per questo progetto. Puoi vedere il codice completo di Arduino qui.

PANORAMICA

Alcune cose importanti da notare:

  1. Nel metodo setup(), tutti gli UUID personalizzati devono contenere "-" tra ogni due caratteri. Ad esempio, "AT+GATTADDCHAR=UUID128=00-00-00-05-62-7E-47-E5-A3-FC-DD-AB-D9-7A-A9-66" funzionerà. "AT+GATTADDCHAR=UUID128=00000005-627E-47E5-A3fCDDABD97AA966" non funzionerà.
  2. Nota che nel metodo setup(), "battery.begin(true);" chiama "ble.reset();" automaticamente. Se non usi il servizio batteria come ho fatto io, devi resettare il modulo ble (usa "ble.reset();") dove ho il comando "battery.begin(true);".
  3. Nel metodo setup(), cambia "if (!ble.begin(false))" in "if (!ble.begin(true))" se vuoi eseguire il debug.

Questo codice è abbastanza autoesplicativo. Ho incluso le descrizioni di ogni metodo personalizzato. Il metodo di installazione prepara il modulo BLE ad agire come server GATT. Il metodo loop passa attraverso una scansione falsa del modulo giroscopio accelerometro (AGM) e genera un numero casuale da 1 a 100 per questi valori. La batteria viene scaricata dell'1% per simulare l'uso della batteria. È possibile sostituire facilmente questo codice con i valori effettivi del sensore. Questo codice presuppone che trasmetterai una serie di dati AGM, lunga 6 misurazioni, piuttosto che una singola misurazione poiché l'analisi di una finestra di dati AGM è probabilmente più utile di un singolo punto di dati. Se modifichi la dimensione dell'array, tieni presente che saranno necessarie modifiche nel codice di Android Studio. Per acquisire un array di dati, devi passare un contatore insieme ai dati che intendi inviare. Questo contatore ti consente di trovare dove ti trovi nella finestra dall'applicazione Android Studio in modo da poter aspettare di ascoltare i punti dati mancanti nella finestra. Senza il contatore o con un array di dimensioni diverse, il progetto Android Studio o mancherà i punti dati o si bloccherà in un ciclo in attesa dei punti dati rimanenti che si aspetta.

Passaggio 3: codice Android Studio

Qui il mio repo per questo progetto. Puoi vedere il codice completo di Android Studio qui.

PANORAMICA

Continuerò ad aggiornarlo con una panoramica più approfondita di come funzionano in dettaglio il codice arduino e Android … L'app è completamente funzionante, quindi nel frattempo sentiti libero di dare un'occhiata al codice.

Passaggio 4: applicazione finale

Applicazione finale
Applicazione finale
Applicazione finale
Applicazione finale
Applicazione finale
Applicazione finale

Congratulazioni! L'applicazione viene scaricata sul telefono e il dispositivo indossabile viene caricato e trasmette i dati.

LANCIA L'APP

Per iniziare, fai clic sull'icona di avvio dell'applicazione.

CONCESSIONE PERMESSI

Dovrai approvare l'uso di alcune autorizzazioni affinché l'app funzioni correttamente.

SCANSIONE DEI DISPOSITIVI

Quindi, fai clic sul pulsante "Scansione" nell'angolo in alto a sinistra dell'app.

SELEZIONA IL TUO DISPOSITIVO INDOSSABILE

Quindi, seleziona il tuo dispositivo indossabile dall'elenco dei dispositivi BLE disponibili. Il suo nome è "BLE Arduino Hardware". OTTIENI DATI Attendi mentre l'app ottiene i dati AGM e determina dove l'utente è fermo o si muove. GUARDA I TUOI RISULTATIGuarda i risultati sullo schermo! Fare clic sul pulsante di sincronizzazione per ottenere un'altra lettura dei dati.

Consigliato: