2016-03-14 3 views
12

Малина Pi 3 включает поддержку BLE. Я подтвердил, что он работаетКак получить доступ к BLE на Raspberry Pi 3 с помощью Java?

SUDO hcitool lescan

который вернул Макинтош и BLE «полное локальное имя» для соседних рекламодателей.

Как получить доступ к программному обеспечению на Java?

+0

Вы видели [Eclipse Kura] (https://eclipse.github.io/kura/doc/bluetooth-le-example.html)? –

+0

Вы пытались запустить 'sudo hcitool lescan' в' ProcessBuilder' и разобрать вывод? –

ответ

0

Я не думаю, что в это время имеется ясный или простой ответ. Для интеграции с Bluetooth необходимы встроенные компоненты, которые не являются частью стандартного JDK.

Наиболее распространенная библиотека, используемая для использования Bluetooth с Java в Linux, - BlueCove. BlueCove предоставляет дополнительные собственные библиотеки для работы с Bluetooth на linux: BlueCove-GPL или BlueCove-bluez (экспериментальный). Однако вам, вероятно, придется скомпилировать один из них самостоятельно для использования на вашем RPi. Способы выполнения будут зависеть от вашего дистрибутива и потребуют значительных знаний об Linux, компиляции собственного кода и т. Д. Быстрый поиск в Google показывает некоторые рабочие примеры этого для предыдущих версий RPi. Непонятно, будет ли он работать с BLE на RPi 3.

Другим может быть попытка использовать «Camel Bluetooth Component», который является оболочкой над Bluecove и ожидает установки libbluetooth-dev и blueman. Но опять же, неясно, будет ли оно работать с RPi 3.

Если не удается получить истинную интеграцию, другой вариант может заключаться в том, чтобы просто сделать внешние вызовы Process из Java в командную строку Утилиты Bluetooth, которые вы уже знаете , Это зависит от вашего прецедента, если этот вариант, но я подозреваю, может быть достаточно для многих конкретных случаев использования 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(); 

} 

} 

Я хотел бы закодированным это для вас, но есть уже много, например в Интернете об этом.

Хотя это один из способов сделать это, вы должны использовать 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

Чтобы использовать BLE на Raspberry Pi 3 вы должны обновить Bluez (ядро Bluetooth В Raspbian Linux), а затем использовать интерфейс D-Bus Bluez взаимодействовать с ним.

Я ищу для написания своего собственного java lib, но это очень сложно, потому что документации о D-Bus в java и о 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

Это было полезно, но не очень понятно для меня.

Надеюсь, это поможет.

Если вы нашли другую документацию, отправьте его.

Смежные вопросы