Cuprins:

Construiți un tracker de mișcare portabil (BLE de la Arduino la o aplicație personalizată Android Studio): 4 pași
Construiți un tracker de mișcare portabil (BLE de la Arduino la o aplicație personalizată Android Studio): 4 pași

Video: Construiți un tracker de mișcare portabil (BLE de la Arduino la o aplicație personalizată Android Studio): 4 pași

Video: Construiți un tracker de mișcare portabil (BLE de la Arduino la o aplicație personalizată Android Studio): 4 pași
Video: High Density 2022 2024, Noiembrie
Anonim
Construiți un tracker de mișcare portabil (BLE de la Arduino la o aplicație personalizată Android Studio)
Construiți un tracker de mișcare portabil (BLE de la Arduino la o aplicație personalizată Android Studio)

Bluetooth Low Energy (BLE) este o formă de comunicație Bluetooth de consum redus. Dispozitivele purtabile, cum ar fi articolele de îmbrăcăminte inteligente pe care le ajut să le proiectez la Predictive Wear, trebuie să limiteze consumul de energie ori de câte ori este posibil pentru a prelungi durata de viață a bateriei și să utilizeze frecvent BLE. Grupul de interes special Bluetooth (SIG) definește mai multe specificații pe care un dispozitiv trebuie să le implementeze pentru a interacționa cu un dispozitiv Bluetooth, pe care îl numesc „profiluri”. Majoritatea profilurilor aplicației utilizează profilul general de atribute (GATT) pentru a trimite date printr-un link BLE. Există trei concepte fundamentale în BLE: profiluri, servicii și atribute.

Bluetooth SIG a standardizat multe profiluri, servicii și atribute comune. Cu toate acestea, atunci când creați hardware personalizat, este adesea nevoie să creați servicii și atribute personalizate și nu sunt disponibile multe tutoriale. Pentru a face lucrurile mai dificile, Adafruit nu oferă nicio îndrumare cu privire la proiectarea aplicațiilor mobile care să se asocieze cu modulele lor BLE, iar codul sursă pentru aplicațiile lor este dificil de inversat.

Acest tutorial își propune să explice:

  1. Cum să proiectați servicii și caracteristici GATT personalizate
  2. Cum se programează Adafruit Bluefruit LE SPI Friend să acționeze ca un server GATT pentru aceste servicii și caracteristici personalizate
  3. Cum se programează un dispozitiv Android să acționeze ca client GATT pentru a citi datele de pe serverul GATT

Acest tutorial nu este destinat a fi tradus într-o aplicație pregătită pentru producție - aceasta este pur și simplu o introducere în BLE.

Lectură de fundal:

  • Documentația Adafruit Bluefruit LE SPI Friend
  • Dacă nu sunteți familiarizați cu GATT sau BLE

Provizii

  • 1x - Un dispozitiv Arduino (folosesc UNO pentru acest tutorial)
  • 1x - Adafruit Bluefruit LE SPI Friend
  • 8x - fire de la jumper la mascul
  • Echipament de lipit de bază (pentru lipirea știfturilor antetului de pe SPI Friend)
  • Un computer (pentru a programa dispozitivul Arduino și dispozitivul Android)

Pasul 1: Proiectați servicii și caracteristici personalizate

INTRODUCERE

Acest articol face o treabă excelentă explicând cum să proiectați servicii și caracteristici personalizate. Vă recomand cu drag să citiți acest articol. Vă ofer mai jos o prezentare foarte simplă, care neglijează subtilitățile în favoarea simplității.

Serviciile GATT sunt o colecție de caracteristici.

Caracteristicile GATT conțin o proprietate, o valoare și zero sau mai mulți descriptori.

  • Proprietate: modul în care datele trebuie tratate de client (aplicația Android) de ex. citiți, scrieți, scrieți fără răspuns, anunțați și indicați.
  • Valoare: valoarea reală a caracteristicii, de ex. 1089
  • Descriptori: acestea sunt informații despre valoare de ex. unitatea, milisecunde

PROIECTA

Bine, acum știi ce sunt serviciile și caracteristicile, trebuie să ne dăm seama cum să proiectăm unele servicii și caracteristici pentru a obține datele noastre personalizate și pentru a le trimite de pe serverul nostru GATT (Arduino) către client (aplicația Android). Să luăm în considerare un dispozitiv Arduino care colectează date de la un modul accelerometru-giroscop (AGM). Vrem să colectăm măsurători de giroscop și accelerație de pe trei axe spațiale și timpul în care au fost efectuate aceste măsurători și să transmitem aceste date aplicației noastre mobile. De asemenea, vrem să știm când trebuie să încărcăm dispozitivul, așa că vrem să citim nivelul bateriei și să îl transmitem aplicației noastre mobile.

1. Putem folosi oricare dintre serviciile și caracteristicile standard?

Bluetooth SIG a standardizat multe servicii și caracteristici comune. Mai întâi, verificați-le pentru a vedea dacă puteți coopta vreunul dintre serviciile și caracteristicile standardizate. Serviciile și caracteristicile standard pot utiliza pachete de date mult mai mici, deoarece Identificatorul unic universal (UUID) este de 16 biți, în timp ce serviciile și caracteristicile personalizate trebuie să utilizeze 128 de biți pentru UUID-urile lor. Mai multe despre UUID-uri mai târziu. Din căutarea noastră, am găsit un „serviciu de baterie” standardizat care conține un „nivel de baterie” caracteristic.

2. Separați toate valorile de date pe care doriți să le trimiteți prin BLE în caracteristici și servicii

Putem împărți punctele noastre de date personalizate în șapte caracteristici personalizate într-un singur serviciu personalizat. Vom numi acest serviciu „serviciul AGM”. Acesta va conține 7 caracteristici: accelerare x, accelerare y, accelerație z, giroscop x, giroscop y, giroscop z și o referință în timp.

3. Determinați proprietățile necesare pentru fiecare caracteristică

Există mai multe proprietăți pe care le poate avea o caracteristică.

  1. Citiți: Clientul (aplicația Android) poate citi o valoare de pe serverul GATT (Arduino)
  2. Scrie: Clientul poate modifica o valoare de pe serverul GATT
  3. Indicați: Clientul va fi notificat dacă o valoare se modifică de la serverul GATT și se așteaptă ca clientul să trimită confirmarea către serverul GATT
  4. Notificare: Clientul va fi notificat dacă o valoare se modifică de la serverul GATT și nu este de așteptat ca Clientul să trimită confirmarea către serverul GATT

Pentru acest tutorial, vom seta toate caracteristicile noastre de citit, cu excepția nivelului bateriei, care va avea atât proprietăți de notificare, cât și de citire.

4. Generați UUID-uri pentru servicii și caracteristici personalizate și găsiți UUID-uri standard

După cum am menționat pe scurt mai devreme, serviciile și caracteristicile standardizate Bluetooth SIG utilizează un UUID pe 16 biți, în timp ce serviciile și caracteristicile personalizate utilizează UUID-uri pe 128 de biți. De exemplu, consultați numărul atribuit serviciului bateriei pe Bluetooth SIG. Numărul atribuit 0x180F reprezintă UUID-ul pe 128 de biți "0000180F-0000-1000-8000-00805F9B34FB". Cele patru cifre (16 biți) cu caractere aldine sunt unice pentru serviciul sau caracteristica standardizată, în timp ce celelalte caractere sunt păstrate între toate serviciile și caracteristicile standardizate. Deoarece atât clientul, cât și serverul GATT știu că serviciile și caracteristicile standardizate variază doar în funcție de cifrele cu caractere aldine, dimensiunile pachetelor de date pot fi reduse substanțial. Cu toate acestea, serviciile și caracteristicile personalizate nu pot funcționa sub aceeași ipoteză.

În schimb, serviciile și caracteristicile personalizate trebuie să utilizeze UUID-uri pe 128 biți fără abrevieri. Iată un generator UUID online. Orice UUID altul decât UUID standardizat este acceptabil pentru un UUID personalizat. Cu toate acestea, o convenție tipică de denumire este de a indica un serviciu personalizat 00000001-… și caracteristicile din cadrul acelui serviciu personalizat 00000002- …

Iată o foaie de calcul rezumativă a serviciilor și caracteristicilor pe care le vom implementa împreună cu UUID-urile acestora

Pasul 2: Cod Arduino

ACTUALIZAȚI BLUEFRUIT LE SPI FRIEND

Mai întâi, conectați Adafruit Bluefruit LE SPI Friend așa cum specifică în ghidul de conectare și porniți dispozitivul Arduino. Asigurați-vă că puteți găsi Adafruit Bluefruit LE SPI Friend pe dispozitivul dvs. Android atunci când căutați dispozitive Bluetooth. Descărcați aplicația Bluefruit Connect, conectați-vă la Adafruit Bluefruit LE SPI Friend și permiteți-i să actualizeze firmware-ul de pe dispozitiv. Acest pas este important. Dacă nu actualizați firmware-ul, comenzile pe care le lansați dispozitivul prin Arduino vor eșua probabil și nu va exista o eroare evidentă pentru a descoperi care este problema.

Aici repo-ul meu pentru acest proiect. Puteți vedea codul Arduino complet aici.

PREZENTARE GENERALĂ

Câteva lucruri importante de remarcat:

  1. În metoda setup (), toate UUID-urile personalizate trebuie să conțină „-” între fiecare două caractere. De exemplu, va funcționa „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” nu va funcționa.
  2. Rețineți că în metoda setup (), „battery.begin (true);” apelează „ble.reset ();” automat. Dacă nu utilizați serviciul bateriei așa cum am făcut, trebuie să resetați modulul ble (utilizați "ble.reset ();") unde am comanda "battery.begin (true);".
  3. În metoda setup (), schimbați „if (! Ble.begin (false))” la „if (! Ble.begin (true))” dacă doriți să depanați.

Acest cod este destul de auto-explicativ. Am inclus descrieri ale fiecărei metode personalizate. Metoda de configurare pregătește modulul BLE să acționeze ca server GATT. Metoda buclei trece printr-o măturare falsă a modulului giroscopului accelerometrului (AGM) și generează un număr aleatoriu de la 1 la 100 pentru aceste valori. Bateria este descărcată cu 1% pentru a simula utilizarea bateriei. Puteți înlocui acest cod cu valorile reale ale senzorului cu ușurință. Acest cod presupune că veți transmite o serie de date AGM, cu 6 măsurători, mai degrabă decât o singură măsurare, deoarece analizarea unei ferestre de date AGM este probabil mai utilă decât un singur punct de date. Dacă modificați dimensiunea matricei, rețineți că vor exista modificări necesare în codul de studio Android. Pentru a captura o serie de date, trebuie să treceți un contor împreună cu datele pe care intenționați să le trimiteți. Acest contor vă permite să găsiți unde vă aflați în fereastră din aplicația Android Studio, astfel încât să puteți aștepta să ascultați punctele de date lipsă din fereastră. Fără tejghea sau cu o matrice de dimensiuni diferite, proiectul de studio Android va pierde fie punctele de date, fie va rămâne blocat într-o buclă în așteptarea punctelor de date rămase pe care le așteaptă.

Pasul 3: Android Studio Code

Aici repo-ul meu pentru acest proiect. Puteți vedea codul complet Android Studio aici.

PREZENTARE GENERALĂ

Voi continua să actualizez acest lucru cu o prezentare mai detaliată a modului în care funcționează în detaliu codul arduino și Android … Aplicația este pe deplin funcțională, așa că nu ezitați să priviți singur codul între timp.

Pasul 4: Cerere finală

Cerere finală
Cerere finală
Cerere finală
Cerere finală
Cerere finală
Cerere finală

Felicitări! Aplicația dvs. este descărcată pe telefon, iar dispozitivul purtabil este încărcat și transmite date.

LANSAȚI APLICAȚIA

Pentru a începe, faceți clic pe pictograma lansatorului pentru aplicație.

PERMISII DE ACORDARE

Va trebui să aprobați utilizarea unor permisiuni pentru ca aplicația să funcționeze corect.

SCANARE DISPOZITIVE

Apoi, faceți clic pe butonul „Scanați” din colțul din stânga sus al aplicației.

ALEGEȚI-VĂ DISPOZITIVUL PORTABIL

Apoi, selectați dispozitivul purtabil din lista dispozitivelor BLE disponibile. Numele său este „BLE Arduino Hardware”. OBȚINEȚI DATE Așteptați în timp ce aplicația obține datele AGM și determină unde se află sau se mișcă utilizatorul. VEZI REZULTATELE tale Verifică rezultatele pe ecran! Faceți clic pe butonul de sincronizare pentru a obține o altă citire a datelor.

Recomandat: