Sommario:
- Forniture
- Passaggio 1: progettare servizi e caratteristiche personalizzati
- Passaggio 2: codice Arduino
- Passaggio 3: codice Android Studio
- Passaggio 4: applicazione finale
Video: Costruisci un rilevatore di movimento indossabile (BLE da Arduino a un'app Android Studio personalizzata): 4 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 09:59
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:
- Come progettare servizi e caratteristiche GATT personalizzati
- Come programmare Adafruit Bluefruit LE SPI Friend per fungere da server GATT per questi servizi e caratteristiche personalizzati
- 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.
- Leggi: il Client (App Android) può leggere un valore dal Server GATT (Arduino)
- Scrivi: il Cliente può modificare un valore dal Server GATT
- Indicare: il Cliente riceverà una notifica se un valore cambia dal Server GATT e il Cliente dovrà inviare conferma al Server GATT
- 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:
- 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à.
- 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);".
- 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
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:
[Mouse indossabile] Controller per mouse indossabile basato su Bluetooth per Windows 10 e Linux: 5 passaggi
[Wearable Mouse] Controller per mouse indossabile basato su Bluetooth per Windows 10 e Linux: ho realizzato un controller per mouse basato su Bluetooth che può essere utilizzato per controllare il puntatore del mouse ed eseguire operazioni relative al mouse del PC al volo, senza toccare alcuna superficie. Il circuito elettronico, incorporato in un guanto, può essere utilizzato per tracciare h
Rilevatore di movimento utilizzando NodeMCU: 5 passaggi
Rilevatore di movimento utilizzando NodeMCU: In questo progetto, utilizzando semplicemente un sensore di movimento è possibile rilevare la presenza di qualsiasi essere umano o animale. E dalla piattaforma chiamata thingsio puoi monitorare la data e l'ora in cui è stata rilevata la presenza
Arduino - Led rotante sul movimento - Articolo indossabile (ispirato a Chronal Accelerator Tracer Overwatch): 7 passaggi (con immagini)
Arduino - Rotating Led on Movement - Wearable Item (ispirato a Chronal Accelerator Tracer Overwatch): questo istruibile ti aiuterà a collegare un accelerometro e un anello LED Neopixel. Fornirò il codice per leggere l'accelerometro e ottenere questo effetto con il tuo neopixel animazione. Per questo progetto ho usato l'anello Neopixel Adafruit a 24 bit e l'MP
Costruisci un rilevatore di inquinamento da particelle LoRa: 8 passaggi
Costruisci un rilevatore di inquinamento da particelle LoRa: costruiremo un rilevatore di particolato utilizzando il sensore di qualità dell'aria PM2.5, ESP32, UNO e il modulo LoRa. L'inquinamento da particelle, noto anche come particolato, è una miscela di grandi dimensioni di solidi e liquidi presenti nell'aria. Alcuni di questi p
Rilevatore di fumo IOT: aggiorna il rilevatore di fumo esistente con IOT: 6 passaggi (con immagini)
Rilevatore di fumo IOT: aggiorna il rilevatore di fumo esistente con IOT: elenco dei contributori, Inventore: Tan Siew Chin, Tan Yit Peng, Tan Wee Heng Supervisore: Dr Chia Kim Seng Dipartimento di ingegneria meccatronica e robotica, Facoltà di ingegneria elettrica ed elettronica, Universiti Tun Hussein Onn Malaysia.Distribuzione