2016-03-14 85 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

這很有用,但對我來說不是很清楚。

我希望這可以提供幫助。

如果您發現其他文檔張貼它。