【发布时间】:2015-12-03 15:13:43
【问题描述】:
我正在开发一个 Android BLE 项目。我们正在使用 BLE 在嵌入式设备上配置一些设置。嵌入式设备需要很长时间才能出现,所以我开始使用BlueSim 来模拟嵌入式连接。
Android(我需要 KitKat)设备向嵌入式设备发送基本上有两条消息。一种是写入设置....一种是读取设置。
一条写入消息将发送到端点 0xFFF1,如下所示
byte[] data2Send = new byte[11];
data2Send[0] = 0xAA; // signifying this is a write message to device
data2Send[1] = 0x01; // data value
data2Send[2] = 0x38; // data value
data2Send[3] = 0x47; // data value
data2Send[4] = 0x24; // data value
data2Send[5] = 0x01; // data value
data2Send[6] = 0x36; // data value
data2Send[7] = 0x49; // data value
data2Send[8] = 0x0b; // data value
data2Send[9] = 0x63; // data value
data2Send[10] = 0x0D; // CR to indicate the last byte of the packet
characteristic.setValue(data2Send);
boolean status = mBluetoothGatt.writeCharacteristic(characteristic);
Log.v(TAG,"Status is:" + String.valueOf(status));
我已经使用 BlueSim 验证了这一点,我们已经确认这在将数据传输到嵌入式设备时有效。我们可以成功更改所有设置。
另一条消息是设备的读取请求,因此我可以知道其中已经存在哪些设置或确认设置实际更改......
byte[] data3Send = new byte[3];
data3Send[0] = 0x55; // Signify this is a start of a READ message
data3Send[1] = 0x42; // Second part of the read designator
data3Send[2] = 0x0d; // Carriage return saying this is the last bit
characteristic.setValue(data3Send);
boolean status = mBluetoothGatt.writeCharacteristic(characteristic);
Log.v(TAG,"Status is:" + String.valueOf(status))
当我将此消息发送到 BlueSim 时,我会在我的 iPhone 上看到该消息并立即将设置发送回。在 Android 上,我看到返回的 11 个字节通知我所有设置!这几乎是瞬间发生的。伟大的!
但是当我们在嵌入式设备上执行此操作时,我看到一个字节回来了。而已。使用嵌入式端的调试器,我们可以看到所有 11 个字节都进入了嵌入式设备上的 BLE 模块。如果我们使用 PC 而不是我的 Android 设备,我们可以看到所有 11 个字节都显示在 PC 上(BLE 模块的制造商有一个类似终端的应用程序,您可以使用它“嗅探”数据)。
嵌入式设备是一个 8 位微型设备,通过 UART 连接到 BLE 模块(TI CC2540 芯片组),因此它显然比运行 BlueSim 的 iPhone 慢。嵌入式设备将需要一些时间来接收 BLE 消息、处理请求并将数据推回 BLE 模块。我必须在我的 Android 程序中设置一些设置以允许较慢的响应返回吗?
我尝试在 iOS 上下载 LightBlue 并将该读取请求发送出去,我们得到了相同的结果。我们看到数据包的第一个字节出现在 LightBlue 中。但只有那一个。
如往常一样,我们将不胜感激任何帮助。
【问题讨论】:
-
好的。经过进一步审查......当我查看 Android 上的 getProperties() 调用时......当我在 iPhone 上使用 BlueSim 时,连接将属性列为 0x18(写入和通知)。但是当我与 TI 模块建立连接时,唯一设置的属性字节是 NOTIFY 属性。你如何与只广播 NOTIFY 属性的 BLE 设备交互?
标签: android ios iphone bluetooth bluetooth-lowenergy