2014-05-19 22 views
6

Ho recentemente iniziato a imparare a sviluppare un dispositivo basato su mircocontroller con modulo BLE. Il dispositivo dovrebbe inviare la lettura analogica recuperata dal sensore ad un'applicazione Android che sto per sviluppare.
per quello che ho studiato circa il modo in cui funziona è GATT:Informazioni sul protocollo GATT in BLE

  1. Il dispositivo microntroller-based sarà server di GATT.
  2. L'applicazione Android sarà client GATT.
  3. Come visto dal punto di vista della comunicazione, il dispositivo basato su microcontrollore è Slave e l'applicazione Android è Master.

Domande:

  1. Come faccio a decidere il numero di attributi che ho bisogno di definire al fine di ricevere comandi dal GATT Cliente e inviare la risposta (che sta per essere un valore float)? Devo avere due attributi distinti: uno per Android per inviare comandi e uno per il dispositivo basato su microprocessore per inviare dati ad Android? Oppure posso usare un singolo attributo?
  2. GATT sembra essere un sistema basato su eventi.
    2.1: Quali eventi verranno generati quando Android invia un comando al dispositivo basato su microcontroller: (da client a server)?
    2.2: verrà generato un evento quando i dati sono scritti sull'attributo che verrà letto dall'applicazione Android: (Da server a client)?
  3. L'applicazione Android (GATT Client) deve utilizzare i comandi di lettura/scrittura per comunicare con il dispositivo basato su microprocessore (GATT Server). E, il server GATT dovrebbe utilizzare Notifica/Indicare per passare i dati al client GATT. La mia comprensione è corretta?

Sto usando this BlueGiga BLE112 Module per lo sviluppo.

Il file gatt.xml che ho finora ho scritto è:

<?xml version="1.0" encoding="UTF-8" ?> 
<configuration> 
<!-- 1800: org.bluetooth.service.generic_access --> 
<service uuid="1800" id="generic_access"> 
    <description>Generic Access</description> 
    <!-- 2A00: org.bluetooth.characteristic.gap.device_name --> 
    <characteristic uuid="2A00" id="c_device_name"> 
     <description>Device Name</description> 
     <properties read="true" const="true" /> 
     <value>MyBLEDev</value> 
    </characteristic> 
    <!-- 2A01: org.bluetooth.characteristic.gap.appearance --> 
    <characteristic uuid="2A01" id="c_appearance"> 
     <description>Appearance</description> 
     <properties read="true" const="true" /> 
     <value type="hex">0300</value> 
    </characteristic> 
    </service> 

    <!-- custom service --> 
    <service uuid="624e957f-cb42-4cd6-bacc-84aeb898f69b" advertise="true"> 
    <description>Custom Device Service</description> 

    <!-- custom write-only characteristic for Client to send commands to fetch reading --> 
    <characteristic uuid="a57892fe-4f58-97d4-a5245-78a4125d3e6" id="c_cmd_TxReading"> 
     <description>Request for Reading</description> 
     <properties write="true" /> 
     <value length="4" /> 
    </characteristic> 

    <characteristic uuid="8fde302a-56ac-b289-65ed-a577ed66b89c" id="c_reading"> 
     <description>Measurement</description> 
     <properties read="true" write="true" /> 
     <value length="4" type="float32" /> 
    </characteristic> 
</service> 

risposta

8

vedo un server GATT come un pezzo di memoria su un'altra macchina. Puoi richiedere blocchi particolari per maniglie e ottenere informazioni diverse. Puoi fare in modo che l'altra macchina faccia cose diverse o risponda in modi diversi scrivendo valori su tali maniglie. La differenza rispetto allo spazio di memoria è che ogni handle può contenere diverse dimensioni di informazioni e ognuna con un UUID che identifica come interpretare i dati che si trovano lì. In uno spazio di memoria regolare ogni "handle" sarebbe un indirizzo, ogni blocco sarebbe un singolo byte e non c'è modo di capire come interpretare quei dati senza alcune altre informazioni.

Quindi ... domande:

  1. Come la maggior parte domande su qui, la risposta è "dipende". Se vuoi semplicemente recuperare il valore, hai solo un singolo attributo con i dati che possono essere recuperati dal client. Se desideri anche configurarlo in modo che il server GATT invii notifiche ogni volta che tale valore cambia, devi anche aggiungere un handle di configurazione caratteristica del client a quell'attributo. Ad esempio, ho un accelerometro con 3 attributi per i valori X, Y e Z e un altro dispositivo che riporta tutti i 3 valori come singolo attributo, poiché si tratta di un tipo di valore che non è stato standardizzato. definendo il proprio UUID personalizzato.Se stai misurando qualcosa che ha già un layout standard, dovresti probabilmente usarlo)

  2. GATT ha alcuni aspetti legati all'evento e altri aspetti che sono fatti in serie. Ad esempio, puoi negoziare una sola richiesta di connessione alla volta. Tuttavia, puoi ricevere notifiche in qualsiasi ordine da qualsiasi numero di attributi in qualsiasi momento.

    1. Non è possibile definire i propri comandi con GATT. Sei limitato a cose come "read from handle" o "write to handle" simile alla manipolazione di un blocco di memoria. L'implementazione sottostante può dipendere dall'hardware, ma in genere è possibile attivare una sorta di evento quando viene manipolato un handle.

    2. È possibile richiedere eventi sottoscrivendo notifiche o indicazioni su un determinato attributo.

  3. Sì, è corretto.