2016-03-14 17 views
12

ラズベリーパイ3にはBLEサポートが含まれています。私はそれが隣の広告主のためのMACおよびBLE「完全なローカル名を」が返さJavaを使用してRaspberry Pi 3のBLEにアクセスするには?

lescan

はsudo hcitoolことによって動作を確認しました。

これはプログラムでJavaにどのようにアクセスしますか?

+0

[Eclipse Kura](https://eclipse.github.io/kura/doc/bluetooth-le-example.html)を見たことがありますか? –

+0

'ProcessBuilder'で' sudo hcitool lescan'を実行して出力を解析しようとしましたか? –

答えて

0

現時点では、明確で簡単な回答はありません。 Bluetoothの統合には、標準のJDKに含まれていないネイティブコンポーネントが必要です。

LinuxでJavaでBluetoothを使用するために使用される最も一般的なライブラリはBlueCoveです。 BlueCoveは、Linux上でBluetoothを使用するための特別なネイティブライブラリを提供しています(BlueCove-GPLまたはBlueCove-bluez(実験的))。しかし、RPi上で使用するために、これらのいずれかをコンパイルする必要があります。 doの実行方法はあなたのディストリビューションに依存し、Linuxのかなりの知識、ネイティブコードのコンパイルなどが必要になります。簡単なgoogle検索では、これまでのRPiバージョンのいくつかの実例が示されています。 RPI 3のBLEで動作するかどうかは不明です。

もう1つは、Bluecoveの上にあるラッパーで、libbluetooth-devとbluemanをインストールすることを想定している "Camel Bluetooth Component"を試してみることです。しかしRP0 3で動作するかどうかはっきりしない。

真の統合作業ができない場合は、単に外部からProcessを呼び出して、Javaからコマンドラインに呼び出すこともできます。 。このオプションを使用する場合、使用するケースによって異なりますが、多くのBLE固有のユースケースでは十分であると思われます。

0

Runtimeでコマンドを実行し、出力をBufferedReaderで読み取るだけで、これを非常に簡単にすることができます。

コマンドを実行:

Process p; 
p = Runtime.getRuntime().exec(command); 
p.waitFor(); 

全コード:

package your.package.rpicommand; 

import java.io.BufferedReader; 
import java.io.InputStreamReader; 

public class ExecuteShellCommand { 

public static void main(String[] args) { 

    ExecuteShellCommand obj = new ExecuteShellCommand(); 

    String domainName = "google.com"; 

    //in mac oxs 
    String command = "ping -c 3 " + domainName; 

    //in windows 
    //String command = "ping -n 3 " + domainName; 

    String output = obj.executeCommand(command); 

    System.out.println(output); 

} 

private String executeCommand(String command) { 

    StringBuffer output = new StringBuffer(); 

    Process p; 
    try { 
     p = Runtime.getRuntime().exec(command); 
     p.waitFor(); 
     BufferedReader reader = 
         new BufferedReader(new InputStreamReader(p.getInputStream())); 

        String line = ""; 
     while ((line = reader.readLine())!= null) { 
      output.append(line + "\n"); 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return output.toString(); 

} 

} 

私は私があなたのためにこれをコード化することができますが、これについて、インターネット上の例の多くは、すでに存在したいです。

これはこれを行う1つの方法ですが、でBlueCoveまたは一部のライブラリを使用してBluetoothデバイスをスキャンする必要があります。

出典:https://www.mkyong.com/java/how-to-execute-shell-command-from-java/

+1

なぜ 'ping -c 3 google.com'を使用していますか? OPはBluetoothについて尋ねられ、あなたのコードは 'ping'を使っています!コピー貼り付けは役に立ちません。 –

+1

申し訳ありませんが、彼は探しているコマンドを置き換えるだけで使用できます。 ping -c 3 google.comをsudo hcitool lescanに変更するのはかなり簡単です!私はそれをやっていないので、自分でコードを理解することができます。そして、これがなければmkyongが何の理由もなかったのと同じ正確なコードを書いていただろうから、コピーと貼り付けはこのケースで役に立ちます。また、私はPVSが私の答えで求めているものに焦点を当てていますが、www.mkyong.com/java/how-to-execute-shell-command-from-java/が書かれたものではありません。私はコードを変更して彼のために簡単にする必要がありましたが、私はしませんでした。私は正直にあなたのコメントを気にしない。 Wtv – laxerrrr

+0

それはあなたの非常に甘いです –

2

それと対話するのbluez D-バスインタフェースを使用しますが、のbluez(RaspbianのLinuxのBluetoothコア)を更新する必要がラズベリーパイ3にBLE使用するには。

私は自分自身のJavaのlibを書こうとしていますが、javaのD-Busとbluezのドキュメントはほとんどないので、非常に難しいです。

bluezの場合は、最後のディストリビューションのサンプルコードのみです。 https://gist.github.com/tongo/94338cebf4e6367d353439bca8d0a376

私もブログ記事を発見したD-BUS、Javaとのbluezについて話: http://smartspacestuff.blogspot.it/2016/02/i-got-figurin-out-dbus-bluez.html

今の

私は、最新ののbluezバージョンを更新し、簡単なスクリプトを作成してい

それは役に立ちましたが、私にとってはあまり明確ではありませんでした。

こちらがお役に立てば幸いです。

他のドキュメントがある場合は、それを投稿してください。

関連する問題