Моя конечная цель - получить информацию о широте и долготе GPS от Adafruit Ultimate GPS (стандарт NMEA 0183) в мое приложение Java. Для этого я использую Java Marine API. Затем текущее местоположение будет записано в БД вместе с отметкой времени.
До сих пор я успешно (я думаю) настроил RXTX для включения связи через порт USB. Java Marine API поставляется с некоторыми примерами файлов .java. В приведенном ниже примере следует сканировать все существующие COM-порты и искать данные NMEA, но когда я запускаю его, я просто получаю вывод
Scanning port /dev/tty.Bluetooth-Incoming-Port
GPS подключен, и когда я получаю доступ к нему через Терминал, я вижу поток данных.
Пожалуйста, простите этот текстовый мусор, я немного не в себе и не уверен, какие части имеют значение.
public class SerialPortExample implements SentenceListener {
public SerialPortExample() {
init();}
public void readingPaused() {
System.out.println("-- Paused --");}
public void readingStarted() {
System.out.println("-- Started --");}
public void readingStopped() {
System.out.println("-- Stopped --");}
public void sentenceRead(SentenceEvent event) {
// here we receive each sentence read from the port
System.out.println(event.getSentence());}
private SerialPort getSerialPort() {
try {
Enumeration<?> e = CommPortIdentifier.getPortIdentifiers();
while (e.hasMoreElements()) {
CommPortIdentifier id = (CommPortIdentifier) e.nextElement();
if (id.getPortType() == CommPortIdentifier.PORT_SERIAL) {
SerialPort sp = (SerialPort) id.open("SerialExample", 30);
sp.setSerialPortParams(4800, SerialPort.DATABITS_8,
SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
InputStream is = sp.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader buf = new BufferedReader(isr);
System.out.println("Scanning port " + sp.getName());
// try each port few times before giving up
for (int i = 0; i < 5; i++) {
try {
String data = buf.readLine();
if (SentenceValidator.isValid(data)) {
System.out.println("NMEA data found!");
return sp;}
} catch (Exception ex) {
ex.printStackTrace();}}
is.close();
isr.close();
buf.close();}
}
System.out.println("NMEA data was not found..");
} catch (Exception e) {
e.printStackTrace();}
return null;}
private void init() {
try {SerialPort sp = getSerialPort();
if (sp != null) {
InputStream is = sp.getInputStream();
SentenceReader sr = new SentenceReader(is);
sr.addSentenceListener(this);
sr.start(); }
} catch (IOException e) {
e.printStackTrace();}}
public static void main(String[] args) {
new SerialPortExample();}}
Итак, я думаю, что он застрял, глядя на tty.Bluetooth-Incoming-Port? Как я могу заставить его смотреть на порт tty.usbserial?
С благодарностью