3
BLE를 사용하여 NRF51822 기반 시스템에 연결하는 Android 앱을 개발하려고합니다. 목표는 내 사용자 특성에 3 바이트 값 (RGB)을 쓰는 것입니다.Android BLE 특성 setValue 올바른 데이터를 쓸 수 없습니다.
Android는 GATT 클라이언트이고 NRF51 기반 장치는 GATT 서버입니다.
연결을 설정하고 내 특성을 성공적으로 발견 할 수 있습니다.
그러나 데이터 전송 부분 (setValue)이 문제를 일으키고 있습니다. 아무리 내가 무엇을 쓰기 3 바이트, 나는 NRF51 측 아래
에서 동일한 일정 데이터를 내 rellevant 코드 얻을 (안드로이드)
@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status) {
Log.d("BLENotifier", "BLE GAT : SERVICES DISCOVERED");
for(BluetoothGattService gs: gatt.getServices()) {
Log.d("BLENotifier", "SERVICE = " + gs.getUuid().toString());
}
//SELECT MY CHARACTERSTIC
ble_my_characterstic = gatt.getService(ble_service_uuid).getCharacteristic(ble_characterstic_uuid);
Log.d("BLENotifier", "BLE SELECTED CHARACTERSTIC " + ble_my_characterstic.getUuid().toString());
ble_connected = true;
}
public void writedata(String data){
//WRITE DATA TO MY CHARACTERSTIC
if(ble_my_characterstic != null && ble_connected == true){
my_gatt_handle.executeReliableWrite();
//ble_my_characterstic.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE);
ble_my_characterstic.setValue(hexStringToByteArray(data));
my_gatt_handle.writeCharacteristic(ble_my_characterstic);
Log.d("BLENotifier", "BLE WRITE DATA " + data);
}
public static byte[] hexStringToByteArray(String s) {
int len = s.length();
byte[] data = new byte[len/2];
for (int i = 0; i < len; i += 2) {
data[i/2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ Character.digit(s.charAt(i+1), 16));
}
Log.d("BLENotifier", "hexStringToByteArray " + Integer.toString((int)data[0]) + " " + Integer.toString((int)data[1]) + " " + Integer.toString((int)data[2]));
return data;
}
내가 ble_handle.writedata("0000FF")
이 같은 writeData
메소드를 호출하고 나는 NRF51 측에서 얻을
R = 4 | G = 239 | B= 1
감사 것입니다
바이트 1 복사하는 특정 이유 [] writeData는 []로 byteData에서 1? – Ankit