android app连接keyfob读取同时读取多个characteristic值的问题
想让android app读到keyfob三轴加速度的值,但现在在手机端添加readCharacteristic的代码,只能获得一个最上面一个characteristic的值,即:把下面的换一下顺序,Y在最上,那只能读到Y轴的值,怎么才能同时读到X、Y、Z这三个characteristic的值?
mBluetoothLeService.readCharacteristic(mAccelXCharacteristic);
mBluetoothLeService.readCharacteristic(mAccelYCharacteristic);
mBluetoothLeService.readCharacteristic(mAccelZCharacteristic);
另外,我有尝试让程序获得这个加速度service的所有characteristic的值,有时候能得到ffa1和ffa3的值,又时候仅能获得ffa3的值,这又是怎么回事呢?
Ss,
恩,,,
第一,你试过用TI 的 BLE Device Monitor这个PC 工具能读到这三轴的数据吗?看看服务是否都正常。
第二,我建议你试一下等收到比如说X 的Android的 onCharacteristicsRead ()之后,再发送Y 的读请求,这样试试看行不行。
Yan,
用BTool可以同时读到三轴值,服务应该是没问题的
对于建议二,我试了下,除非在两个之间加一条等待语句Thread.sleep(2000);才可以,而且时间小了,像1s也还是不行,但是这样的话就不是同一时刻的xyz值了呀
以下是我试着改的BluetoothLeService里的broadcastUpdate,目的是得到accelerometer这个server所有characteristic的value,放在字符串myStr里,可是假如我在DeviceControlActivity里给的语句是mBluetoothLeService.readCharacteristic(mAccelXCharacteristic);,那么下面这个循环虽然能得到5个characteristic,但只能得到x的value,其他的都是null,这是为什么呢?
private void broadcastUpdate(final String action, final BluetoothGattCharacteristic charc){ final Intent intent = new Intent(action); List<BluetoothGattCharacteristic> characteristics = charc.getService().getCharacteristics(); StringBuilder myStr = new StringBuilder(); //writes the data formatted in HEX. for(BluetoothGattCharacteristic characteristic:characteristics){ final byte[] data = characteristic.getValue(); if (data != null && data.length > 0) { final StringBuilder stringBuilder = new StringBuilder(data.length); for(byte byteChar : data) stringBuilder.append(String.format("%02X ", byteChar)); String s = characteristic.getUuid().toString(); myStr.append(s.substring(6, 8) + ":" + stringBuilder.toString()); } } intent.putExtra(EXTRA_DATA, myStr.toString()); sendBroadcast(intent); }
Yan,
我现在还有几个问题:
1.我每次向keyfob写入数据的时候,第一次写入成功后八成会断开连接,然后还得手动重连
2.我试了下每隔一定时间获取x轴加速度值,我发现数据更新特别慢,1.5秒到2秒才能更新一次,这是连接的问题还是android程序的问题?
3.在获取xyz三轴数据的时候,我发现程序run的模式下只能获取x轴的,而debug模式下设几个断点,就可以得到三轴的数据,这又是为什么呢?我感觉应该跟第二个问题有些关系,是不是什么被阻塞了?
Ss,
关于xyz 三轴,我有个问题,你为什么要手机去读keyfob呢?
keyfob代码里面是一次性读取xyz 三轴数据,然后以notification的方式主动发送给手机的,这样没延迟。。。
1. 你向keyfob 写了啥数据呢?
Yan,
手机去读keyfob么,项目需要。。
我看keyfob开发手册4.6节“ Using the Accelerometer Service"里说ACCEL_X(Y\Z)_UUID有不同的UUID,再结合android的例子程序BluetoothLeGatt,我以为就只能通过分别度这三个characteristic来得到value,可是这么做以后就像我前面说的出现各种问题。写数据主要是控制accelEnable的情况,写”01“让keyfob的accelerometer开始发数据。
我怎样才能在手机端一次性读取xyz三轴数据而没延迟呢?
有难度,用的啥型号手机?通信协议或者不完全一致?
用的小辣椒3S,使用BTool的时候是实时更新的,不明白手机怎么就这么多问题,还是就这手机有这么多问题。。
Ss,
打开overlap试一下,然后代码里面连续发送三个轴的读请求看看,比如
{
read(x);
read(y);
read(z);
}
overlap的指导:http://processors.wiki.ti.com/index.php/OverlappedProcessing
app android characteristic keyfob 相关文章:
- GATTServApp_ProcessCharCfg来实现对Nodifty属性的char实现多字节数据的发送
- GATTServApp_ProcessCharCfg问题,想发送20个数据,
- CC2541通过手机app更新固件
- 用CC2540 MINI DK和USB dongle做SerialApp,该怎么做?用BTOOL连接Dongle做central吗,dongle的程序选择哪一个,还有就是mini DK该怎么做
- cc2540 SerialApp透传是单向的吗?还是双向的?(是peripheral和central之间都可以互相发数据吗,还是只能peripheral给central发)
- 请问 SerialApp2 例程中的“SerialAppCentral”里面使能 Notification 的语句有吗?