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

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

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

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

Cordova

Cordovaは様々なデバイスで使うことができるオープンソースなモバイル用開発プラットフォームです。開発者に各デバイスの元のプラットフォームで開発する必要をなくし、HTML・JavaScript・CSSなどの一般的なウェブのテクノロジーを使ってすべてのデバイスで展開することができるモバイルのアプリケーションを生成することを可能にします。

Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

Q&A

解決済

3回答

6303閲覧

Monaca cordova-plugin-ble-central で データが取得できません

kumakake

総合スコア42

Bluetooth

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

Cordova

Cordovaは様々なデバイスで使うことができるオープンソースなモバイル用開発プラットフォームです。開発者に各デバイスの元のプラットフォームで開発する必要をなくし、HTML・JavaScript・CSSなどの一般的なウェブのテクノロジーを使ってすべてのデバイスで展開することができるモバイルのアプリケーションを生成することを可能にします。

Monaca

「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

0グッド

1クリップ

投稿2018/06/09 06:14

BLEでデータの取得を機器(UA-651BLE)からしようとしています。
プラグインはcordova-plugin-ble-centralを使用しています。

IDやNameの取得はでき、connectionもできました。:1kkkjj

そのあと、ble.startNotification(0x2902)でデータを取得しようとしているので、indicationの設定の仕方がわからずな状態になっています。

ble.writeで0x2902に書き込みをやってみてもNot Foundとなってしまいます。

Androidのサンプルるとか見ているとwriteDescriptorとなっており、writeとは違う?

どなたか、このあたりご教授ください。

それと、cordova-plugin-ble-centralにこだわっているわけではないのでcordova-plugin-bluetoothのほうができるとかでも結構です。

よろしくお願いします。

app.js

var event = typeof cordova === 'undefined' ? 'DOMContentLoaded' : 'deviceready'; console.log("event:" + event ); document.addEventListener(event, onDeviceReady, false); function onDeviceReady() { alert( device.cordova ); } var myApp = ons.bootstrap(); var app; var ua = navigator.userAgent; alert( "ua:" + ua ); ons.ready(function() { }); var heartRate = { service_uuid: '1810', characteristic_uuid: '2a35', // BloodPressureMeasurement cccd_uuid : '2902' // CCC Descriptor for Blood Measurement } myApp.controller('AppController', function() { this.pushes = 0; this.pops = 0; monaca.pushPage(); }); myApp.controller('MainMenuController', function( $scope ) { this.world = 'World'; var gPeripheral; //---- Connect関連 $scope.onConnect= function(){ function fncConnect( peripheral ) { // データフェッチ doLog("Connected to:" + gPeripheral.id ); var data = new Uint8Array(2); data[0] = 0x02; data[1] = 0x00; // window.ble.write( gPeripheral.id, heartRate.service_uuid, heartRate.cccd_uuid, data.buffer, // function() { window.ble.startNotification( gPeripheral.id, heartRate.service_uuid, heartRate.characteristic_uuid, fncCbOnData, fncOnError); // }, // function( reason ) { // doLog( "Err CCCD:" + JSON.stringify( reason )); // }); // window.ble.read( gPeripheral.id, heartRate.service_uuid, heartRate.characteristic_uuid, // fncOnData, fncOnError); } function fncDisconnect( reason ) { doLog( 'Disconnected' ); window.ble.stopNotification( gPeripheral.id, heartRate.service_uuid, heartRate.characteristic_uuid, function() { alert( "OK stopNotification" ); }, function() { alert( "NG stopNotification" ); }); } function fncOnData( buffer ) { var data = new Uint8Array(buffer); var wStr = ''; data.forEach( function( item ) { wStr += ( item + ':' ); }); var wAb = String.fromCharCode.apply("", new Uint8Array( buffer )); var wStr1 = ''; doLog( 'Data:' + wStr ); doLog( 'Asci:' + wAb ); } function fncOnError( reason ) { console.log( JSON.stringify( reason )); doLog( "Err:" + JSON.stringify( reason )); } window.ble.connect( gPeripheral.id, fncConnect, fncDisconnect); } function fncCbOnData( buffer ) { alert( "fncCbOnData" ); } //---- Scan関連 $scope.onScan = function(){ var foundHeartRateMonitor = false; $scope.statusMsg = 'Scan Module'; window.ble.isEnabled( function() { function onScan(peripheral) { console.log("Found:" + JSON.stringify(peripheral)); doLog("Found:" + JSON.stringify(peripheral)); foundHeartRateMonitor = true; gPeripheral = peripheral; doLog( 'ID:' + gPeripheral.id ); doLog( 'NAME:' + gPeripheral.name ); } function scanFailure(reason) { alert("BLE Scan Failed:" + reason); } window.ble.scan([], 5, onScan, scanFailure); setTimeout(function() { if (!foundHeartRateMonitor) { alert( "Did not find a heart rate monitor." ); } }, 5000); }, function() { alert( "BluetoothをONにしてください" ); }) } function doLog( str ) { d_data.innerHTML = d_data.innerHTML + str + '<br />'; } });

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

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

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

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

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

guest

回答3

0

済みません。 javascriptの初歩を学習しました。
あまりにも、初歩的なことでスレッドを汚して済みませんでした。

ble.scanで、ターゲットのデバイスが見つかったら、foundHeartRateMonitor = ture;として、ble.connectを発行するようにして、動きました。

諸々、お教え頂き有難う御座いました。

投稿2018/08/07 06:48

編集2018/08/18 12:15
bugbug

総合スコア20

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

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

kumakake

2018/08/18 13:26

すみません。見逃していましたorz A&Dさんの件では、データ取得前に日付を書き込むのですが、ソレができずにドタバタしています。 落ち着いたらブログにでも各予定です。 --- それと、fastclick.jsですが、onsenUIを使うと、取り込んでるんで指定は不要という記事がありました。 コチラの方も確認が必要です(^^;
kumakake

2018/08/18 13:28

日付を書き込む理由ですが、A&Dさんのは、電池を抜いてリセットすると日付が来なくなります。フラグでチェックすればわかることですが。。 わざわざ日付を取得する必要はないのですが、ソレが正式なシーケンスのため、チャレンジしていました。
bugbug

2018/08/19 05:09

こんにちは… なかなか、深いところまでプログラミングされているのですね。 こちらは、A&Dさんのネーティブアプリでペアリングしていることを条件に動かす簡単なデモプロだったので、ぼくのようなjavascript & Androidアプリ未経験者が挑戦していました。 A&Dさんの血圧計は、bleでデータを読まないで、血圧測定をしていると、血圧計にプールされますよね!? ble-connectすると、このプールされたデータが一気に流れ込むようですね。 数日前に、このプールされたデータは、電池を抜くとどうなるのか?を確認したのですが、確かに、電池抜く前の測定値と電池を入れてからの測定値の二つが読めて、どちらかに日付情報が無かったのを思い出しました。 日付情報を書き込まなくても、いつの間にか、日付情報が入って来てたような気がして、ble接続シーケンス中にデバイスは、勝手にPCの時間情報を取得しているのかなぁ?っと、思っていましたが、もしかすると、時間情報は、A&Dさんネーティブのアプリで血圧測定値を読まないと時間情報がなくなっているのですね? 明日、確認してみます。
guest

0

ルール破り?回答ではないのですが、お書きになったプログラムを参考にさせて頂いているのですが、monacaにcordova-plugin-ble-centralのプラグインは成功したようですが、貴殿のプログラムが動かないのですが、基本的なところをもう少しご解説頂けませんでしょうか?

投稿2018/08/07 04:23

bugbug

総合スコア20

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

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

kumakake

2018/08/07 04:28

はい、対応させていただきます。 動かないとはどのようにでしょう?
bugbug

2018/08/07 04:53

ご返信、御対応ありがとうございます。 そもそもmonacaの開発環境を使い始め初心者なのですが、貴殿のプログラムをOnsenUI-HelloWorldテンプレートから動かしてみようと安易に考えましたが、BLE-Central pluginを持ってこれず、https://github.com/don/cordova-plugin-ble-central をインポートして、貴殿のプログラムを動かしてみようとindex.htmlに<script "src=app.js"></script>として、動かしてみようと考えたのですが、app.jsのalert()は表示されるもののapp.js内のons_ready()が、UA-651BLEを動かしても、まったく反応していないようです。 そもそも、私の貴殿プログラムの実装環境に問題が有りそうなのですが、宜しかったら、monacaでの実装環境を御教授頂けませんでしょうか?
kumakake

2018/08/08 04:31

ヘッダーはこんな感じです。 <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> <meta http-equiv="Content-Security-Policy" content="default-src * data: gap: https://ssl.gstatic.com; style-src * 'unsafe-inline'; script-src * 'unsafe-inline' 'unsafe-eval'"> <script src="lib/angular/angular.min.js"></script> <script src="lib/onsenui/js/onsenui.min.js"></script> <script src="lib/onsenui/js/angular-onsenui.min.js"></script> <script src="lib/fastclick.js"></script> <script src="lib/zepto.min.js"></script> <script src="components/loader.js"></script> <link rel="stylesheet" href="components/loader.css"> <link rel="stylesheet" href="lib/onsenui/css/onsenui.css"> <link rel="stylesheet" href="lib/onsenui/css/onsen-css-components.css"> <link rel="stylesheet" href="css/style.css"> <script src="js/app.js"></script> </head> ble-centralは記載されていますようにgithubからダウンロードしてインストールしています。
bugbug

2018/08/09 06:46

解説有難うございます。"fastclick.js"と”zepto.min.js"は、ネットから落としてLIBに入れました。 monacaもEducationから、Proにプラン変更し、妙なエラー等も出なくなりました。 ただ、Alertで、6.4.0と表示された後、コンソールも”event:deviceready”と表示されているだけで、UA-651BLEで血圧測定、BLE通信開始になっても、なんの変化もない状況です。 私が、余りにもmonacaプログラムに疎いのが原因と思いますが、index.htmlに貴殿のプログラムを張り付けて下さったように呼び出せばいいのでしょうか? index.htmlに<body></body>部に何か記述が必要なのでしょうか? また、monacaプロジェクトを作る時に、Angular JSの"Onsen UI V2 Angular 1 Minimum"で、プロジェクトを作っているのですが、この辺は問題ないのでしょうか? お忙しいことと思いますが、monaca駆け出しのレベルの低い御質問とは存じておりますが、宜しくお願い申し上げます。
bugbug

2018/08/10 14:09

きょうも、ほぼ一日、貴殿プログラムの実装挑戦しておりましたが、今日の結論としては、$scope.onScan = function()をindex.htmlなりから、動かさないとダメなのかな?っと思うのですが、その方法が分からずで、その辺を御教授頂けましたら、とても助かります。 それとも、まったく、的を得ないレベルでしょうか? A&DさんのSDKも見ているのですが、Android Studioで、トライしても、上手く通信できず、貴殿のプログラムを参照させて頂くしか、先に進まず、質問させて頂いております。 宜しくお願いします。
guest

0

自己解決

とくに意識する必要がなかったです。
Indicator設定せずとも通信ができました。
お騒がせしました。

投稿2018/07/19 14:55

kumakake

総合スコア42

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問