我正在开发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模块的制造商有一个类似app的终端,你可以'嗅探'数据)。
嵌入式设备是一个8位micro,通过UART连接到BLE模块(TI CC2540芯片组),因此它显然比运行BlueSim的iPhone更低。嵌入式设备需要一些时间来接收BLE消息,处理请求,并将数据推回BLE模块。是否有一些设置我必须在我的Android程序中设置以允许更慢的响应回来?
我尝试在iOS上下载LightBlue并发送该读取请求,我们得到相同的结果。我们看到数据包的第一个字节显示在LightBlue中。但只有那一个。
任何帮助都将一如既往地受到高度赞赏。
答案 0 :(得分:0)
听起来您正在遇到TI模块的问题,而不是Android。不确定它是否是同一个问题,但似乎其他人一直在试图建立从Android到CC254X的连接时感到头痛。见这里:https://e2e.ti.com/support/wireless_connectivity/f/538/t/401240