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

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

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

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

Android

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

Arduino

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

Q&A

解決済

1回答

591閲覧

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

tmn

総合スコア13

Bluetooth

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

Android

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

Arduino

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

0グッド

0クリップ

投稿2017/12/13 11:13

編集2017/12/14 05:01

###前提・実現したいこと
現在AndroidアプリとGenuino101をBLE通信で繋ぎ、データの送受信を行っています。
Characteristicの値を変更することによってデータの送受信を行うことには成功しています。
Android側で要素数8のbyte型配列を用意し、byte[0]、byte[1]、byte[2]、…にそれぞれ異なる値を格納し、Characteristicsにこの値を乗せ送信しようとしています。
Genuino側では Serial.println(Characteristic.value()); とし、シリアルモニタで表示・確認をしていますが、送信Characteristicの先頭配列の値しか表示されません。

Android側で送信したCharacteristicの全要素(値)を、Genuino側のシリアルモニタで確認したいです。
そのため配列の格納場所?を変更する方法、もしくは全要素の一斉表示の方法を教えていただきたいです。

###該当のソースコード

java

1/* 接続部分は省略させていただきます */ 2/* データ送信部 */ 3public void sendData(byte[] bytes){ 4 BluetoothGattService myService = mBluetoothGatt.getService(UUID.fromString(Genuino_UUID)); 5 BluetoothGattCharacteristic characteristic = myService.getCharacteristic(UUID.fromString(Genuino_Write)); 6 characteristic.setValue(bytes); 7 mBluetoothGatt.writeCharacteristic(characteristic); 8}

java

1/* クリックイベント時にsendData */ 2public void onClick(View v) { 3 byte[] test = new byte[8]; 4 test[0] = 0; 5 test[1] = 1; 6 test[2] = 2; 7 mBluetoothLeService.sendData(test); 8}

###補足情報(言語/FW/ツール等のバージョンなど)
Android Studio,ArduinoIDE

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

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

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

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

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

guest

回答1

0

ベストアンサー

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 00:12

編集2017/12/22 07:09
hillacken

総合スコア359

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

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

tmn

2017/12/21 12:23 編集

回答ありがとうございます。 現在は以下のように設定しています。 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の値の読み取りをするようにしています。 分からないことだらけですみませんが、回答よろしくお願いいたします。
hillacken

2017/12/22 06:31

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

2017/12/22 06:39

>そもそもCharacteristicの設定方法がほとんど理解できていないので、よろしければ設定方法等も教えていただけないでしょうか。 すいませんがGenuino101を使用したことはありません。
hillacken

2017/12/22 07:18 編集

>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をすると、データが書き込めます。
tmn

2017/12/22 08:30

回答ありがとうございます。 一つ一つ丁寧にありがとうございます。 詳しく調べもせず丸投げしてしまい申し訳ありません。 propertiesについて BLERead、BLEWrite、BLENotifyという形で共通なんですね。個人設定の名前みたいなものかと思っていました。 CharacteristicはLong型でもできるんですね、これでChar型よりも多くのデータがやり取りできるようになるんですね。4byteもデータのやり取りができれば十分です。ありがとうございます。
tmn

2017/12/22 08:32

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問