RxTx für Java

Wer zwischen einem PC und einem Mikrocontroller eine Datenverbindung herstellen möchte steht oftmals vor einem Problem mit drei Buchstaben – USB. Seitdem die alte RS232-Schnittstelle nahezu vollständig aus modernen Rechnern verschwunden ist und durch die neue, wesentlich komplexere Schnittstelle USB ersetzt wurde, stehen Hobby-Entwickler vor dem Problem, dass eine Datenverbindung zwischen ihrem PC und einem Mikrocontroller nun wesentlich umständlicher bzw. anspruchsvoller ist. Eine Firma aus Schottland mit dem Firmennamen Future Technology Devices International ( kurz FTDI ) hat dieses Problem erkannt und für Abhilfe gesorgt. Die Firma bietet ICs an, mit denen sich über USB ein virtueller COM-Port, also zum Beispiel eine RS232-Schnittstelle, bereitstellen lässt. Ich habe bereits in einem anderen Artikel den Chip  FT232RL beschrieben, mit dem genau das möglich ist.

Installation

Da wir in Java programmieren möchten muss zunächst einmal Java auf eurem PC installiert sein. Zu diesem Zweck installiert Ihr euch das Java JDK . Achtet darauf ob Ihr die 32 oder 64-Bit-Version installiert (je nach System). Das ist wichtig um die richtige Version der RxTx-Bibliothek auszuwählen. Aus der Angst heraus, dass es die Webseite mit der RxTx-Bibliothek irgendwann einmal nicht mehr geben könnte, möchte ich die Bibliothek auch auf dieser Seite zum Download anbieten.

In dem Archiv befinden sich mehrere Dateien. Die wichtigen davon sind diese drei:

  • rxtxParallel.dll
  • rxtxSerial.dll
  • RXTXcomm.jar

Diese Dateien müssen nun in bestimmte Ordner kopiert oder verschoben werden:

  • rxtxParallel.dll Programme (x86)/Java/jdk/jre/bin
  • rxtxSerial.dll  Programme (x86)/Java/jdk/jre/bin
  • RXTXcomm.jar  Programme (x86)/Java/jdk/jre/lib/ext

Nun wird nur noch eine Entwicklungsumgebung benötigt. An dieser Stelle scheiden sich die Geister. Ich persönlich mag Eclipse nicht so gerne, da ich der Meinung bin, dass die IDE doch ziemlich unübersichtlich ist. Daher möchte ich euch die IDE Netbeans  ans Herz legen. Wenn ihr aus der PIC-Welt kommt, könnt ihr euch freuen, denn die IDE ist die selbe wie MPLABX (die auf Netbeans basiert). Unter dem Downloadlink wählt ihr die Version Java SE aus und installiert diese. Wenn zu diesem Zeitpunkt noch kein Java JDK installiert ist, wird Netbeans bei der Installation meckern.

Anwendung

Die RxTx-Bibliothek ist heruntergeladen, Java JDK und Netbeans installiert und ihr habt die RxTx-Bibliothek in die entsprechenden Java-Verzeichnisse kopiert? Dann kann es nun ans eingemachte gehen. Öffnet jetzt Netbeans und erstellt ein neues Projekt . Nachdem ihr erfolgreich ein Projekt erstellt habt RxTx-Bibliothek in das Projekt eingebunden werden. Hierzu führt ihr einen Rechtsklick auf euer Projekt aus (links im Dateibaum, oberster Eintrag <Projektname>) und wählt den Eintrag Properties aus. Es öffnet sich folgendes Fenster:

Im linken Bereich Categories wählt Ihr den Eintrag Libraries. Nun seht ihr genau das, was auf der Abbildung gezeigt ist (bis auf den Eintrag, der blau markiert ist). Jetzt klickt Ihr auf den Button Add Library und geht nun in das Verzeichnis, siehe oben, in dem Ihr die Datei RXTXcomm.jar vorhin abgelegt habt und wählt diese aus. Wenn das erledigt ist, steht der Programmierung nichts mehr im Weg.

Funktionstest

Mit Hilfe des folgenden Codes könnt Ihr prüfen ob alle Schritte erfolgreich waren oder ob etwas schief gelaufen ist.

package rxtxtest;

import gnu.io.*; // RXTX
import java.util.Enumeration;

public class RxTxTest
{
  public static void main(String[] args)
  {
    System.out.println("Program started");

    //System.out.println(java.library.path);
    CommPortIdentifier serialPortId;

    //static CommPortIdentifier sSerialPortId;
    Enumeration enumComm;

    //SerialPort serialPort;
    enumComm = CommPortIdentifier.getPortIdentifiers();

    while (enumComm.hasMoreElements())
    {
      serialPortId = (CommPortIdentifier) enumComm.nextElement();

      if(serialPortId.getPortType()==CommPortIdentifier.PORT_SERIAL)
      {
         System.out.println(serialPortId.getName());
      }
    }
    System.out.println("Finished successfully");
  }
}

Das Programm kann nun über den Play-Button in der Werkzeugleiste gestartet werden. Wenn das Programm erfolgreich compiliert wurde erscheint der Text BUILD SUCCESSFUL unten in der Konsole  (Output-Fenster). Das Programm wird dann auch direkt gestartet. Wenn alles glatt ging, dann seht ihr zusätzlich folgende Ausgabe: Program started und Finished successfully. Wenn es sogar zur Laufzeit einen COM-Port am PC gab, dann wird dieser zusätzlich mit Nummer ausgegeben, z.B.: “COM3”.

Wenn es zu Fehlermeldungen beim Ausführen kam, dann geben die folgenden Beispiele einen Tipp für die Fehlerquelle:

java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown
  while loading gnu.io.RXTXCommDriver
Exception in thread "main" java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path

Wenn Ihr diese Fehlermeldung in der Konsole seht, dann liegt das wahrscheinlich daran, dass DLL-Dateien nicht in das richtige Verzeichnis geladen wurden (siehe Beginn dieses Artikels).

Exception in thread "main" java.lang.NoClassDefFoundError: gnu/io/CommPortIdentifier
    at ErsteSchritte.main(ErsteSchritte.java:21)

Dieser Fehler deutet darauf hin, dass sich die JAR-Datei (siehe Beginn dieses Artikels) nicht im richtigen Verzeichnis befindet.

Entwicklung

Mit Hilfe der grafischen Programmierung Java-Swing kann nun eine Anwendung programmiert werden, die nach Euren Wünschen gestaltet werden kann. Die IDE Netbeans liefert hierfür einen sehr mächtigen Design-Editor, der einem bei der Programmierung hilft. Das hier zum Download zur Verfügung gestellte Java-Projekt dient nur als Beispiel zur Verwendung von Java-Swing und vor allem zur Nutzung der RxTx-Bibliothek.

Das Programm stellt ein Terminal bereit mit dem Daten zu einem Terminal gesendet und von einem Terminal empfangen werden können. Der Datentransfer wird entsprechend grafisch dargestellt. Ein Terminal kann zum Beispiel ein Mikrocontroller mit beschaltetem FTDI-Chip sein.

Add a Comment

Your email address will not be published. Required fields are marked *