EV3JLIB Beispiele

Das Ziel dieses Kapitels ist, ein Java-Programm im direkten Modus auf dem EV3 zum Laufen zu bringen. Im direkten Modus kommuniziert euer Rechner mit Remote-Kommandos an den EV3. Das hat den Vorteil dass das Programm nicht extra zum EV3 hochgeladen werden muss, sondern auf eurem Rechner ausgeführt wird. Die Steuerungs-Kommandos für den EV3 werden als Remote-Befehle zum EV3 gesendet.

Damit ihr in der Entwicklungsumgebung Eclipse Programme für den EV3 mit der Bibliothek EV3JLIB schreiben könnt, müsst ihr die Bibliotheken von leJOS und am besten auch das EV3-Plugin für Eclipse installiert haben.

EV3JLIB – Dateien in den Eclipse-Workspace kopieren

Dazu benötigt ihr als erstes die EV3JLIB-Bibliothek für den direkten Modus:  EV3JLib

Nach dem Download solltet ihr die Dateien noch in euren Eclipse-Workspace für eure EV3-Projekte kopieren. Ich hab die Erweiterung EV3JLIB beispielsweise in das Lib-Verzeichnis meiner leJOS-Dateien kopiert.

Euer aktuelles leJOS-Verzeichnis findet ihr z.B. unter den Einstellungen für das EV3-Plugin in Eclipse unter: Eclipse -> Einstellungen -> leJOS EV3 -> EV3_HOME

Verzeichnis für EV3JLIB auswählen

EV3_HOME – Verzeichnis

Auf der gleichen Ebene des EV3_HOME-Verzeichnis hab dann z.B. ein neues Verzeichnis mit dem Namen EV3JLIB angelegt und den gesamten Inhalt aus der heruntergeladenen EV3JLIB-ZIP-Datei in das neue Verzeichnis kopiert.

Verzeichnis von EV3_HOME

EV3_HOME auf der Festplatte

Im Verzeichnis lib befindet sich das Package EV3JLIB.jar dass ihr für eure Java-Programme benötigt. Dann gibt es u.a. noch diese Verzeichnisse:

  • doc: Die gesamte Dokumentation im HTML-Format
  • examples: Jede Menge cooler Beispiele
  • src: Der gesamte Quellcode der Bibliothek

Neues Projekt anlegen

Als nächstes legen wir in dem gleichen Eclipse-Workspace, wie das Projekt leJOS, ein neues EV3-Projekt mit  File -> New -> Project.. -> leJOS EV3 Project anUnter Projekt-Name geben wir den Namen des EV3-Projekts ein. Ich nenne das diesmal ev3jlib. Unter JRE wählen wir z.B. Use a project specific JRE aus. Und als JRE wählen wir z.B. das im vorherigen Schritt konfigurierte JDK 1.8 aus.

EV3JLIB Projekt

Neues Projekt anlegen

Nach dem Klick auf den Finish – Button wird das Projekt angelegt und enthält bereits wieder die für leJOS benötigten JAVA-Bibliotheken. Zusätzlich benötigt ihr zum Programmieren mit EV3JLIB jetzt noch die Bibliothek EV3JLIB.jar im Build-Path eures Projekts, damit Eclipse den Namen der Packages  und Methoden auch bekannt sind und ihr sie in euren Programmen verwenden könnt. Diese Bibliothek könnt ihr in Eclipse mit einem Klick der rechten Maustaste auf euer EV3JLIB-Projekt im Package-Explorer -> Properties -> JAVA Build Path -> Libraries -> Add External jars…auswählen.

Dann navigiert ihr zu der Bibliothek EV3LIB.jar im vorher kopierten Verzeichnis und wählt sie aus.

EV3JLIB.JAR

Einfügen von EV3JLIB.jar ins Projekt

Danach sollte die Bibliothek EV3JLIB.jar in eurem Build-Path auftauchen.

EV3JLIB in Eclipse

EV3JLIB im Java Build-Path

Im Package-Explorer von Eclipse sollte die Bibliothek nun ebenfalls unter Referenced Libraries zu sehen sein.

EV3LIB.jar

Referenced Libraries

Wenn ihr in Eclipse ein JDK größer als 1.7 verwendet, müsst ihr jetzt noch die Compiler-Einstellung für das gesamte Projekt auf die JAVA Version 1.7 einstellen. Das Umstellen der Compiler-Version geht wieder am einfachsten mit einem rechten Mausklick auf das Projekt ev3jlib im Package-Explorer und Auswahl von Properties -> Java Compiler. Dort wählt ihr unter Compiler compliance level die Version 1.7 aus der Dropdown-Box.

Einstellen der Compiler Version

Compiler auf 1.7 umstellen

Ev3jlibLCD

So weit so gut. Wenn alles geklappt hat, könnt ihr nun eure erste Java-Klasse für die Bibliothek EV3JLIB anlegen und danach das Programm laufen lassen. Zunächst legen wir eine neue Klasse an. Das geht wie gehabt über File -> New -> Class. Als Package-Namen hab ich diesmal z.B. com.lego.ev3.ev3jlib vergeben, weil das Programm diesmal mit den Klassen aus der Bibliothek ev3jlib zusammen laufen soll. Als Namen wählt ihr z.B. Ev3jlibLCD.

LCDTest

Neue Klasse für EV3JLIB

Mit Klick auf Finish wird die Java-Klasse angelegt. .

Kopiert nun folgenden Beispiel-Code in eure neu angelegte Klasse:

package com.lego.ev3.ev3jlib;

import ch.aplu.ev3.LegoRobot;

public class Ev3jlibLCD {

  public static void introMessage() {
    LegoRobot robot = new LegoRobot("10.0.1.1");
    robot.clearDisplay();
    robot.drawString("Hello World", 2,3);
    String ip = robot.getIPAddress();
    System.out.println("EV3 IP = " +  ip);
    robot.exit();
  }

  public static void main(String[] args) {
    introMessage();
  }
}

Das kleine Programm führt folgende Aktionen durch:

  • Aufbau einer Verbindung im Direkt-Modus zu eurem EV3
  • Ausgabe eines Begrüßungstextes im Display des EV3 in der 3.Zeile und 2.Spalte
  • Lesen der IP-Adresse des EV3
  • Ausgabe der vom EV3 erhaltenen IP-Adresse in der Java-Konsole in Eclipse

Da wir die Bibliotheken für den Direkt-Modus von EV3JLIB verwenden, müsst ihr vor dem Start des Programms noch den Remote-Server im EV3-Brick starten. Erst danach können sich euer Rechner und der EV3 über die IP-Socken-Verbindung mit Remote-Kommandos unterhalten.

Den Remote-Server mit dem Namen Brickgate startet ihr direkt am EV3. Dazu wählt ihr zuerst das Programm Brickgate.jar mit Programs -> Brickgate.jar aus.

Remote-Server Brickgate

Auswahl von Brickgate.jar

Dann startet ihr den Server mit der Return-Taste (Mittlere Taste) am EV3. Es erscheinen ein paar Status-Meldungen. Wurde der Server erfolgreich gestartet, blinken die grünen LEDs am EV3, solange der Server aktiv ist. Beenden könnt ihr den Server mit der Esc-Tate (linke obere Taste).

Gestartet

Remote-Server gestartet

Diesmal müsst ihr euer Programm als Java Application und nicht als leJOS EV3 Program starten. Das geht mit Run -> Run As -> Java Application direkt in Eclipse  (Damit Run As oder Debug As im Menü erscheint, müsst ihr eventuell in das Editor-Fenster klicken). Mit Run -> Debug As -> Java Application könnt ihr das Programm in Eclipse im Debug-Mode starten, also Breakpoints setzen, Variablen anschauen u.s.w..

Beim Starten des Programms erscheint noch eine Status-Meldung über den Verbindungsaufbau zum EV3 (Durch die Klasse LegoRobot).

EV3JLIB-Connect

Connect-Meldung zum EV3

BorderFollower

Im zweiten Beispiel folgt der EV3-Roboter mit Hilfe eines Lichtsensors am Eingangs-Port 1 des EV3 einer schwarzen Linie. Legt wieder eine neue Java-Klasse an und gebt ihr den Namen BorderFollower. Das Beispiel findet ihr auch hier: BorderFollower

Kopiert nun folgenden Beispiel-Code in eure neu angelegte Klasse und startet es wie gehabt als Java Application.

package com.lego.ev3.ev3jlib;

import ch.aplu.ev3.LegoRobot;
import ch.aplu.ev3.LightSensor;
import ch.aplu.ev3.SensorPort;
import ch.aplu.ev3.Gear;

class BorderFollower
{
  BorderFollower()
  {
    LegoRobot robot = new LegoRobot();
    LightSensor ls = new LightSensor(SensorPort.S1);
    robot.addPart(ls);
    ls.activate(true);
    Gear gear = new Gear();
    gear.setSpeed(20);
    robot.addPart(gear);
    while (true)
    {
      if (ls.getValue() < 500)
        gear.leftArc(0.2);
      else
        gear.rightArc(0.2);
    }
  }

  public static void main(String[] args)
  {
    new BorderFollower();
  }
}

Weitere Beispiele findet ihr im dem Verzeichnis von EV3JLIB oder auf der Webseite von Dr. Aegidus Pluess.

Weiter geht’s mit der Roboter-Simulation für den EV3.