【问题标题】:Receiving data back from a BLE embedded device on Android从 Android 上的 BLE 嵌入式设备接收数据
【发布时间】: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


【解决方案1】:

听起来您遇到的是 TI 模块问题,而不是 Android 问题。不确定它是否是同样的问题,但似乎其他人因试图建立从 Android 到 CC254X 的连接而感到头疼。见这里:https://e2e.ti.com/support/wireless_connectivity/f/538/t/401240

【讨论】:

  • 感谢 Jel 的快速回复。我将把这些信息传递给在嵌入式方面工作的团队。我将编写一个快速的 iOS 应用程序,看看是否也没有问题(尽管 iOS 上的 LightBlue 应用程序似乎也有同样的问题)。
猜你喜欢
  • 1970-01-01
  • 2021-05-25
  • 1970-01-01
  • 2021-07-15
  • 1970-01-01
  • 1970-01-01
  • 2013-11-24
  • 1970-01-01
  • 2011-06-03
相关资源
最近更新 更多