微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > android app连接keyfob读取同时读取多个characteristic值的问题

android app连接keyfob读取同时读取多个characteristic值的问题

时间:10-02 整理:3721RD 点击:

想让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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top