前提・実現したいこと
現在AndroidアプリとGenuino101をBLE通信で繋ぎ、データの送受信を行っています。
Characteristicの値を変更することによってデータの送受信を行うことには成功しています。
Android側で要素数8のbyte型配列を用意し、byte[0]、byte[1]、byte[2]、…にそれぞれ異なる値を格納し、Characteristicsにこの値を乗せ送信しようとしています。
Genuino側では Serial.println(Characteristic.value()); とし、シリアルモニタで表示・確認をしていますが、送信Characteristicの先頭配列の値しか表示されません。
Android側で送信したCharacteristicの全要素(値)を、Genuino側のシリアルモニタで確認したいです。
そのため配列の格納場所?を変更する方法、もしくは全要素の一斉表示の方法を教えていただきたいです。
該当のソースコード
/* 接続部分は省略させていただきます */
/* データ送信部 */
public void sendData(byte[] bytes){
BluetoothGattService myService = mBluetoothGatt.getService(UUID.fromString(Genuino_UUID));
BluetoothGattCharacteristic characteristic = myService.getCharacteristic(UUID.fromString(Genuino_Write));
characteristic.setValue(bytes);
mBluetoothGatt.writeCharacteristic(characteristic);
}
/* クリックイベント時にsendData */
public void onClick(View v) {
byte[] test = new byte[8];
test[0] = 0;
test[1] = 1;
test[2] = 2;
mBluetoothLeService.sendData(test);
}
補足情報(言語/FW/ツール等のバージョンなど)
Android Studio,ArduinoIDE
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
Genuino101のCharacteristicのタイプは何でしょうか?
maxLenは指定していますか?
BLEUnsignedCharCharacteristic yourCharacteristicName(UUID, properties, maxLen)
追記
maxLenは公式ドキュメントのミスのようで対応してなさそうです。
CurieBLE library(CurieBLE.h)が対応していないので、8byte送受信は現状では難しそうです。
arduinoのUnsignedLong型は4byteのようなので、
BLEUnsignedLongCharacteristic を使えば4byteはいけると思います。
UUIDとCharacteristicを複数用意して、分割して送れば8byteいけると思います。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 89.98%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2017/12/21 21:22 編集
現在は以下のように設定しています。
BLEService ledService("19B10000-E8F2-537E-4F6C-D104768A1214");
BLEUnsignedCharCharacteristic grCharacteristic("19B10001-E8F2-537E-4F6C-D104768A1214", BLERead|BLENotify);
BLEUnsignedCharCharacteristic gwCharacteristic("19B10002-E8F2-537E-4F6C-D104768A1214", BLEWrite);
と設定し、grCharacteristic.setValueとし値をAndroidへ送り、逆にgwCharacteristicの値を読みAndroidから値を受け取っています。
宣言を見る限りmaxLenの設定をしていないみたいです。
とりあえず現在の状態でmaxLenを追加 (…, …, 20) のようにいくつか値を入れてみましたが、以下のようなエラーが出ました。
no matching function for call to 'BLEUnsignedCharCharacteristic::BLEUnsignedCharCharacteristic(const char [37], BLEProperty, int)'
no matching function for call to 'BLEUnsignedCharCharacteristic::BLEUnsignedCharCharacteristic(const char [37], int, int)'
そもそもCharacteristicの設定方法がほとんど理解できていないので、よろしければ設定方法等も教えていただけないでしょうか。
propertiesにあたる部分がどういった意味を持っていてどんなものを入れることができるのか、
BLEUnsignedCharCharacteristicとはいったい何なのか、といったことを教えていただけると助かります。
ちなみに、GenuinoはArduinoIDEのサンプル(CurieBLE→Peripheral→LED)を、上記のUUIDに変更・追加し、
connect状態でgrCharacteristicに値をセット、gwCharacteristicの値の読み取りをするようにしています。
分からないことだらけですみませんが、回答よろしくお願いいたします。
2017/12/22 15:31
ググってもエラーが出て使えないとみんな言っているので
使えないようですね。
2017/12/22 15:39
すいませんがGenuino101を使用したことはありません。
2017/12/22 15:44 編集
>BLEUnsignedCharCharacteristicとはいったい何なのか、といったことを教えていただけると助かります。
公式の情報がこれだけしかないようですね。
https://www.arduino.cc/en/Reference/BLECharacteristicConstructor
BLEUnsignedCharCharacteristicは
unsignedChar型のCharacteristicという意味だと思います。
他にいろいろ型がありますよね。
propertiesには
BLEReadとBLEWriteとBLENotifyが設定できるとなっていますね。
まあその3個しか使わないので問題ないでしょう。
Read、Write、Notify、CharacteristicなどはBLEの規格で決まっている用語です。
propertiesは属性です
Genuino101でreadに設定したCharacteristicに対して、
android側からwriteをしても何も起こりません。
Genuino101でwriteに設定したCharacteristicに対して、
android側からwriteをすると、データが書き込めます。
この投稿は削除されました
この投稿は削除されました
2017/12/22 17:30
一つ一つ丁寧にありがとうございます。
詳しく調べもせず丸投げしてしまい申し訳ありません。
propertiesについて
BLERead、BLEWrite、BLENotifyという形で共通なんですね。個人設定の名前みたいなものかと思っていました。
CharacteristicはLong型でもできるんですね、これでChar型よりも多くのデータがやり取りできるようになるんですね。4byteもデータのやり取りができれば十分です。ありがとうございます。
2017/12/22 17:32
本質問投稿前に複数のCharacteristicを用意しテストしましたが、なぜか上手くできず勘違いしてしまいました。
昨日回答をいただいた後に、複数Characteristicを用意し試すと問題なく動作しましたので、UnsignedLong型のCharacteristicと併用して試してみたいと思います。
また知識が身に付きました。回答ありがとうございました。