Arduino kommuniziert über serielle Schnittstelle mit Java Programm auf PC

Hallo,

wie das Thema sagt möchte ich gerne über ein Java Programm auf die serielle Schnittstelle zugreifen und von einem Arduino daten empfangen und Daten an ihn senden.

Ich weiß das andere Programmiersprachen wie C# besser geeignet für eine solche Aufgabenstellungen wären aber werde bei java bleiben.

Ich wollte gerne hier im Forum vorab fragen ob ihr soetwas schonmal gemacht habt oder ob ihr generell mit java und dem Senden und Empfangen von Daten über die serielle Schnittstelle schon Erfahrungen gesammelt habt und mir vielleicht gute Bücher, Links, ... zu diesem Thema empfehlen könnt um mir den Einstieg etwas zu erleichtern.

Ich wäre euch für Hilfe und Tipps sehr dankbar.

Liebe Grüße, Tobias

Because of Java's platform-independence, serial interfacing is difficult.

So fängt en.wikibooks.org/wiki/Serial_Programming/Serial_Java an ;)

Ja, schonmal gemacht, ist aber eine Weile her. Und bin schnell zu c# gewechselt. Die IDE ist auch in Java geschrieben, deswegen sollte schon alles da sein, was du für dein eigenes Java brauchst.

Damals (Arduino 1.0.6) hat die IDE qbang RxTx verwendet, es war die Datei rxtxSerial.dll bei Windows erforderlich.

RxTx war deutlich besser als Sun's JavaComm Gab es nur für 32bit-Java. Und der SerialMonitor konnte nur max 115200 Bd.

Heute sehe ich

arduino1.6.7\lib\jssc-2.8.0.jar

Nachtrag: die IDE 1.6.1 hat mir ausserdem

C:\Users\michael_x\.jssc\windows\jSSC-2.8_x86.dll

installiert. Aber das sollte egal sein, denn im jssc.jar von github sollte der native Code fertig mitgeliefert werden: jSSC-2.8.0-Release.zip\jSSC-2.8.0-Release\jssc.jar\libs\windows*.dll ( 32 und 64 bit )

Viel Erfolg damit!

vielen dank für die Nachricht.

Das Tutorial kenne ich bereits, aber da es leider keinen "ready-to-run-code" bereitstellt hat es mir nur geholfen die grundsätzliche Struktur näher kennen zu lernen.

michael_x: Und bin schnell zu c# gewechselt. Die IDE ist auch in Java geschrieben, deswegen sollte schon alles da sein, was du für dein eigenes Java brauchst.

Ich kenne C# leider überhauptnicht, deshalb verstehe ich diese Aussage nicht genau, kennst du eventuell ein gutes Buch zu dem Thema? Vielleicht ist es lohnend sich mit C# zu beschäftigen um so das Problem anzugehen.

Vielen dank, tobi

Ich mag C# sehr, aber es kann auch aus was anderes sein. Wenn man eine leichtgewichtige Installation und IDE möchte ist z.B. Python + PyCharm nett. Das wird aber für dich eine wesentlich größere Umstellung sein, da es nicht die C-artige Syntax verwendet.

Oder .NET kann man auch in C++ programmieren wenn man möchte

vielen dank für die Rückmeldung.

Ich habe ein netbeans plugin für processing installiert, mit ihm kann ich auf der einen seite mit meinem java programm interagieren kann aber auch mit dem arduino über die serielle schnittstelle kommunizieren, das macht processing relativ autark von alleine ohne viel programmieraufwand, ähnlich wie in der arduino ide. Ich werde versuchen ob mich das auf eine Lösung bringt, wenn nicht dann doch C#.

Processing ist ähnlich wie die Arduino Software für C/C++ eine API für Java. Wobei der Schwerpunkt im Bereich Visualisierung liegt. Aber auch bei der seriellen Schnittstelle werden halt die Details gekapselt, damit es reicht einfach geht.

Das serielle Interface von .NET ist auch nicht sooo toll. Es geht meistens, ist sehr gut dokumentiert und es ist einfach zu programmieren. Aber es hat auch seine Tücken die sich auf die Performance niederschlagen können. z.B. hatte ich eine Kommunikation mit dem Arduino aufgebaut und der Event Handler hat nicht zuverlässig sofort ausgelöst. Letztlich bin ich dann hergegangen und habe per Timer abgefragt ob Daten da sind. Danach lief es super.

Processing ist vermutlich auch eine Lösung. Kenn ich nicht, denke aber, da musst du dich halt auf der Arduino Seite an die Processing Spielregeln halten.

Wenn du mit netbeans vertraut bist, lernst du dort schneller die jssc Einzelheiten, als komplett neu in .net und c# anzufangen. Aber was Neues lernen schadet ja nicht.

.NET kann man auch in C++ programmieren wenn man möchte

Nicht nur als java-Experte ist dir C# sicher lieber. .NET C++ ist wirklich was für hardcore-Masochisten, aber die sollen ja auch ihren Spass haben.

Das serielle Interface von .NET ist auch nicht sooo toll.

Ich hatte damals die Wahl zwischen 115200 RxTx und beliebigen Geschwindigkeiten (250000 / 500000) in .NET Und eine hübsche Windows FensterApplikation ging mir in VisualStudio einfacher als in Eclipse-Java

michael_x:
Ich hatte damals die Wahl zwischen 115200 RxTx und beliebigen Geschwindigkeiten (250000 / 500000) in .NET
Und eine hübsche Windows FensterApplikation ging mir in VisualStudio einfacher als in Eclipse-Java

Besser als Java ist es sicherlich (sowohl C# generell als auch die serielle Sache im speziellen). Aber es ist eben nicht unbedingt ideal. Jedenfalls nicht mit den Standard Methoden.

Aber es kommt auf die Anwendung an. Ich hatte mal eine Kommunikation über BT mit einem ARM-basierenden µC programmiert wo relativ große Datenmengen übertragen wurden. Und das ging auf Anhieb perfekt. Dann wollte ich mit dem Arduino ein paar Byte schnell hin-und-herschicken und es ging erst nicht flüssig. Jedoch habe ich eine Lösung gefunden. Das Problem ist bekannt, aber es macht sich anscheinend nicht immer bemerkbar.

kleines Update:

habe eine Library gefunden welche auch mit Java eine recht artequarte Möglichkeit bietet mit seriellen Schnittstellen zu arbeiten, die Lib heißt "jserialcomm" und ist hier zu finden:

http://fazecast.github.io/jSerialComm/

Mehr folgt dann wenn ich weiter fortgeschritten bin mit der Arbeit.

Vielen Dank, tobi