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

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

ただいまの
回答率

90.76%

  • Android

    6244questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Arduino

    493questions

    Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

  • Bluetooth

    216questions

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

Androidで要素数8のbyte型配列で設定したCharacteristicの全要素(値)をGenuinoで確認したい。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 283

tmn

score 7

前提・実現したいこと

現在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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

Genuino101のCharacteristicのタイプは何でしょうか?
maxLenは指定していますか?

BLEUnsignedCharCharacteristic yourCharacteristicName(UUID, properties, maxLen)


追記
maxLenは公式ドキュメントのミスのようで対応してなさそうです。
CurieBLE library(CurieBLE.h)が対応していないので、8byte送受信は現状では難しそうです。

arduinoのUnsignedLong型は4byteのようなので、
BLEUnsignedLongCharacteristic を使えば4byteはいけると思います。

UUIDとCharacteristicを複数用意して、分割して送れば8byteいけると思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 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

    >とりあえず現在の状態でmaxLenを追加 (…, …, 20) のようにいくつか値を入れてみましたが、以下のようなエラーが出ました。

    ググってもエラーが出て使えないとみんな言っているので
    使えないようですね。

    キャンセル

  • 2017/12/22 15:39

    >そもそもCharacteristicの設定方法がほとんど理解できていないので、よろしければ設定方法等も教えていただけないでしょうか。

    すいませんがGenuino101を使用したことはありません。

    キャンセル

  • 2017/12/22 15:44 編集

    >propertiesにあたる部分がどういった意味を持っていてどんなものを入れることができるのか、
    >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

    今回質問させていただいたのは、Genuino側でread、writeそれぞれ一つずつのCharacteristicしか用意できないように勘違いし、それならCharacteristicにたくさん情報を詰め込もう、と思ったからです。
    本質問投稿前に複数のCharacteristicを用意しテストしましたが、なぜか上手くできず勘違いしてしまいました。
    昨日回答をいただいた後に、複数Characteristicを用意し試すと問題なく動作しましたので、UnsignedLong型のCharacteristicと併用して試してみたいと思います。

    また知識が身に付きました。回答ありがとうございました。

    キャンセル

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

  • ただいまの回答率 90.76%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Android

    6244questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Arduino

    493questions

    Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

  • Bluetooth

    216questions

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