Wie geht serielle Datenübertragung mit Java? (alte Version)
Ziel: Java-Programme,
sog. "Frontends", senden und empfangen Informationen über USB
zu/von Arduino.
Java-Program?
Es ist eine gute Idee, Java zu verwenden.
- Einerseits läuft Java auf allen möglichen
Betriebssystemen.
- Andererseits liefern viele Java-Entwickler
Programmbausteine, die wir für unsere Projekte nutzen
können.
Wir werden gleich so ein Programmpaket benutzen.
- Ein Lernziel dabei ist es auch, dass Du mit Java Kontakt
aufnimmst.
Demnächst gibt es auf der Arduinospielwiese vielleicht auch einen
Java-Einführungskurs.
Arduino → Computer:
Die Programme können dazu dienen, Informationen oder Daten auf
dem Computer als Zahlen, Zeigermessgeräte, Diagramme oder
Kennlinien auszugeben. Eine weitere Anwendung kann darin
bestehen, vom Arduino kommende große Datenmengen auf dem
Computer auf Festplatte oder in Datenbanken zu speichern.
Computer → Arduino:
Die Programme können dazu dienen, mittels auf ihnen befindlichen
Tasten, Checkboxes oder Sliders Zustände und Vorgänge im Arduino
zu beeinflussen, um so z. B. Leuchtdioden oder Motoren zu
steuern.
Hier einige Beispiele:
Ardunino sendet periodisch einen
Zahlenwert an den Computer.
Dort wir dieser in einer Konsole ausgegeben.
Dies ist das Einstiegsexperiment.
Du findest es am Ende dieser Seite.
|
Ardunino sendet periodisch seine 6 Analogwerte an den
Computer.
Dort werden sie in einer Konsole ausgegeben:
|
Ardunino sendet periodisch seine 6 Analogwerte an den
Computer.
Dort werden sie in einem Fenster als Zahlen ausgegeben:
|
Ardunino sendet periodisch seine 6 Analogwerte an den
Computer.
Dort werden sie in einem Fenster als Balken ausgegeben:
|
Ardunino sendet periodisch seine 6 Analogwerte an den
Computer.
Dort werden sie in einem Fenster mittels
Zeigerinstrumenten ausgegeben:
|
Ardunino sendet periodisch seine 6 Analogwerte an den
Computer.
Dort werden sie in einem Fenster als Kennlinien
ausgegeben:
|
Ein Fenster mit einem Slider liefert einen Wert, der
seriell zum Arduino übertragen und im LCD ausgegeben
wird:
|
Ein Fenster mit sechs Sliders liefert sechs Werte, die
LCD ausgegeben werden:
|
Ein Fenster ermöglicht die Eingabe von Text, der im LCD
des Arduino ausgegeben wird:
|
Das Einstiegsexperiment: eine Java-Programm, das
mittels jssc mit Arduino kommuniziert:
Was nun folgt, soll keineswegs ein Java-Grundkurs sein -
den gibt es vielleicht später mal auf der Arduinospielwiese.
Ich will hier nur kurz die Vorgehensweise darlegen, wie
man den unten zu findenden, fertigen Java-Programmcode für
das Frontend zum Laufen bekommt.
Ich benutze zur Java-Programmierung gern Eclipse.
Unter anderem, weil es unter Windows, Linux und Mac OS X
läuft.
Für andere Java-Programmierfreunde ist Netbeans die erste Wahl.
Ich zeige Dir hier, wie man in Eclipse vorgeht.
Wenn Du noch nicht weißt, was ein Analogwert ist, dann
lies erst hier!
Es gibt auch hier
ein einfacheres Experiment, bei dem ein Analogwert zum
Computer gesendet wird.
Schaltung:
Arduino-Programm:
Arduino holt sich von seinem Analogeingang A0 einen Wert
zwischen 0 und 1023 und sendet ihn seriell zum Computer.
Der Wert wird zum String umgewandelt und zwischen zwei Zeichen
eingeklemmt: vorn ein @ und hinten ein #.
Dies habe ich getan, weil mir das die Möglichkeit gibt,
festzustellen, ob ein vollständiger Zahlenwert (und
später auch mehrere Werte) seriell angekommen sind.
void setup() {
Serial.begin(9600);
}
void loop() {
int wert = analogRead(A0);
String myString = "@" + String(wert)
+ "#";
Serial.println(myString);
Serial.flush();
delay(1000);
}
Java-Programm:
Ist Eclipse installiert und gestartet, legst Du ein neues
Java-Projekt (z. B. "Arduino") an - der Name des Projektes
ist egal.
Aber die folgenden Namen solltest Du wie gefordert
vergeben, damit Du später den untenstehenden Java-Programmcode
exakt so bei Dir einfügen kannst.
In diesem neuen Java-Projekt legst Du ein neues Package
namens: " arduinosendet" an.
In diesem Package legst Du eine neue Klasse namens "EinenAnalogWertInConsoleAusgeben"
an.
Ist die geforderte Klasse bei Dir angelegt, steht schon
einwenig Code darin.
Den kannst Du komplett löschen und statt dessen dort den
folgenden Programmcode hineinkopieren:
package arduinosendet;
import javax.swing.JFrame;
import jssc.SerialPort;
import jssc.SerialPortEvent;
import jssc.SerialPortEventListener;
import jssc.SerialPortException;
@SuppressWarnings("serial")
public class EinenAnalogWertInConsoleAusgeben
extends JFrame implements SerialPortEventListener {
// hier musst Du Deinen seriellen Port
eintragen
private SerialPort sp = new
SerialPort("/dev/tty.usbmodem24131");
// darin
wird das seriell Ankommende gesammelt
private String sammler = "";
public EinenAnalogWertInConsoleAusgeben()
{
try {
sp.openPort();
sp.setParams(9600, 8, 1, 0);
sp.addEventListener(this);
} catch
(SerialPortException ex) {
System.out.println(ex);
}
}
@Override
public void
serialEvent(SerialPortEvent e) {
try {
sammler += sp.readString();
// Muell herausfiltern
sammler = sammler.replaceAll("null", "");
sammler = sammler.replaceAll("\n", "");
sammler = sammler.replaceAll("\r", "");
// Test auf Vorhandensein von "@" und dahinter "#"
if ( sammler.indexOf("@") > -1 &&
sammler.indexOf("#") > sammler.indexOf("@") ) {
// String zwischen '@' und '#' herausholen
sammler = sammler.substring(1, sammler.indexOf("#"));
// uebrig
bleibt im Sammler nur die Zahl
System.out.println(sammler);
sammler = "";
}
} catch
(SerialPortException ex) {
System.out.println(ex);
}
}
public static void main(String[]
args) {
new EinenAnalogWertInConsoleAusgeben();
}
}
Ist dies geschehen, gibt es sicher einige rote
Unterstreichungen im Quelltext.
Aber keine Panik! Es sind nämlich noch zwei Dinge zu
erledigen:
1. jssc
- ein Java-Tool zur Datenübertragung
Für die Kommunikation über USB
benutzen wir ein fertiges Programmpaket: "jssc - java
simple serial connector".
Das kannst Du hier
in deren Downloadabteilung herunterladen. Wähle dort einfach
die letzte Version.
Nach dem Download entpackst Du die zip-Datei - es entsteht ein
Ordner mit allerlei Dateien, wo Du z. B. die Lizenzbedingungen
findest. Uns interessiert in erster Linie eine Datei namens
jssc.jar, die Du später in Deinen Java-Projektordner
legen kannst (oder wo immer Du sie haben willst).
Du musst die Datei jssc.jar mit
einem Dateimanager Deines Betriebssystems (Windows-Explorer,
Mac-Finder,
Linux-Was-Weiß-Ich-Welchen-Dateimanager-Du-Benutzt) in den
Projektordner Deines Arduino-Java-Projektes hineinkopieren.
Wenn Du jetzt in Eclipse im Package- oder im
Projekt-Explorer mit rechts auf Dein Projekt klickst und
"refresh" wählst, müsstest Du die Datei "jssc.jar" dort
sehen.Rechtsklicke dort auf die Datei jssc.jar und wähle:
Build Path --> zum Build Path hinzufügen.
2. Dein
serieller Port
Du musst im Programmcode
unbedingt Deinen eigenen seriellen Port eintragen.
Der steht z. B. auf Deiner Arduino-IDE unten rechts und könnte
z. B. in Windows "COM3" sein oder bei einem Mac
"/dev/tty.usbmodem24131".
Fertig!
Du kannst jetzt Dein Java-Programm starten (in Eclipse ist oben
ein grüner Startknopf).
Du siehst dann in der Console von Eclipse die periodische
Ausgabe der Zahlen:
Verändere die Stellung Deines einstellbaren Widerstandes - und
die Zahl wird sich ändern!
|