从Android上的可编程嵌入式设备接收数据

从Android上的可编程嵌入式设备接收数据,android,ios,iphone,bluetooth,bluetooth-lowenergy,Android,Ios,Iphone,Bluetooth,Bluetooth Lowenergy,我正在做一个Android的BLE项目。我们正在使用BLE在嵌入式设备上配置一些设置。嵌入式设备需要很长时间才能出现,所以我开始使用它来模拟嵌入式连接 Android(我需要KitKat)设备向嵌入式设备发送两条消息。一个是写设置……一个是读设置 写入消息将发送到端点0xFFF1,如下所示 byte[] data2Send = new byte[11]; data2Send[0] = 0xAA; // signifying this is a write mess

我正在做一个Android的BLE项目。我们正在使用BLE在嵌入式设备上配置一些设置。嵌入式设备需要很长时间才能出现,所以我开始使用它来模拟嵌入式连接

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上下载并发送读取请求,我们得到了相同的结果。我们看到数据包的第一个字节以浅蓝色显示。但只有那个


我们将一如既往地感谢您的帮助。

听起来您遇到的是TI模块问题,而不是Android。不确定这是否是同一个问题,但似乎其他人因为试图建立从Android到CC254X的连接而感到头痛。请参见此处:

谢谢您的快速回复,杰尔。我将把这些信息传递给在嵌入式方面工作的团队。我将快速编写一个iOS应用程序,看看它是否也有问题(尽管iOS上的LightBlue应用程序似乎也有同样的问题)。好的。在进一步回顾之后……当我在Android上查看getProperties()调用时……当我在iPhone上使用BlueSim时,连接将属性列为0x18(写入和通知)。但是,当我与TI模块建立连接时,唯一设置的属性字节是NOTIFY属性。您如何与仅广播NOTIFY属性的BLE设备交互?