質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Bluetooth

Bluetoothとは短距離の間でデータを交換するための無線通信規格である。固定・モバイル両方のデバイスから、短波の電波送信を行うことで、高いセキュリティをもつパーソナルエリアネットワーク(PAN)を構築する。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

2回答

1466閲覧

BLE GATT通信について

TASKsan

総合スコア17

Bluetooth

Bluetoothとは短距離の間でデータを交換するための無線通信規格である。固定・モバイル両方のデバイスから、短波の電波送信を行うことで、高いセキュリティをもつパーソナルエリアネットワーク(PAN)を構築する。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

2クリップ

投稿2019/01/04 07:45

編集2019/01/04 07:58

前提・実現したいこと

ラズパイ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/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2019/01/04 07:55

JavaScriptは無関係では?
TASKsan

2019/01/04 07:58

すみません。
guest

回答2

0

ペリフェラル側のプログラムでcallback()の記述がなかったため記述したところ2回目以降も書き込む事が出来ました。

投稿2019/01/10 11:29

編集2019/01/10 11:31
TASKsan

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Wind

2019/01/11 08:27

ペリフェラル側にcallback()が無かったのに、 なぜ1回目だけは書き込めたのでしょうか?
guest

0

ベストアンサー

writeCharacteristic()
を呼び出してから
onCharacteristicWrite()
が返ってくるまでの間に、
writeCharacteristic()の2回目を呼び出すとまずいようですが、問題ありませんでしょうか?

onLongClickのときreturn falseしていますが、
onClickでもう一度onCharacteristicWrite()しているなどですとNGです。

とりあえず、
onCharacteristicWrite()でGATT_SUCCESSになっているかLogに出してみてはどうでしょうか。

投稿2019/01/07 06:53

hillacken

総合スコア359

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問