Skip to content

6. Anhänge

Hier erklären wir, wie die in diesem Dokument verwendeten Tools auf Windows-7- bis Windows-10-Rechnern installiert werden. Der Leser sollte diese Anweisungen an seine eigene Umgebung anpassen.

6.1. Installation der Arduino-IDE

Die offizielle Arduino-Website ist [http://www.arduino.cc/]. Dort finden Sie die Entwicklungs-IDE für Arduinos [http://arduino.cc/en/Main/Software]:

 

Die heruntergeladene Datei [1] ist eine ZIP-Datei, die nach dem Entpacken die Verzeichnisstruktur [2] erstellt. Sie können die IDE durch Doppelklick auf die ausführbare Datei [3] starten.

6.2. Installation des Arduino-Treibers

Damit die IDE mit einem Arduino kommunizieren kann, muss der Arduino vom Host-PC erkannt werden. Führen Sie dazu die folgenden Schritte aus:

  • Schließen Sie den Arduino an einen USB-Anschluss des Host-Computers an;
  • Das System versucht dann, den Treiber für das neue USB-Gerät zu finden. Es wird ihn nicht finden. Sie müssen dann angeben, dass sich der Treiber auf der Festplatte unter <arduino>/drivers befindet, wobei <arduino> der Installationsordner für die Arduino-IDE ist.

6.3. Testen der IDE

Um die IDE zu testen, führen Sie die folgenden Schritte aus:

  • Starten Sie die IDE;
  • Schließen Sie das Arduino über sein USB-Kabel an den PC an. Schließen Sie vorerst keine Netzwerkkarte an;
  • Wählen Sie unter [1] den Typ des Arduino-Boards aus, das an den USB-Anschluss angeschlossen ist;
  • Geben Sie unter [2] den USB-Anschluss an, an den der Arduino angeschlossen ist. Um dies herauszufinden, ziehen Sie den Stecker des Arduinos ab und notieren Sie sich die Anschlüsse. Stecken Sie ihn wieder ein und überprüfen Sie die Anschlüsse erneut: Der hinzugefügte Anschluss ist der des Arduinos;

Führen Sie einige der in der IDE enthaltenen Beispiele aus:

 

Das Beispiel wird geladen und angezeigt:

 

Die in der IDE enthaltenen Beispiele sind sehr lehrreich und gut kommentiert. Arduino-Code wird in C geschrieben und besteht aus zwei unterschiedlichen Teilen:

  • eine [setup]-Funktion, die einmalig beim Start der Anwendung ausgeführt wird, entweder wenn sie vom Host-PC auf den Arduino „hochgeladen“ wird oder wenn die Anwendung bereits auf dem Arduino vorhanden ist und die [Reset]-Taste gedrückt wird. Hier platzieren Sie den Initialisierungscode der Anwendung;
  • eine [loop]-Funktion, die kontinuierlich ausgeführt wird (Endlosschleife). Hier befindet sich der Kern der Anwendung.

Hier

  • konfiguriert die [setup]-Funktion Pin 13 als Ausgang;
  • die [loop]-Funktion schaltet ihn wiederholt ein und aus: Die LED leuchtet jede Sekunde auf und erlischt wieder.
 

Das angezeigte Programm wird über die Schaltfläche [1] auf den Arduino hochgeladen. Nach dem Hochladen wird es ausgeführt und LED 13 beginnt, ununterbrochen zu blinken.

6.4. Arduino-Netzwerkverbindung

Der/die Arduino(s) und der Host-PC müssen sich im selben privaten Netzwerk befinden:

Wenn nur ein Arduino vorhanden ist, kann dieser über ein einfaches RJ-45-Kabel an den Host-PC angeschlossen werden. Sind mehrere Arduinos vorhanden, werden der Host-PC und die Arduinos über einen Mini-Hub mit demselben Netzwerk verbunden.

Der Host-PC und die Arduinos werden im privaten Netzwerk 192.168.2.x platziert.

  • Die IP-Adressen der Arduinos werden über den Quellcode festgelegt. Wir werden sehen, wie das geht;
  • Die IP-Adresse des Host-Computers kann wie folgt festgelegt werden:
  • Gehen Sie zu [Systemsteuerung\Netzwerk und Internet\Netzwerk- und Freigabecenter]:
 
  • Folgen Sie unter [1] dem Link [LAN-Verbindung]
  • Rufen Sie unter [2] die Verbindungseigenschaften auf;
  • Zeigen Sie in [4] die IPv4-Eigenschaften [3] der Verbindung an;
 
  • Weisen Sie in [5] dem Host-Computer die IP-Adresse [192.168.2.1] zu;
  • Weisen Sie in [6] dem Netzwerk die Subnetzmaske [255.255.255.0] zu;
  • Bestätigen Sie alles in [7].

6.5. Testen einer Netzwerkanwendung

Laden Sie über die IDE das Beispiel [Beispiele / Ethernet / WebServer]:


/*
  Web Server
 
 A simple web server that shows the value of the analog input pins.
 using an Arduino Wiznet Ethernet shield. 
 
 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13
 * Analog inputs attached to pins A0 through A5 (optional)
 
 created 18 Dec 2009
 by David A. Mellis
 modified 9 Apr 2012
 by Tom Igoe
 
 */
 
#include <SPI.h>
#include <Ethernet.h>
 
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1, 177);
 
// Initialize the Ethernet server library
// with the IP address and port you want to use 
// (port 80 is default for HTTP):
EthernetServer server(80);
 
void setup() {
 // Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
 
 
  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}
 
 
void loop() {
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
                    // add a meta refresh tag, so the browser pulls again every 5 seconds:
          client.println("<meta http-equiv=\"refresh\" content=\"5\">");
          // output the value of each analog input pin
          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            int sensorReading = analogRead(analogChannel);
            client.print("analog input ");
            client.print(analogChannel);
            client.print(" is ");
            client.print(sensorReading);
            client.println("<br />");       
          }
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        } 
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    Serial.println("client disconnected");
  }
}

Diese Anwendung erstellt einen Webserver auf Port 80 (Zeile 30) unter der in Zeile 25 angegebenen IP-Adresse. Die MAC-Adresse in Zeile 23 ist die auf der Netzwerkplatine des Arduino angegebene MAC-Adresse.

Die Funktion [setup] initialisiert den Webserver:

  • Zeile 34: Initialisiert den seriellen Port, über den die Anwendung Daten protokolliert. Wir werden diese Protokolle überwachen;
  • Zeile 41: Der TCP/IP-Knoten (IP, Port) wird initialisiert;
  • Zeile 42: Der Server aus Zeile 30 wird auf diesem Netzwerkknoten gestartet;
  • Zeilen 43–44: protokolliert die IP-Adresse des Webservers;

Die Funktion [loop] implementiert den Webserver:

  • Zeile 50: Wenn ein Client eine Verbindung zum Webserver herstellt, gibt [server].available diesen Client zurück; andernfalls gibt sie null zurück;
  • Zeile 51: wenn der Client nicht null ist;
  • Zeile 55: solange der Client verbunden ist;
  • Zeile 56: [client].available ist wahr, wenn der Client Zeichen gesendet hat. Diese werden in einem Puffer gespeichert. [client].available gibt wahr zurück, solange dieser Puffer nicht leer ist;
  • Zeile 57: Ein vom Client gesendetes Zeichen wird gelesen;
  • Zeile 58: Dieses Zeichen wird in die Log-Konsole ausgegeben;
  • Zeile 62: Im HTTP-Protokoll tauschen Client und Server Textzeilen aus.
    • Der Client sendet eine HTTP-Anfrage an den Webserver, indem er eine Reihe von Textzeilen sendet, die mit einer Leerzeile enden;
    • Der Server antwortet dem Client dann, indem er eine Antwort sendet und die Verbindung schließt;

Zeile 62: Der Server führt keine Aktion mit den vom Client empfangenen HTTP-Headern durch. Er wartet lediglich auf die Leerzeile: eine Zeile, die nur das Zeichen \n enthält;

  • Zeilen 64–67: Der Server sendet dem Client die Standardtextzeilen des HTTP-Protokolls. Sie enden mit einer Leerzeile (Zeile 67);
  • Ab Zeile 68 sendet der Server ein Dokument an seinen Client. Dieses Dokument wird vom Server dynamisch generiert und liegt im HTML-Format vor (Zeilen 68–69);
  • Zeile 71: Eine spezielle HTML-Zeile, die den Browser des Clients anweist, die Seite alle 5 Sekunden zu aktualisieren. Somit fordert der Browser alle 5 Sekunden dieselbe Seite an;
  • Zeilen 73–80: Der Server sendet die Werte der 6 analogen Eingänge des Arduino an den Browser des Clients;
  • Zeile 81: Das HTML-Dokument wird geschlossen;
  • Zeile 82: Wir verlassen die while-Schleife aus Zeile 55;
  • Zeile 97: Die Verbindung zum Client wird geschlossen;
  • Zeile 98: Das Ereignis wird in der Log-Konsole protokolliert;
  • Zeile 100: Wir kehren zum Anfang der Schleifenfunktion zurück: Der Server wird wieder auf Client-Anfragen warten. Wir haben erwähnt, dass der Client-Browser alle 5 Sekunden dieselbe Seite anfordern würde. Der Server wird bereit sein, erneut zu antworten.

Ändere den Code in Zeile 25 so, dass er die IP-Adresse deines Arduinos enthält, zum Beispiel:

IPAddress ip(192,168,2,2);

Laden Sie das Programm auf den Arduino hoch. Starten Sie die Log-Konsole (Strg-M) (M groß):

  • in [1] die Log-Konsole. Der Server wurde gestartet;
  • in [2] rufen wir über einen Browser die IP-Adresse des Arduino ab. Hier wird [192.168.2.2] standardmäßig in [http://198.162.2.2:80] umgewandelt;
  • in [3], die vom Webserver gesendeten Informationen. Wenn Sie den Quellcode der Browserseite anzeigen, erhalten Sie:
<!DOCTYPE HTML>
<html>
<meta http-equiv="refresh" content="5">
analog input 0 is 1023<br />
analog input 1 is 1023<br />
analog input 2 is 727<br />
analog input 3 is 543<br />
analog input 4 is 395<br />
analog input 5 is 310<br />
</html>

Hier sehen wir die vom Server gesendeten Textzeilen. Auf der Arduino-Seite zeigt die Log-Konsole an, was der Client ihr sendet:

new client
GET /favicon.ico HTTP/1.1
Host: 192.168.2.2
Connection: keep-alive
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22
Accept-Encoding: gzip,deflate,sdch
Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

client disconnected
  • Zeilen 2–9: Standard-HTTP-Header;
  • Zeile 10: die Leerzeile, die sie abschließt.

Schau dir dieses Beispiel genau an. Es wird dir helfen, die im Labor verwendete Arduino-Programmierung zu verstehen.

6.6. Die aJson-Bibliothek

In der Laborübung, die Sie erstellen werden, tauschen die Arduinos Textzeilen im JSON-Format mit ihren Clients aus. Standardmäßig enthält die Arduino-IDE keine Bibliothek zur Verarbeitung von JSON. Wir werden die aJson-Bibliothek installieren, die unter [https://github.com/interactive-matter/aJson] verfügbar ist.

  • Laden Sie unter [1] die komprimierte Version aus dem GitHub-Repository herunter;
  • entpacken Sie den Ordner und kopieren Sie den Ordner [aJson-master] [2] in den Ordner [<arduino>/libraries] [3], wobei <arduino> der Installationsordner der Arduino-IDE ist;
  • Benennen Sie diesen Ordner in [4] in [aJson] um;
  • in [5] dessen Inhalt.

Starten Sie nun die Arduino-IDE:

 

Überprüfen Sie, ob in den Beispielen nun Beispiele für die aJson-Bibliothek vorhanden sind. Führen Sie diese Beispiele aus und sehen Sie sie sich an.

6.7. Das Android-Tablet

Die Beispiele wurden mit dem Samsung Galaxy Tab 2 getestet.

Um die Beispiele auf einem Tablet zu testen, müssen Sie zunächst den Treiber des Tablets auf Ihrem Entwicklungsrechner installieren. Den Treiber für das Samsung Galaxy Tab 2 finden Sie unter der URL [http://www.samsung.com/fr/support/usefulsoftware/KIES/]:

 

Um die Beispiele zu testen, müssen Sie das Tablet mit einem Netzwerk (wahrscheinlich WLAN) verbinden und dessen IP-Adresse in diesem Netzwerk kennen. So gehen Sie vor (Samsung Galaxy Tab 2):

  • Schalten Sie Ihr Tablet ein;
  • Suchen Sie unter den auf dem Tablet verfügbaren Apps (oben rechts) nach der App namens [Einstellungen] mit einem Zahnrad-Symbol;
  • Aktivieren Sie im linken Bereich WLAN;
  • Wählen Sie im rechten Bereich ein WLAN-Netzwerk aus;
  • Sobald die Verbindung zum Netzwerk hergestellt ist, tippen Sie kurz auf das ausgewählte Netzwerk. Die IP-Adresse des Tablets wird angezeigt. Notieren Sie sich diese. Sie werden sie benötigen;

Bleiben Sie in der App [Einstellungen] und

  • die Option [Entwickleroptionen] auf der linken Seite (ganz unten in der Liste) aus;
  • Stellen Sie sicher, dass die Option [USB-Debugging] auf der rechten Seite aktiviert ist.

Um zum Menü zurückzukehren, tippe auf das mittlere Symbol in der Statusleiste unten – das, das wie ein Haus aussieht. Noch immer in der Statusleiste unten,

  • ist das Symbol ganz links die Zurück-Taste: Es bringt Sie zum vorherigen Bildschirm zurück;
  • das Symbol ganz rechts ist der Task-Manager. Dort kannst du alle derzeit auf deinem Tablet ausgeführten Aufgaben anzeigen und verwalten;

Schließen Sie Ihr Tablet mit dem mitgelieferten USB-Kabel an Ihren PC an.

Stecken Sie den WLAN-Dongle in einen der USB-Anschlüsse des PCs und verbinden Sie sich dann mit demselben WLAN-Netzwerk wie das Tablet. Sobald dies erledigt ist, geben Sie in einem DOS-Fenster den Befehl [ipconfig] ein:

dos>ipconfig

Configuration IP de Windows

Carte Ethernet Connexion au réseau local :

   Suffixe DNS propre à la connexion. . . :
   Adresse IPv6 de liaison locale. . . . .: fe80::698b:455a:925:6b13%4
   Adresse IPv4. . . . . . . . . . . . . .: 192.168.2.1
   Masque de sous-réseau. . . . . . . . . : 255.255.255.0
   Passerelle par défaut. . . . . . . . . :

Carte réseau sans fil Wi-Fi :

   Suffixe DNS propre à la connexion. . . :
   Adresse IPv6 de liaison locale. . . . .: fe80::39aa:47f6:7537:f8e1%2
   Adresse IPv4. . . . . . . . . . . . . .: 192.168.1.25
   Masque de sous-réseau. . . . . . . . . : 255.255.255.0
Passerelle par défaut. . . . . . . . . : 192.168.1.1

Ihr PC verfügt über zwei Netzwerkkarten und somit über zwei IP-Adressen:

  • die in Zeile 9, die die Adresse des PCs im kabelgebundenen Netzwerk ist;
  • die in Zeile 17, die die Adresse des PCs im WLAN-Netzwerk ist;

Notieren Sie sich diese beiden Informationen. Sie werden sie benötigen. Sie befinden sich nun in der folgenden Konfiguration:

Das Tablet muss eine Verbindung zu Ihrem PC herstellen. Ihr PC ist normalerweise durch eine Firewall geschützt, die verhindert, dass externe Geräte eine Verbindung zu ihm herstellen. Sie müssen daher die Firewall deaktivieren. Tun Sie dies über die Option [Systemsteuerung\System und Sicherheit\Windows-Firewall]. Manchmal müssen Sie auch die von Ihrer Antivirensoftware eingerichtete Firewall deaktivieren. Dies hängt von Ihrem Antivirenprogramm ab.

Überprüfen Sie nun auf Ihrem PC die Netzwerkverbindung zum Tablet mit dem Befehl [ping 192.168.1.y], wobei [192.168.1.y] die IP-Adresse des Tablets ist. Sie sollten etwa folgende Anzeige sehen:

dos>ping 192.168.1.26

Envoi d'une requête 'Ping'  192.168.1.26 avec 32 octets de données :
Réponse de 192.168.1.26 : octets=32 temps=244 ms TTL=64
Réponse de 192.168.1.26 : octets=32 temps=199 ms TTL=64
Réponse de 192.168.1.26 : octets=32 temps=28 ms TTL=64
Réponse de 192.168.1.26 : octets=32 temps=88 ms TTL=64

Statistiques Ping pour 192.168.1.26:
    Paquets : envoyés = 4, reçus = 4, perdus = 0 (perte 0%),
Durée approximative des boucles en millisecondes :
Minimum = 28ms, Maximum = 244ms, Moyenne = 139ms

Die Zeilen 4–7 zeigen an, dass die IP-Adresse [192.168.1.y] auf den Befehl [ping] geantwortet hat.

6.8. Installation eines JDK

Das neueste JDK finden Sie unter der URL [http://www.oracle.com/technetwork/java/javase/downloads/index.html] (Stand: Juni 2016). Wir bezeichnen den JDK-Installationsordner im Folgenden als <jdk-install>.

 

6.9. Installation des Genymotion-Emulator-Managers

Das Unternehmen [Genymotion] bietet einen leistungsstarken Android-Emulator an. Er ist unter der URL [https://cloud.genymotion.com/page/launchpad/download/] (Stand: Juni 2016) verfügbar.

Sie müssen sich registrieren, um eine Version für den privaten Gebrauch zu erhalten. Laden Sie das [Genymotion]-Produkt mit der virtuellen Maschine VirtualBox herunter:

Image

Wir bezeichnen den [Genymotion]-Installationsordner von nun an als <genymotion-install>. Starten Sie [Genymotion]. Laden Sie anschließend ein Image für ein Tablet herunter:

 
  • in [1] das in [2] beschriebene virtuelle Terminal hinzufügen;
 
  • in [3] das Terminal konfigurieren;
  • in [4-5] passen Sie das Terminal an Ihre Umgebung an;
  • in [6] starten Sie das virtuelle Terminal;

Wenn alles gut geht, sehen Sie das Fenster des Android-Emulators:

Image

Manchmal lässt sich der Android-Emulator nicht starten. Auf einem Windows-Rechner können Sie die folgenden zwei Punkte überprüfen:

  • Überprüfen Sie, ob die virtuelle Maschine [Hyper-V] installiert ist. Deinstallieren Sie sie gegebenenfalls [1-2];
  • dann im Konfigurationsassistenten [Netzwerk- und Freigabecenter] [1]:
 
  • Wählen Sie in [3] den oder die Netzwerkadapter aus, die der VirtualBox-Virtual Machine zugeordnet sind;
 
  • Stellen Sie sicher, dass in [6] der Treiber für VirtualBox aktiviert ist. Wiederholen Sie diesen Schritt für alle Netzwerkadapter, die der virtuellen Maschine von VirtualBox zugeordnet sind;

6.10. Installation von Maven

Maven ist ein Tool zur Verwaltung von Abhängigkeiten in einem Java-Projekt und mehr. Es ist unter der URL [http://maven.apache.org/download.cgi] verfügbar.

 

Laden Sie das Archiv herunter und entpacken Sie es. Wir bezeichnen den Maven-Installationsordner als <maven-install>.

  
  • In [1] wird Maven über die Datei [conf/settings.xml] konfiguriert;

Sie enthält die folgenden Zeilen:


  <!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
-->

Der Standardwert in Zeile 4 kann – falls Ihr {user.home}-Pfad wie in meinem Fall ein Leerzeichen enthält (zum Beispiel [C:\Users\Serge Tahé]) – bei bestimmter Software zu Problemen führen. In diesem Fall sollten Sie etwa Folgendes schreiben:


  <!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
  -->
<localRepository>D:\Programs\devjava\maven\.m2\repository</localRepository>

und in Zeile 7 vermeiden wir einen Pfad, der Leerzeichen enthält.

6.11. Installation der Android Studio IDE

Die Android Studio Community Edition IDE ist unter [https://developer.android.com/studio/index.html] (Juni 2016) verfügbar:

 

Installieren Sie die IDE und starten Sie sie anschließend. Befolgen Sie die Schritte [1–8], um die SDK-Manager-Komponenten zu installieren, die in den folgenden Beispielen verwendet werden. Wenn Sie sich entscheiden, neuere Komponenten zu installieren, erhalten Sie wahrscheinlich Warnungen von Android Studio, dass die Beispielkonfiguration auf SDK-Komponenten verweist, die in Ihrer Umgebung nicht vorhanden sind. Sie können dann den Vorschlägen der IDE folgen.

 
 
  • In [9] die Paketdetails anzeigen:
  • In [11] oben wurden die Beispiele mit SDK Build-Tools 23.0.3 verwendet;
  • in den folgenden Abschnitten [9–12] geben Sie den Ordner an, in dem Sie den Emulator-Manager [Genymotion] installiert haben;
  • Konfigurieren Sie in [13–18] den Standardprojekttyp;
  • in [17] ist der Standardwert in der Regel korrekt;
  • Stellen Sie in [18] sicher, dass Sie über JDK 1.8 verfügen;

Deaktivieren Sie unten in [19–26] die Rechtschreibprüfung, die standardmäßig auf Englisch eingestellt ist;

 
  • Wählen Sie unten unter [27-28] die gewünschten Tastenkombinationen aus. Sie können die Standardeinstellungen von IntelliJ beibehalten oder solche aus einer anderen IDE wählen, an die Sie eher gewöhnt sind;
 
  • Aktivieren Sie unten unter [29-30] die Zeilennummerierung im Code;
 
  • Geben Sie unten in [31-34] an, wie das erste Projekt beim Starten der IDE und nachfolgende Projekte behandelt werden sollen;
 

Bei Android 2.1 (Mai 2016) verursacht die Funktion [Instant Run] manchmal Probleme. In diesem Dokument haben wir sie deaktiviert:

  • in [3-4] wurde alles deaktiviert;

6.12. Verwendung der Beispiele

Die Android Studio-Projekte zu den Beispielen sind HIER verfügbar. Laden Sie sie herunter.

  

Die Beispiele wurden unter Verwendung der zuvor definierten Komponenten erstellt:

  • JDK 1.8;
  • Android SDK Platform 23 für die Laufzeit;

die folgenden SDK-Tools:

 

Wenn Ihre Umgebung nicht der oben beschriebenen entspricht, müssen Sie die Projektkonfiguration ändern. Dies kann recht mühsam sein. Zu Beginn ist es wahrscheinlich einfacher, eine Arbeitsumgebung einzurichten, die der oben beschriebenen ähnelt.

Starten Sie Android Studio und öffnen Sie dann das Projekt [example-07], zum Beispiel:

 
  • Öffnen Sie in [1-3] das Projekt [Example-07];
  • Öffnen Sie in [4] die Datei [local.properties];
  • Geben Sie in Zeile 11 oben den Speicherort des Android SDK Managers <sdk-manager-install> ein. Diesen finden Sie, indem Sie die Schritte [1-4] befolgen:
 

Alle Beispiele in diesem Dokument sind Gradle-Projekte, die über eine [build.gradle]-Datei konfiguriert sind [1-2]:

 

Die [build.gradle]-Datei für Beispiel 07 sieht wie folgt aus:


buildscript {
  repositories {
    mavenCentral()
    mavenLocal()
  }
  dependencies {
    // replace with the current version of the Android plugin
    classpath 'com.android.tools.build:gradle:2.1.0'
    // Since Android's Gradle plugin 0.11, you have to use android-apt >= 1.3
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
  }
}
 
apply plugin: 'com.android.application'
apply plugin: 'android-apt'
def AAVersion = '4.0.0'
 
dependencies {
  apt "org.androidannotations:androidannotations:$AAVersion"
  compile "org.androidannotations:androidannotations-api:$AAVersion"
  compile 'com.android.support:appcompat-v7:23.4.0'
  compile 'com.android.support:design:23.4.0'
  compile fileTree(dir: 'libs', include: ['*.jar'])
}
 
repositories {
  jcenter()
}
 
apt {
  arguments {
    androidManifestFile variant.outputs[0].processResources.manifestFile
    resourcePackageName android.defaultConfig.applicationId
  }
}
 
android {
  compileSdkVersion 23
  buildToolsVersion "23.0.3"
  defaultConfig {
    applicationId "android.exemples"
    minSdkVersion 15
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
  }
 
  buildTypes {
    release {
      minifyEnabled false
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
  }
 
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
  }
}

Je nach der von Ihnen eingerichteten Android-Umgebung (SDK und Tools) müssen Sie möglicherweise die Versionen in den Zeilen 8, 21, 22, 38 und 39 ändern. Android Studio hilft Ihnen dabei mit Vorschlägen. Am einfachsten ist es, diesen Vorschlägen zu folgen.

Auf die Elemente der Datei [build.gradle] kann auch auf andere Weise zugegriffen werden:

  • Die verschiedenen Registerkarten in [3] spiegeln die unterschiedlichen Werte in der Datei [build.gradle] wider. Sie können die Konfiguration daher auf diese Weise vornehmen, wodurch Sie Syntaxprobleme in der Datei [build.gradle] vermeiden können;

Ein weiterer zu prüfender Punkt ist das von der IDE verwendete JDK [5]:

 

In [6] überprüfen Sie das JDK.

Alle Beispiele sind Gradle-Projekte mit Abhängigkeiten, die heruntergeladen werden müssen. Gehen Sie dazu wie folgt vor:

  • Kompilieren Sie in [5] das Projekt;

Sobald das Projekt fehlerfrei ist, müssen Sie eine Ausführkonfiguration erstellen [1-8]:

  • Unter [8] können Sie festlegen, dass Sie für die Ausführung immer dasselbe Terminal verwenden möchten. In der Regel ist diese Option aktiviert, damit Sie nicht bei jeder neuen Ausführung das zu verwendende Terminal angeben müssen. Hier lassen wir sie deaktiviert, da wir verschiedene Android-Geräte testen werden;
  • Sobald die Ausführungskonfiguration erstellt wurde, starten Sie den Android Emulator Manager [1-3];
  • Wenn der Android-Emulator nicht startet, überprüfen Sie die in Abschnitt 6.11 genannten Punkte;

Um die Anwendung auf dem Emulator zu starten, gehen Sie wie folgt vor [1-4]:

  • In [2] sollten Sie den zuvor gestarteten Emulator sehen;
  • in [5] die vom Emulator angezeigte Ansicht;

Schließen Sie nun ein Android-Tablet an einen USB-Anschluss des PCs an und führen Sie die Anwendung darauf aus:

 
  • Wählen Sie in [6] das Android-Tablet aus und testen Sie die Anwendung.

In [7] sind bereits virtuelle Terminals vordefiniert. Wir werden lernen, wie man diese hinzufügt und entfernt.

  

Im obigen Screenshot laufen alle aufgeführten Geräte mit API 22. Wir entfernen sie alle, da wir API 23 verwenden möchten. Wir befolgen die Schritte [2-3], um die Geräte zu entfernen.

Image

 
  • In [4-5] fügen wir ein Tablet hinzu;
 
  • In [6] wählen wir eine API aus. Oben wählen wir API 23 für 64-Bit-Windows aus;
 
  • In [7] wird die Zusammenfassung der Konfiguration angezeigt;
  • In [8] können erweiterte Konfigurationen des virtuellen Terminals vorgenommen werden;

Sobald der Assistent abgeschlossen ist, wird das erstellte Terminal in [9] angezeigt.

Wenn Sie nun [Beispiel-07] erneut ausführen, wird das folgende Fenster angezeigt:

 
  • In [1] erscheint das neue virtuelle Terminal;
  • unter [2] können Sie neue erstellen;

Probieren Sie aus, welches virtuelle Terminal für Ihr System am besten geeignet ist. In diesem Dokument wurden die Beispiele in erster Linie mit dem Genymotion-Emulator getestet.

Unabhängig vom gewählten virtuellen Terminal werden die Protokolle im Fenster [Logcat] [1-2] angezeigt:

Image

Überprüfen Sie diese Protokolle regelmäßig. Hier werden Ausnahmen gemeldet, die zum Absturz Ihres Programms geführt haben.

Sie können Ihr Programm auch mit Standard-Debugging-Tools debuggen:

  • Setzen Sie in [2] einen Haltepunkt, indem Sie einmal auf die Spalte links neben der Zielzeile klicken. Durch erneutes Klicken wird der Haltepunkt entfernt;
 
  • in [3], am Haltepunkt, drücken Sie:
  • [F6], um die Zeile auszuführen, ohne in Methoden einzutreten, falls die Zeile Methodenaufrufe enthält,
  • [F5], um die Zeile auszuführen und die Methoden aufzurufen, falls die Zeile Methodenaufrufe enthält,
  • [F8], um zum nächsten Haltepunkt fortzufahren;
  • [Strg-F2], um das Debuggen zu beenden;

6.13. Installation des Chrome-Plugins [Advanced Rest Client]

In diesem Dokument verwenden wir den Chrome-Browser von Google (http://www.google.fr/intl/fr/chrome/browser/). Wir werden die Erweiterung [ Advanced Rest Client] hinzufügen. So geht's:

 
  • Die App steht dann zum Download bereit:
  • Um sie zu erhalten, müssen Sie ein Google-Konto erstellen. Der [Google Web Store] fordert Sie dann zur Bestätigung auf [1]:
  • In [2] ist die hinzugefügte Erweiterung in der Option [Anwendungen] [3] verfügbar. Diese Option erscheint auf jedem neuen Tab, den Sie im Browser erstellen (STRG-T).

6.14. Verwaltung von JSON-J en in Java

Für den Entwickler transparent nutzt das [Spring MVC]-Framework die [Jackson]-JSON-Bibliothek. Um zu veranschaulichen, was JSON (JavaScript Object Notation) ist, stellen wir hier ein Programm vor, das Objekte in JSON serialisiert und den umgekehrten Vorgang durchführt, indem es die generierten JSON-Strings deserialisiert, um die ursprünglichen Objekte wiederherzustellen.

Mit der „Jackson“-Bibliothek können Sie Folgendes erstellen:

  • die JSON-Zeichenkette eines Objekts: new ObjectMapper().writeValueAsString(object);
  • ein Objekt aus einer JSON-Zeichenkette: new ObjectMapper().readValue(jsonString, Object.class).

Beide Methoden können eine IOException auslösen. Hier ist ein Beispiel.

  

Das oben genannte Projekt ist ein Maven-Projekt mit der folgenden [pom.xml]-Datei;


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
 
  <groupId>istia.st.pam</groupId>
  <artifactId>json</artifactId>
  <version>1.0-SNAPSHOT</version>
 
  <dependencies>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.3.3</version>
    </dependency>
  </dependencies>
</project>
  • Zeilen 12–16: die Abhängigkeit, die die Bibliothek „Jackson“ enthält;

Die Klasse [Person] sieht wie folgt aus:


package istia.st.json;
 
public class Personne {
    // data
    private String nom;
    private String prenom;
    private int age;
 
    // manufacturers
    public Personne() {
 
    }
 
    public Personne(String nom, String prénom, int âge) {
        this.nom = nom;
        this.prenom = prénom;
        this.age = âge;
    }
 
    // signature
    public String toString() {
        return String.format("Personne[%s, %s, %d]", nom, prenom, age);
    }
 
    // getters and setters
...
}

Die Klasse [Main] sieht wie folgt aus:


package istia.st.json;
 
import com.fasterxml.jackson.databind.ObjectMapper;
 
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
 
public class Main {
  // the serialization / deserialization tool
  static ObjectMapper mapper = new ObjectMapper();
 
  public static void main(String[] args) throws IOException {
    // creation of a person
    Personne paul = new Personne("Denis", "Paul", 40);
    // json display
    String json = mapper.writeValueAsString(paul);
    System.out.println("Json=" + json);
    // person instantiation from Json
    Personne p = mapper.readValue(json, Personne.class);
    // person display
    System.out.println("Personne=" + p);
    // a picture
    Personne virginie = new Personne("Radot", "Virginie", 20);
    Personne[] personnes = new Personne[]{paul, virginie};
    // json display
    json = mapper.writeValueAsString(personnes);
    System.out.println("Json personnes=" + json);
    // dictionary
    Map<String, Personne> hpersonnes = new HashMap<String, Personne>();
    hpersonnes.put("1", paul);
    hpersonnes.put("2", virginie);
    // json display
    json = mapper.writeValueAsString(hpersonnes);
    System.out.println("Json hpersonnes=" + json);
  }
}

Die Ausführung dieser Klasse erzeugt folgende Bildschirmausgabe:

1
2
3
4
Json={"nom":"Denis","prenom":"Paul","age":40}
Personne=Personne[Denis, Paul, 40]
Json personnes=[{"nom":"Denis","prenom":"Paul","age":40},{"nom":"Radot","prenom":"Virginie","age":20}]
Json hpersonnes={"2":{"nom":"Radot","prenom":"Virginie","age":20},"1":{"nom":"Denis","prenom":"Paul","age":40}}

Wichtige Erkenntnisse aus dem Beispiel:

  • das für JSON/Objekt-Transformationen erforderliche [ObjectMapper]-Objekt: Zeile 11;
  • die [Person] --> JSON-Transformation: Zeile 17;
  • die JSON --> [Person]-Transformation: Zeile 20;
  • die von beiden Methoden ausgelöste [IOException]: Zeile 13.

6.15. Installation von [ WampServer]

[WampServer] ist eine Software-Suite für die Entwicklung mit PHP / MySQL / Apache auf einem Windows-Rechner. Wir werden sie ausschließlich für das MySQL-DBMS verwenden.

  • Wählen Sie auf der [WampServer]-Website [1] die passende Version [2] aus.
  • Die heruntergeladene ausführbare Datei ist ein Installationsprogramm. Während der Installation werden Sie nach verschiedenen Informationen gefragt. Diese beziehen sich nicht auf MySQL, sodass Sie sie ignorieren können. Am Ende der Installation erscheint das Fenster [3]. Starten Sie [WampServer],
 
  • In [4] erscheint das [WampServer]-Symbol in der Taskleiste unten rechts auf dem Bildschirm [4].
  • wenn Sie darauf klicken, erscheint das [5]-Menü. Damit können Sie den Apache-Server und das MySQL-DBMS verwalten. Um Letzteres zu verwalten, verwenden Sie die Option [PhpMyAdmin],
  • wodurch das unten abgebildete Fenster geöffnet wird,

Image

Wir werden nur wenige Details zur Verwendung von [PhpMyAdmin] bereitstellen. Die Verwendung wird im Dokument demonstriert.