首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解GATT协议在BLE中的应用

理解GATT协议在BLE中的应用
EN

Stack Overflow用户
提问于 2014-05-19 10:23:16
回答 1查看 7.2K关注 0票数 6

我最近开始学习开发一个基于镜像控制器的设备,它将有BLE模块。该设备应该将从传感器获取的模拟读数发送到我将要开发的android应用程序。

就我所研究的关贸总协定的运作方式而言:

  1. 基于微控制器的设备将是GATT服务器。
  2. android应用程序将是GATT客户端。
  3. 从通信的角度来看,基于微控制器的设备是从系统,而android应用程序是Master。

问题:

  1. 如何确定需要定义的属性数量,以便接收GATT客户端的命令并发送响应(这将是一个浮点值)?我是否需要有两个截然不同的属性:一个用于android发送命令,另一个用于基于微控制器的设备向Android发送数据?或者我可以用一个属性?
  2. 关贸总协定似乎是一个事件驱动的系统。 2.1:当android向基于微控制器的设备发送命令时,会产生哪些事件:(客户端到服务器)? 2.2:当数据写入到将被Android应用程序读取的属性上时,会生成事件吗?(服务器到客户端)?
  3. android应用程序(GATT Client)应该使用读/写命令与基于微控制器的设备(GATT Server)通信。关贸总协定服务器应使用通知/指示将数据传递给GATT客户端。我的理解正确吗?

我正在使用this BlueGiga BLE112 Module进行开发。

到目前为止,我编写的gatt.xml文件是:

代码语言:javascript
复制
<?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>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-20 13:25:30

我看到GATT服务器就像另一台机器上的一块内存。您可以通过句柄请求特定的块,并获得不同的信息。通过将值写入这些句柄,您可以让另一台机器执行不同的操作或以不同的方式作出响应。与内存空间不同的是,每个句柄可以包含不同大小的信息,每个句柄都有一个UUID来标识如何解释在其中找到的数据。在固定的内存空间中,每个“句柄”将是一个地址,每个块将是一个字节,没有其他信息就无法理解如何解释该数据。

所以..。问题:

  1. 和这里的大多数问题一样,答案是“视情况而定”。如果您只想获取值,则只有一个属性,其中包含客户端可以从中获取的数据。如果您还希望设置它,那么GATT服务器将在该值更改时发送通知,那么您还必须向该属性添加一个客户端特征配置句柄。(例如我有一个加速度计,它有3个属性的X,Y,和Z值和另一个设备,报告所有3个值为单一属性。因为这是一种尚未标准化的值类型,所以他们可以通过定义自己的自定义UUID来实现这一点。如果你正在测量的东西已经有一个标准的布局,那么你可能应该使用它)
  2. 关贸总协定有一些事件驱动的方面和其他方面是连续的。例如,一次只能协商一个连接请求。但是,您可以在任何时候从任意数量的属性获得任意顺序的通知。

代码语言:javascript
复制
1. You can't really define your own commands with GATT.  You're restricted to things like "read from handle" or "write to handle" similar to manipulating a chunk of memory.  The underlying implementation can be dependent on the hardware, but usually you can trigger some sort of event when a handle is manipulated.
2. You can requests events by subscribing to notifications or indications on a particular attribute.

  1. 是的,没错。
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23735307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档