Raspberry Pi 3 包括 BLE 支持。我确认它的工作原理
sudo hcitool lescan
它为邻近的广告商返回了 MAC 和 BLE 的“完整本地名称”。
在 Java 中如何以编程方式访问它?
Raspberry Pi 3 包括 BLE 支持。我确认它的工作原理
sudo hcitool lescan
它为邻近的广告商返回了 MAC 和 BLE 的“完整本地名称”。
在 Java 中如何以编程方式访问它?
要在 Raspberry Pi 3 上使用 BLE,您必须更新 bluez(Raspbian linux 中的蓝牙核心),然后使用 bluez D-Bus 接口与之交互。
我正在寻找编写自己的 java lib,但这非常困难,因为关于 java 中的 D-Bus 和关于 bluez 的文档很少。
对于 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
这很有用,但对我来说不是很清楚。
我希望这会有所帮助。
如果您发现其他文档,请发布它。
我认为目前没有明确或简单的答案。蓝牙集成需要不属于标准 JDK 的本机组件。
在 Linux 上使用蓝牙和 Java 最常用的库是BlueCove。BlueCove 提供了额外的原生库,用于在 linux 上使用蓝牙:BlueCove-GPL或BlueCove-bluez(实验性)。但是,您可能需要自己编译其中一个以在您的 RPi 上使用。执行的方法将取决于您的发行版,并且需要一些重要的 linux 知识、编译本机代码等。快速的谷歌搜索显示了以前 RPi 版本的一些工作示例。不过,目前尚不清楚它是否可以与 RPi 3 上的 BLE 一起使用。
另一个可能是尝试使用“ Camel 蓝牙组件”,它是 Bluecove 的包装器,需要安装 libbluetooth-dev 和 blueman。但同样,不清楚它是否适用于 RPi 3。
如果无法使真正的集成正常工作,另一种选择可能是简单地从 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/