我最近开始学习开发基于微控制器的设备,该设备将具有 BLE 模块。该设备应该将从传感器获取的模拟读数发送到我要开发的 android 应用程序。
我对 GATT 工作方式的研究是:
- 基于微控制器的设备将是 GATT 服务器。
- android 应用程序将是 GATT 客户端。
- 从通信的角度来看,基于微控制器的设备是从属设备,而安卓应用程序是主控设备。
问题:
- 如何确定需要定义的属性数量,以便从 GATT 客户端接收命令并发送响应(这将是一个浮点值)?我是否需要有两个不同的属性:一个用于 Android 发送命令,另一个用于基于微控制器的设备向 android 发送数据?或者我可以使用单个属性?
- GATT 似乎是一个事件驱动的系统。
2.1:当android向基于微控制器的设备发送命令时会产生什么事件:(客户端到服务器)?
2.2:在Android应用程序要读取的属性上写入数据时是否会产生事件:(服务器到客户端)? - android 应用程序(GATT 客户端)应使用读/写命令与基于微控制器的设备(GATT 服务器)进行通信。并且,GATT Server 应该使用 Notify/Indicate 将数据传递给 GATT Client。我的理解正确吗?
我正在使用这个 BlueGiga BLE112 模块进行开发。
到目前为止,我编写的 gatt.xml 文件是:
<?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>