Seriell über Bluetooth

Status
Nicht offen für weitere Antworten.
T

tuxedo

Gast
Hallo zusammen,
habe folgendes Problem:

ich soll ein Navigationstool das per serielle Schnittstelle NMEA-Daten einliest erweitern und verbessern. Den Empfänger den ich dazu bekommen habe schließt man per USB an. Der mitgelieferte Treiber simuliert einen Com-Port auf den das Java-Tool per javax.comm-API auf die Scnittstele zugreift und die Daten liest.
Das geht soweit ziemlich gut.

Nur soll das Programm ja auch mit anderen Empfängern umgehen können. Testweise habe ich meinen eigenen GPS-Empfänger angeschlossen. Dieser ist jedoch ein Bluetooth-GPS Empfänger der mittels Bluetooth-USB-Stick an den echner gekoppelt wird. Auch hier simuliert der Treiber einen COM-Port.

Beide Empfänger zeigen in "HyperTerminal" die NMEA-Sätze korrekt an. Nur der Bluetooth-Empfänger macht in Java Probleme.

Hier mal ein kurzer Ausschnitt der gelesenen NMEA-Sätze.

Zuerst der kabelgebundene USB-Empfänger:

Code:
$GPGSA,A,1,,,,,,,,,,,,,50.,50.0,50.0*05
$GPRMC,001603.936,V,0000.000,N,00000.0000,E,,,101102,,*1F
GPGRMC-Satz Empfangen.
$GPGGA,001604.9360000.0000,N,00000.0000,E,0,00,50.0,0.0,Error beim öffenen der Connection: javax.comm.PortInUseException: Port currently owned by Unknown Windows Application
M,18.M,0.0,0000*40
GPGGA-Satz Empfangen.
$GPGSA,A,1,,,,,,,,,,,,,50.050.0,50.0*05
$GPRMC,001604.936,V,0000.0000,N,00000.0000,E,,,10112,,*18
GPGRMC-Satz Empfangen.
$GPGGA,001605.936,0000.0000,N,00000.0000,E,0,00,50.0,0.0,M,18.0,M,0.0,0000*41
GPGGA-Satz Empfangen.

und hier das Ergebnis mit dem Bluetooth-Empfänger:

Code:
$G.0V,30$GError beim öffenen der Connection: javax.comm.PortInUseException: Port currently owned by Unknown Windows Application
$G.0C2$G.0C2$P00C2$G.0V,303050$G.0C2$G.0C1$GM0C1

Warum da ab und zu Exceptions auftreten weiß ich nicht. Funktioniert jedoch soweit auch mit den Exceptions.

Hier noch n kurzer Code-Ausschnitt:

Code:
		public void readNMEASentence(){
		    
			byte[] readBuffer = new byte[20]; 
			int numBytes=0; //???
			
			try {
				while (inputStream.available() > 0) {
					numBytes = inputStream.read(readBuffer);
				}
				String line = new String(readBuffer);
				
				int zz = Unsigned(readBuffer[0]);
				char a = (char)zz;
				
				System.out.print(a); // hier wird der Satzteil ausgegeben
				// Auf Satzanfang warten.
				if(wait==true){
					switch(a){
						case 0x0a:	//0x0a ist eine dezimale 10, welche lt. Ascii-Tabelle ein LineFeed ist
							// Hier ist nun ein Vollständiger Satz angekommen.
							//System.out.println("LineFeed gefunden");
							switch(idOkay){
								case 1:
									g.setSatz(satz);
									idOkay=0;
									System.out.println("GPGGA-Satz Empfangen.");
									break;
								
								case 2:
									r.setSatz(satz);
									idOkay=0;
									System.out.println("GPGRMC-Satz Empfangen.");								
									break;
									
								default:
					
									break;
							}
							
							satz="";
							wait=false;
							break;
						default:
							satz+=a;
							if(satz.equals("GPGGA")) idOkay=1;
							if(satz.equals("GPRMC")) idOkay=2;
							break;										
					}
				}
				if(a=='$') wait=true;
			} catch (IOException e) {
				System.out.println(e);
			}			
		}

Dieser codeteil wird bei jedem SerelEvent ausgelöst. Also immer wenn Daten anliegen.

Hat jemand ne Ahnung woran das liegen könnte ? In anderen Programmen funktionieren die Empfänger beide gleich gut. Nur Java mag den Bluetooth-Empfäger nicht.

Gruß
Alex
 
T

tuxedo

Gast
Gerade ist das Problem wieder akut geworden...
Das Problem scheint generell aufzutreten wenn man versucht auf nem virtuellen COM-Port zu arbeiten der via Bluetooth verbunden wurde.

Handelt es sich um eine USB-Verbindung --> kein Problem.
Bluetooth will nicht.

Any Ideas ?

- Alex
 

Natorion

Bekanntes Mitglied
ich mach zz etwas ähnliches, blos hab ich das problem dass man nicht zwei bluetooth geräte die beide SPP verwenden gleichzeitig verwenden kannst oO also, schau einfach ob der port belegt ist.
 
T

tuxedo

Gast
@foobar
Es gibt keine Exceptions ... Das ist ja das fatale... Irgendwo im Interface zu den Com-Ports müssen da Daten verloren gehen.

@Natorion
Nein, hab nur ein einziges Bluetooth Gerät, und das ist mein GPS Empfänger. Auf habe ich sonst keine gemappten Com-Ports.

Ist einfach zum verrückt werden....Mit jedem anderen Programm (sogar Hyperterminal) kommen die Daten vollständig und unverstümmelt an. Nur mit Java gibts in Kombination mit dem COM-via-Bluetooth Probleme.

Gruß
Alex
 

Natorion

Bekanntes Mitglied
hmmm ich denk du hast ein logikproblem weil:

hast du das bluetooth gerät bereits gemountet und versuchst dann per java-bluetooth auf das gerät zuzugreifen? wenn ja, das kann ja nit gehen afaik, weil das gerät eigentlich über den virtuellen com port ansprechen musst.
 
T

tuxedo

Gast
Hast du den quellcode mal überflogen? Ich habe kein Java-Bluetooth im Einsatz!

Ich benutze seit beginn meiner Experimente folgende Vorgehensweise:
mappen des Seriellen Bluetooth Anschlusses meines BT-GPS Empfängers auf COM15.
Java nimmt dann via Comm-API verbindung zum COM15 Port auf.
ich hab bereits 2 verschiedene APIs getestet:
RXTX-Comm-API (www.rxtx.org)
und http://java.sun.com/products/javacomm/

Beide liefern das selbe Ergebnis:

Das sagt mit Hyperterminal beim Zugriffsteste auf COM15
$GPGGA,092227.844,4917.4733,N,00857.4373,E,1,06,3.3,241.0,M,,,,0000*0B
$GPGSA,A,3,04,13,08,24,27,16,,,,,,,3.7,3.3,1.8*35
$GPRMC,092227.844,A,4917.4733,N,00857.4373,E,0.00,81.81,260706,,,A*5E
$GPGGA,092228.843,4917.4732,N,00857.4374,E,1,06,3.3,241.0,M,,,,0000*05
$GPGSA,A,3,04,13,08,24,27,16,,,,,,,3.7,3.3,1.8*35
$GPRMC,092228.843,A,4917.4732,N,00857.4374,E,0.00,81.81,260706,,,A*50
$GPGGA,092229.843,4917.4732,N,00857.4374,E,1,06,3.3,241.0,M,,,,0000*04
$GPGSA,A,3,04,13,08,24,27,16,,,,,,,3.7,3.3,1.8*35
$GPRMC,092229.843,A,4917.4732,N,00857.4374,E,0.00,81.81,260706,,,A*51
$GPGGA,092230.843,4917.4732,N,00857.4375,E,1,06,3.3,241.0,M,,,,0000*0D
$GPGSA,A,3,04,13,08,24,27,16,,,,,,,3.7,3.3,1.8*35
$GPRMC,092230.843,A,4917.4732,N,00857.4375,E,0.00,81.81,260706,,,A*58
$GPGGA,092231.843,4917.4732,N,00857.4375,E,1,06,3.3,241.0,M,,,,0000*0C

Und das hier gibt Java von sich:
java-bt-gps.jpg


Musste es als Bild reinstellen da nichtdruckbare Zeichen dabei waren....
Die "---------" Zeilen sind von mir eingefügt damit man die "Datensätze" im verstümmelten Zustand noch ausseinander halten kann.

Ich hab kein Plan was ich noch machen/testen soll...

Gruß
Alex
 
T

tuxedo

Gast
Okay, ich habs lösen können. Hatte richtig vrmutet dass die Daten in Java korrekt ankommen, aber falsch verarbeitet werden...

Code:
			inputStream = rs232.getInputStream();
			while(true){
				char c = (char) inputStream.read();
				int x = c;
				if (x<256) {
					System.out.print(c);
					
				} 
			}

So funktionierts. Voher war's über einen Buffer gelöst. Und da war's irgendwie schwieriger die Fragmente wieder korrekt zusammenzusetzen...

Nuja, Hauptsache es geht. Ist zwar quick&dirty, aber bei 1200baud stört das weniger...

-Alex
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
kodela Datenübergabe über Buttons Allgemeine Java-Themen 8
W Jar-File Start nur über Terminal Allgemeine Java-Themen 13
A ByteArray über Socket Allgemeine Java-Themen 3
berserkerdq2 Text über einen Shape anzeigen (Scenebuilder) Allgemeine Java-Themen 1
I 2D-Grafik Vektor-Grafik über die Zwischenablage nach Adobe Illustrator transferieren Allgemeine Java-Themen 8
TheSkyRider Methode über DataInputStream "auslösen" Allgemeine Java-Themen 6
I OpenPDF erzeugt riesige PDFs, wenn Grafiken über PdfGraphics2D#drawImage gezeichnet werden Allgemeine Java-Themen 1
T Etikettendrucker über TCP-IP Allgemeine Java-Themen 1
Encera Gleichzeitiges Ausführen und verbinden von 2 Java-Klassen über die Eingabeaufforderung und Eclipse Allgemeine Java-Themen 21
B HTTP Allgemeine Fragen über Suchmaschine nutzen mit Java Allgemeine Java-Themen 20
torresbig Klasse mit extends Calendar über Methoden ändern (Hirnblockade) Allgemeine Java-Themen 7
B Liste ändern während Iteration über Diese? Allgemeine Java-Themen 16
Master3000 Java Konsole über Buffered Reader Zeilenweise auslesen ? Allgemeine Java-Themen 26
J Daten über serielle Schnittstelle empfangen Allgemeine Java-Themen 4
L Aufwandsabschätzung: Android-App Aufnahmefunktion (foto) und zweiter Ebene über dem Foto (teiltransparent) Allgemeine Java-Themen 6
M Registry Autostart Eintrag mit Java erstellen (über Windows cmd) Allgemeine Java-Themen 7
OSchriever Programm über Linux-Kommandozeile ausführen Allgemeine Java-Themen 20
J Namen von Methoden über Reguläre Ausdrücke bearbeiten Allgemeine Java-Themen 6
M Schnelleres Speichern von XML-Daten über URLConnection Allgemeine Java-Themen 4
M Keine weitere Eingabe in der Main möglich. Eventueller Ansatz über while. Allgemeine Java-Themen 8
Drachenbauer Wie kann eine vorgegebene Farbe über einen String erkannt werden? Allgemeine Java-Themen 11
W Variablenübergabe über mehrere Klassen Allgemeine Java-Themen 4
N Über einen Button in JavaFX ein Event über eine Pipeline schicken(Netty) Allgemeine Java-Themen 1
M Threads über Kommandozeile Allgemeine Java-Themen 5
david19 Software AE über Domain laufen lassen Allgemeine Java-Themen 0
Q Selbständig ActionEvent auslösen zum Daten senden über serielle Schnittstelle Allgemeine Java-Themen 7
T Problem mit externen Datenbankzugriff über SSH Tunnel Allgemeine Java-Themen 4
K Auf Dateiverzeichnis extern zugreifen (evtl über XML??) Allgemeine Java-Themen 22
C VisualVM oder Jconsole über Jolokia-Proxy Allgemeine Java-Themen 0
G USB-Pins über Java ansteuern Allgemeine Java-Themen 8
Ernesto95 Best Practice Localization über ResourceBundle Allgemeine Java-Themen 6
C Classpath Neue Klasse über einen Button ausführen Allgemeine Java-Themen 3
C Auslesen auslösen über Button-Click Allgemeine Java-Themen 8
M Fragen beantworten über Textfeldeingabe Allgemeine Java-Themen 5
AssELAss Best Practice Checksumme über jede Spalte zweier Tabellen und vergleichen Allgemeine Java-Themen 3
T Strings über Bluetooth zwischen PC,µc oder Samrtphone senden und empfangen Allgemeine Java-Themen 0
F Try/catch über ganze Klasse Allgemeine Java-Themen 9
kodela Eigenartige Datumsberechnung über GregorianCalendar Allgemeine Java-Themen 15
HarleyDavidson Best Practice Integer-Zahlenfolge über mehrere Programmstarts Allgemeine Java-Themen 7
T .jar über cmd ausführen (später dann batch) Allgemeine Java-Themen 6
F In OSX: Java-Programm über URI-Scheme aufrufen mit Parameter? Allgemeine Java-Themen 0
C Input/Output Zip Files über Socket senden und empfangen Allgemeine Java-Themen 6
M WebService - Zugriff auf Webservice Methode über Browser Allgemeine Java-Themen 1
C .jar File lässt sich nur über Konsole öffnen Allgemeine Java-Themen 1
L Videodateien über Java öffnen unabhängig vom Format Allgemeine Java-Themen 4
Thallius Hash über serialisiertes Objekt? Allgemeine Java-Themen 3
A Threads Lock über mehrere Abschnitte in verschiedenen Methoden Allgemeine Java-Themen 5
T Daten über port abfangen mit proxy server Allgemeine Java-Themen 12
M Eingabe von Arrays geht über gewünschte Anzahl hinaus Allgemeine Java-Themen 2
L Prüfen, ob Programm über 32bit oder 64bit Java ausgeführt wird Allgemeine Java-Themen 4
F Content-Disposition ermitteln über URL Allgemeine Java-Themen 2
ARadauer Checksumme über BigDecimal Werte Allgemeine Java-Themen 11
A Class Datei aus Verzeichnis über URLClassLoader laden Allgemeine Java-Themen 2
G Darstellung von Ergebnissen einer Dokumentensuche über eine JTable Allgemeine Java-Themen 19
S VLC + Lied über Java starten Allgemeine Java-Themen 17
M HTML-Code von Webseite über Browser oder Console auslesen?? Allgemeine Java-Themen 5
A Sinuston ausgeben und über Mikro Amplitude messen – machbar? Allgemeine Java-Themen 6
R Java-Progamm über Icon starten unter Windows Allgemeine Java-Themen 9
C Daten über URL an PHP verschicken Allgemeine Java-Themen 4
O Fragen über Fragen - Bei Änderung XML-Datei -> Anpassung GUI Allgemeine Java-Themen 7
aze Jar ausführen über Runtime.execute funktioniert nicht Allgemeine Java-Themen 4
S NoSuchMethodError beim Ausführen einer C Methode über JNI Allgemeine Java-Themen 5
H OOP Daten über TCP Allgemeine Java-Themen 5
Pastafari Iterator über nested HashMaps Allgemeine Java-Themen 7
R ListIterator über mehrere Arrays Allgemeine Java-Themen 13
G Interface Laden der Konfiguration über Interfaces sinnvoll? Allgemeine Java-Themen 28
D Player Objekt - Frame über Server anzeigen lassen. Allgemeine Java-Themen 3
B VoIP-Gespräche über Computer führen Allgemeine Java-Themen 3
S Jar-File startet nicht über doppelklick Allgemeine Java-Themen 2
C Java Programm über SSH starten Allgemeine Java-Themen 16
K Internetverbindung über PuTTy herstellen?! Allgemeine Java-Themen 9
C Kapselung Warum graift man auf Variablen nur über Methoden und nich direkt zu? Allgemeine Java-Themen 10
G Auf Kommandozeile über Processobjekt mit Outputstream Allgemeine Java-Themen 3
S Input/Output Binärdatei über Bytestreams Allgemeine Java-Themen 4
S Kommunikation von Core und GUI über Schnittstellen Allgemeine Java-Themen 2
J Explorer über Code starten Allgemeine Java-Themen 15
kodela Problem mit Kopieren über FileChannel Allgemeine Java-Themen 4
L Java und Javascript um Distanz über Google Maps zu berchnen Allgemeine Java-Themen 10
B UNIX Shell befehl über JavaCode ausführen Allgemeine Java-Themen 19
D Java Excel API - Schreiben in Excel lässt sich nicht über Makro starten Allgemeine Java-Themen 18
M Ampelsteuerung über Timer in Java realisieren Allgemeine Java-Themen 3
L CMD über Java öffnen Allgemeine Java-Themen 8
U Mailclient über getDesktop.mail vorbereiten, Problem beim Anhang: Allgemeine Java-Themen 3
R Klasse über Button Event in anderer Klasse informieren Allgemeine Java-Themen 11
R Frequenzausgabe (2 Kanal) über Lautsprecherausgang Allgemeine Java-Themen 22
J Java-Klasse über Konsole starten Allgemeine Java-Themen 6
E FF Einstellungen über Programm ändern? Allgemeine Java-Themen 7
D JVM kann nicht über die jvm.dll gestartet werden? Allgemeine Java-Themen 1
S File im windowexploer öffnen über java Allgemeine Java-Themen 6
J Receive eines Hex-Bytes über COM-Port Allgemeine Java-Themen 4
Nicer Prozess über Prozessnamen beenden Allgemeine Java-Themen 15
reibi File über FileChannel locken Allgemeine Java-Themen 5
B Serialisierung mit Unterobjekten über Netzwerk Allgemeine Java-Themen 3
K Objekt-Austausch zwischen zwei Programmen über System-Clipboard Allgemeine Java-Themen 5
B parallele / Multithreaded Iteration über Map Allgemeine Java-Themen 12
D Unix/Linux Benutzer-Authentifikation über Java Allgemeine Java-Themen 3
M Tastatur eingabe über Buttons Allgemeine Java-Themen 15
S GPS-Maus über USB ansprechen Allgemeine Java-Themen 8
reibi Files über Classpath laden Allgemeine Java-Themen 22
M Selbst geschriebener InputStreamReader über einen beliebigen InputStream Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben