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
- Il dispositivo microntroller-based sarà server di GATT.
- L'applicazione Android sarà client GATT.
- Come visto dal punto di vista della comunicazione, il dispositivo basato su microcontrollore è Slave e l'applicazione Android è Master.
Domande:
- 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?
- 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)? - 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>