Android mit Arduinoâ„¢ Due. Manuel di Cerbo

Android mit Arduinoâ„¢ Due - Manuel di  Cerbo


Скачать книгу
zur Verfügung stehen. Das ist zum einen der native USB (NATIVE USB -> SAM3X) und zum anderen die Programmierschnittstelle (PROGRAMMING -> ATMEGA16U2). Der native USB-Anschluss ist eine Neuheit des Arduino Due. Dieser native USB-Port ist direkt mit dem Haupt-Mikrocontroller (SAM3X) verbunden. Er kann als USB-Host oder als USB-Device fungieren. Bisherige Arduino-Boards hatten meist nur die Programmierschnittstelle. Dabei handelt es sich um einen USB-Port, der mit einem kleineren Mikrocontroller verbunden ist. Beim Arduino Due ist das der ATMEGA16U; frühere Arduino-Boards verwendeten auch den FTDI232-Chip. Auf diesem kleinen Mikrocontroller läuft eine USB-zu-Seriell-Firmware und die Pins sind mit dem UART-Interface (RX/TX-Pins) des Haupt-Mikrocontrollers verbunden.

      Bild 2.1: Die beiden USB-Buchsen am Arduino-Due-Board.

      Verbinden Sie Ihren Host-Computer mit der Programmierschnittstelle (PROGRAMMING -> ATMEGA16U2) via USB-Kabel. Starten Sie auch die Arduino IDE, falls sie noch nicht ausgeführt wird.

      2.2 Ein erster Sketch

      In der Arduino-Entwicklungsumgebung wird ein Programm auch »Sketch« genannt. Standardmäßig sind bereits einige Sketches vorhanden. Wählen Sie deshalb File > Examples > Basics > Blink, um einen vordefinierten Sketch zu laden. Am Anfang der Datei steht kurz beschrieben, welche Funktion der Sketch hat:

      /*

      Blink

      Turns on an LED on for one second,

      then off for one second, repeatedly.

      This example code is in the public domain.

      */

      Dieses Programm schaltet also die LED periodisch an und ab, jeweils für eine Sekunde.

      Bild 2.2: Den ersten Sketch in der Arduino-Entwicklungsumgebung laden.

      Nun möchten wir diesen Sketch auf dem Arduino Due laufen lassen. Dafür muss der Source-Code zuerst für den ARM-Mikrocontroller kompiliert werden und anschließend die generierte Binärdatei transferiert und in dessen Flash geschrieben werden. Diese Arbeit nimmt uns die Arduino IDE glücklicherweise ab. Wir müssen lediglich unter Tools > Board das richtige Board auswählen. Da wir den Arduino über die Programmierschnittstelle angeschlossen haben, wählen wir Arduino Due (Programming Port). Der angeschlossene Arduino wird auf dem Host-Computer einen virtuellen COM-Port generieren. Je nach Betriebssystem ist dieser unterschiedlich benannt. Unter Windows könnte er zum Beispiel »COM4« heißen. Unter Linux hingegen »/dev/ttyACM0« oder ähnlich. Damit die Arduino IDE das Programm auf das Arduino-Board transferieren kann, muss noch der verwendete COM-Port eingestellt werden. Das machen wir über Tools > Serial Port. Die Arduino IDE ist übrigens so clever, dass nur diejenigen Ports zur Auswahl stehen, die auch im System verfügbar sind. Den richtigen Port kann man ansonsten auch über den Geräte-Manager (Windows) herausfinden. In Linux verwenden wir den Befehl dmesg kurz nach dem Einstecken des Arduino Due. Im folgenden Beispiel wurde der COM-Port »/dev/ttyACM0« erstellt.

      user@host:~$ dmesg

      …

      [13113.208429] usb 1-2.4.1: new full-speed USB device number 29 using ehci_hcd

      [13113.303141] cdc_acm 1-2.4.1:1.0: ttyACM0: USB ACM device

      user@host:~$ ls -l /dev/ttyA*

      crw-rw– 1 root dialout 166, 0 Dec 4 16:37 /dev/ttyACM0

      Bild 2.3: Wählen Sie als Board Arduino Due (Programming Port).

      Bild 2.4: Unter Linux wählen Sie den Serial Port > /dev/ttyACM0.

      Nachdem Sie den Serial Port eingestellt haben, klicken Sie nun auf das Verify-Symbol. Sie können auch über das Menü Sketch > Verify/Compile anwählen oder direkt die Tastenkombination CTRL + R verwenden. Somit wird der Kompilierungsvorgang gestartet. Anschließend laden wir die Programmdatei auf den Mikrocontroller mit Klick auf das Upload-Symbol. Alternativ dazu wählen Sie File > Menu oder die Tastenkombination CTRL + U.

      Bild 2.5: Hier finden Sie die Buttons zum Kompilieren und zum Upload.

      Falls alles geklappt hat, sollte die kleine LED auf dem Arduino Due nun periodisch blinken!

      Wenn Sie eine Linux-Distribution verwenden, kann es vorkommen, dass Sie eine Fehlermeldung »Permission denied« erhalten, welche aufgrund unzureichender Benutzerrechte ausgegeben wird. Dies können wir schnell beheben, indem wir die Rechte des erstellten Device-Nodes ändern:

      user@host:~$ ls -l /dev/ttyA*

      crw-rw– 1 root dialout 166, 0 Dec 4 16:37 /dev/ttyACM0

      user@host:~$ sudo chmod 666 /dev/ttyACM0

      Damit erteilen wir Schreibe- und Leserechte für alle Benutzer des Betriebssystems, und ein Upload aus der Arduino IDE sollte nun funktionieren. Nachdem der Arduino allerdings vom Computer entfernt und erneut einsteckt wurde, sind diese modifizierten Rechte nicht mehr gespeichert.

      Für eine permanente Lösung betrachten wir den erstellten Device-Node und stellen fest, dass dieser zum Benutzer »root« und zur Gruppe »dialout« gehört. Sowohl der Benutzer »root« als auch Mitglieder der Gruppe »dialout« haben Schreibe- und Leserechte. Damit auch wir in Zukunft Zugriffsrechte haben, fügen wir unseren Benutzer der Gruppe »dialout« hinzu. Gleichermaßen hat dann auch die Arduino IDE die benötigten Zugriffsrechte, weil wir sie unter unserem Benutzer gestartet haben. Beachten Sie, dass wir in diesem Buch von einem Benutzer »user« ausgehen, ersetzen Sie also die entsprechenden Vorkommnisse von »user« durch ihren eigenen Benutzernamen.

      user@host:~$ ls -l /dev/ttyA*

      crw-rw– 1 root dialout 166, 0 Dec 4 16:37 /dev/ttyACM0

      user@nexwork:~$ groups user

      user adm cdrom plugdev lpadmin admin sambashare

      user@nexwork:~$ sudo adduser user dialout

      user@nexwork:~$ groups user

      user adm dialout cdrom plugdev lpadmin admin sambashare

      2.3 Änderungen am Blink-Sketch

      Bis jetzt haben wir noch gar nichts selbst programmiert. Nun werden wir das Blink-Programm etwas abändern und schauen, ob sich das Verhalten ändert. Dazu vergrößern wir die beiden Zeitintervalle auf jeweils 3 Sekunden. Danach laden wir den Sketch erneut auf das Arduino Due. Die loop()-Funktion sollte also folgendermaßen aussehen:

      void loop() {

      digitalWrite(led, HIGH);

      delay(3000); // wait for three seconds

      digitalWrite(led, LOW);

      delay(3000); // wait for three seconds

      }

      Nachdem der Mikrocontroller neu beschrieben wurde, blinkt die LED nun deutlich langsamer als zuvor.

      2.4 Die Arduino-Programmiersprache

      Arduino besitzt eigentlich keine eigene Programmiersprache. Vielmehr versteht man unter der Arduino-Programmiersprache ein Framework, das eine Sammlung von Funktionen und Bibliotheken zur Verfügung stellt. Die Programmierung erfolgt in C und/oder C++, wobei die Arduino-spezifischen Funktionen verwendet werden können. Eine Übersicht der Arduino-Programmiersprache findet man auf der offiziellen Arduino-Webseite unter dem Reiter Reference (http://arduino.cc/en/Reference/HomePage). Erwähnenswert ist insbesondere auch, dass es sich um eine »Cross-Plattform«-Programmiersprache handelt. Ein Programm, welches für ein spezifisches Board mit dazugehörigem Mikrocontroller


Скачать книгу