Raspberry Pi 3包含BLE支持。我证实,它的工作原理是如何使用Java访问Raspberry Pi 3上的BLE?
须藤hcitool莱斯康
其返回的MAC和BLE“完整的本地名称”的邻近广告客户。
如何在Java中以编程方式访问此代码?
Raspberry Pi 3包含BLE支持。我证实,它的工作原理是如何使用Java访问Raspberry Pi 3上的BLE?
须藤hcitool莱斯康
其返回的MAC和BLE“完整的本地名称”的邻近广告客户。
如何在Java中以编程方式访问此代码?
我不认为现在有一个清晰或简单的答案。蓝牙集成需要不属于标准JDK的本地组件。
用于在Linux上使用蓝牙与Java的最常见的库是BlueCove。 BlueCove提供额外的本地库,用于在Linux上使用蓝牙:BlueCove-GPL或BlueCove-bluez(实验)。但是,您可能需要编译其中一个以供您的RPi使用。做做的方法将取决于你的发行版,并且需要一些关于linux的重要知识,编译本地代码等。快速谷歌搜索显示了对于以前的RPi版本的一些工作示例。目前还不清楚它是否能够与RPi 3上的BLE协同工作。
另一个可能是尝试使用“Camel Bluetooth Component”,它是Bluecove的包装,并期望安装libbluetooth-dev和blueman。但是,不清楚它是否可以与RPi 3配合使用。
如果无法获得真正的集成工作,另一个选择可能是简单地将外部Process调用从Java调用到您已知工作的命令行蓝牙实用程序。这取决于你的用例,如果这是一个选项,但我怀疑可能足以满足许多BLE特定用例。
只需通过运行时执行命令并使用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/
你为什么使用'ping -c 3 google.com'? OP询问蓝牙,你的代码使用'ping'!复制粘贴不起作用。 – 2016-08-27 20:09:22
我很抱歉,但他可以通过替换它来使用他正在查找的命令。将ping -c 3 google.com更改为sudo hcitool lescan非常简单!我没有这样做,所以他可以自己弄清楚代码。是的,复制和粘贴可以帮助在这种情况下,因为如果没有这个,我会写没有理由的相同的确切代码mkyong。另外,我关注的是PVS在我的回答中所要求的内容,而不是关于什么www.mkyong.com/java/how-to-execute-shell-command-from-java/是为写作而写的。我应该改变代码以使他更容易,但我没有。我真的不关心你的评论。 Wtv – laxerrrr
这真是太好了 – 2016-08-29 17:46:06
要在树莓派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
这很有用,但对我来说不是很清楚。
我希望这可以提供帮助。
如果您发现其他文档张贴它。
你见过[Eclipse Kura](https://eclipse.github.io/kura/doc/bluetooth-le-example.html)吗? –
您是否曾尝试在'ProcessBuilder'中运行'sudo hcitool lescan'并解析输出? – 2016-08-27 20:03:19