前提・実現したいこと
ラズパイ3とAndroid端末でモーターを制御する。
発生している問題・エラーメッセージ
今ラズパイ3をペリフェラル、Android端末をセントラルにしてモーターを制御しようと考えているのですが、Android端末に配置されているボタンを押しても1回目は書き込みできるのですが2回目以降が書き込み出来ません。
該当のソースコード
android
1// キャラクタリスティックが書き込まれたときの処理 2 @Override 3 public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) { 4 if (BluetoothGatt.GATT_SUCCESS != status) { 5 return; 6 } 7 // キャラクタリスティックごとに個別の処理 8 if (UUID_CHARACTERISTIC_PRIVATE2.equals(characteristic.getUuid())) { // キャラクタリスティック2:データサイズは、8バイト(文字列を想定。半角文字8文字) 9 runOnUiThread(new Runnable() { 10 public void run() { 11 // GUIアイテムの有効無効の設定 12 // 書き込みボタンを有効にする 13 // mButton_WriteHello.setEnabled( true ); 14 // mButton_WriteWorld.setEnabled( true ); 15 } 16 }); 17 return; 18 } 19 } 20}; 21 22@Override 23public boolean onLongClick(View v){ 24 if (mButton_go.getId() == v.getId()) { 25 26 Log.d("A", "HELLO"); 27 writeCharacteristic(UUID_SERVICE_PRIVATE, UUID_CHARACTERISTIC_PRIVATE2, "go"); 28 return false; 29 } 30 if (mButton_back.getId() == v.getId()) { 31 32 33 Log.d("B", "WORLD"); 34 writeCharacteristic(UUID_SERVICE_PRIVATE, UUID_CHARACTERISTIC_PRIVATE2, "back"); 35 return false; 36 } 37 if (mButton_left.getId() == v.getId()) { 38 39 Log.d("B", "WORLD"); 40 writeCharacteristic(UUID_SERVICE_PRIVATE, UUID_CHARACTERISTIC_PRIVATE2, "left"); 41 return false; 42 } 43 if (mButton_right.getId() == v.getId()) { 44 45 Log.d("B", "WORLD"); 46 writeCharacteristic(UUID_SERVICE_PRIVATE, UUID_CHARACTERISTIC_PRIVATE2, "right"); 47 return false; 48 } 49 return true; 50} 51 52// キャラクタリスティックの書き込み 53 private void writeCharacteristic(UUID uuid_service, UUID uuid_characteristic, String string) { 54 55 if (null == mBluetoothGatt) { 56 return; 57 } 58 BluetoothGattCharacteristic blechar = mBluetoothGatt.getService(uuid_service).getCharacteristic(uuid_characteristic); 59 blechar.setValue(string); 60 mBluetoothGatt.writeCharacteristic(blechar); 61 62 } 63}
###試したこと
BLEの接続を切って再接続すると2回目以降も書き込みが出来ました。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー