2016-03-14 86 views
12

Raspberry Pi 3包含BLE支持。我证实,它的工作原理是如何使用Java访问Raspberry Pi 3上的BLE?

须藤hcitool莱斯康

其返回的MAC和BLE“完整的本地名称”的邻近广告客户。

如何在Java中以编程方式访问此代码?

+0

你见过[Eclipse Kura](https://eclipse.github.io/kura/doc/bluetooth-le-example.html)吗? –

+0

您是否曾尝试在'ProcessBuilder'中运行'sudo hcitool lescan'并解析输出? – 2016-08-27 20:03:19

回答

0

我不认为现在有一个清晰或简单的答案。蓝牙集成需要不属于标准JDK的本地组件。

用于在Linux上使用蓝牙与Java的最常见的库是BlueCove。 BlueCove提供额外的本地库,用于在Linux上使用蓝牙:BlueCove-GPLBlueCove-bluez(实验)。但是,您可能需要编译其中一个以供您的RPi使用。做做的方法将取决于你的发行版,并且需要一些关于linux的重要知识,编译本地代码等。快速谷歌搜索显示了对于以前的RPi版本的一些工作示例。目前还不清楚它是否能够与RPi 3上的BLE协同工作。

另一个可能是尝试使用“Camel Bluetooth Component”,它是Bluecove的包装,并期望安装libbluetooth-dev和blueman。但是,不清楚它是否可以与RPi 3配合使用。

如果无法获得真正的集成工作,另一个选择可能是简单地将外部Process调用从Java调用到您已知工作的命令行蓝牙实用程序。这取决于你的用例,如果这是一个选项,但我怀疑可能足以满足许多BLE特定用例。

0

只需通过运行时执行命令并使用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(); 

} 

} 

我希望我能的编码这个给你,但已经有很多例子关于这个在互联网上。

虽然这是做到这一点的一种方法,但您应该使用BlueCove或某个库来扫描蓝牙设备。

来源:https://www.mkyong.com/java/how-to-execute-shell-command-from-java/

+1

你为什么使用'ping -c 3 google.com'? OP询问蓝牙,你的代码使用'ping'!复制粘贴不起作用。 – 2016-08-27 20:09:22

+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

这真是太好了 – 2016-08-29 17:46:06

2

要在树莓派3使用BLE必须更新的bluez(以Raspbian Linux的蓝牙核心),然后使用bluez的d-bus接口与它进行交互。

我正在寻找编写自己的java库,但这很困难,因为在java和关于bluez的D-Bus上很少有文档。

对于bluez,只有最后一个分布中的示例代码。

现在我有写一个简单的脚本,更新的bluez版本到最新: https://gist.github.com/tongo/94338cebf4e6367d353439bca8d0a376

我还发现了一个博客贴子,说说d总线,Java和bluez的: http://smartspacestuff.blogspot.it/2016/02/i-got-figurin-out-dbus-bluez.html

这很有用,但对我来说不是很清楚。

我希望这可以提供帮助。

如果您发现其他文档张贴它。