Arduino-Bibliotheken einbinden und verwalten

So verwalten und installieren Sie Libraries mit der Arduino-Entwicklungsumgebung.

In Pocket speichern vorlesen Druckansicht
Arduino IDE
Lesezeit: 6 Min.
Von
  • Florian Schäffer

Neben dem Quellcode (der bei Arduino als Dateisuffix nicht das übliche.cpp sondern.ino aufweist) gibt es noch Include-Dateien, die auch als Libraries oder Bibliotheken bezeichnet werden. Diese benutzen dann die Endung .cpp und .h für die zugehörigen Header-Dateien, in denen meistens Konfigurationseinstellungen und Funktionsdeklarationen (Prototypen) zu finden sind. Arduino ist beim Umgang mit diesen Dateien wenig einsteigerfreundlich. Ein Teil der Include-Dateien wird üblicherweise im gleichen Ordner oder einen Unterordner abgelegt, wie die Datei mit dem Hauptprogramm (.ino). Hierbei handelt es sich dann meistens um Bibliotheken, die der Anwender selbst erstellt hat. In einem weiteren Ordner werden all die Bibliotheks-Dateien gespeichert, die aus externen Quellen stammen.

Bibliotheken in der Arduino IDE verwalten

Es gibt in der Arduino-IDE zwei Wege eine (neue) Library zu installieren. Am einfachsten ist es, wenn die Bibliothek von der IDE unterstützt wird. Dann können Sie über Sketch|Bibliothek einbinden schauen, ob die Library dort bereits aufgelistet wird und somit auch schon installiert ist. Klicken Sie einen Eintrag in dem Menü an, werden im Quellcode die notwendigen #include-Anweisungen am Anfang eingefügt. Ist die gewünschte Bibliothek noch nicht installiert, wählen Sie den Unterpunkt Bibliotheken verwalten. Im folgenden Dialogfenster können Sie dann die Suche eingrenzen und auswählen, welche Bibliotheksversion installiert werden soll. Die Dateien werden dann herunter geladen und in den richtigen Ordner kopiert.

Die Bibliotheken werden im Unterordner zu dem Verzeichnispfad fĂĽr Sketchbooks abgelegt

Gleichwertig aber etwas aufwändiger ist die manuelle Installation von Bibliotheken ohne den Bibliothekenverwalter. Als Speicherort wird der Ordner C:\<Benutzername>\Arduino\libraries benutzt. Je nach Windows-Version befindet sich der Ordner an unterschiedlichen Stellen, die Aufgrund der neuen Möglichkeit von symbolischen Verknüpfungen (Links) auch in Windows, nicht immer leicht zu finden sind und teilweise auch als Eigene Dokumente bezeichnet wird. In der Arduino Entwicklungsumgebung können Sie Datei|Voreinstellungen aufrufen und nachsehen, welcher Pfad bei Sketchbook-Speicherort steht. Dort finden Sie den Unterordner für Libraries (oder können ihn anlegen).

Zusätzlich installierte Bibliotheken für Arduino im Ordner Eigene Dokumente

Für jede Bibliothek benötigt die Arduino-IDE unbedingt einen eigenen Ordner. Der Name des Ordners und die Zahl der Unterordner bis hin zur eigenen Bibliothek sind allerdings beliebig. Die eigentlichen Library-Dateien müssen so benannt bleiben, wie sie auch im Sourcecode bei #include geschrieben werden. Groß- und Kleinschreibung ist bei C eigentlich relevant, da die Programmiersprache case-sensitive ist, weil Windows dies aber nicht beherrscht, sondern nur vorgaukelt, ist es nur für UNIX-Systeme relevant. Wenn Sie eine Bibliothek manuell installieren wollen, weil Sie sie beispielsweise von einer Webseite herunter geladen und aus einem (ZIP-) Archiv ausgepackt haben, ist es notwendig, die IDE anschließend neu zu starten.

Mehr Infos

Zeichenregeln

Um Probleme zu vermeiden, die entstehen können, wenn eine Datei auf verschiedenen Betriebssystemen genutzt wird, gelten folgende Tipps immer bei Dateinamen:

  • möglichst dreistelliger Dateisuffix zur Kennzeichnung des Dateityps
  • die Länge des gesamten Dateinamens inklusive des Verzeichnispfades darf nicht mehr als 255 Zeichen betragen
  • ausschlieĂźlich Kleinbuchstaben und Zahlen (a…z, 0…9)
  • keine Leerzeichen
  • keine Sonderzeichen (Umlaute etc.), auĂźer: Punkt ("."), Minus/Bindestrich (" "), Underscore ("_"), Tilde ("~")

Die Libraries die bei der Installation der IDE bereits mit installiert werden, sind auf weitere Ordner verteilt. Ausgehend vom Installationsordner der Software befinden sich einige Bibliotheken in Arduino\hardware\arduino\avr\libraries und weitere bei Arduino\libraries. Im Quellcode können Sie erkennen, wo welche Libraries zu finden sind.

Darstellung fĂĽr verschiedene Speicherorte bei Bibliotheken

In der Abbildung sehen Sie, dass die vorinstallierten "Standard"-Bibliotheken in spitzen Klammern angegeben werden und automatisch orange formatiert werden. Zusätzlich über den Manager installierte Dateien (recommended) werden ebenfalls in spitzen Klammern notiert aber erscheinen in schwarzer Schrift. Alle Bibliotheken in spitzen Klammern befinden sich in einem der Standard-Ordner. Selbsterstellte Libraries (contributed), die im gleichen Verzeichnis mit dem Sourcecode der einbindenden Datei gefunden werden, stehen in Anführungszeichen (blau-grün). Für Unterverzeichnisse oder andere Speicherorte ist der Bibliotheksname noch um die Pfadangabe zu ergänzen.

Die Entwicklungsumgebung behauptet, die Datei nicht öffnen zu können

Sehr ärgerlich ist, dass die IDE zickig ist, wenn Sie versuchen, eine Library-Datei ganz normal über Datei|Öffnen zu öffnen: die IDE weigert sich nämlich.

Die IDE lässt sich austricksen und es können auch Header-Dateien bearbeitet werden

Wenn Sie die Datei aber über den Datei-Explorer in die Oberfläche der IDE ziehen und dabei auf der grünen Titelzeile oder der Trennlinie zwischen oben und unten ablegen, wird sie problemlos geöffnet. Natürlich können Sie die Datei auch in jedem anderen Texteditor bearbeiten.

Arduino: Mikrocontroller fĂĽr Quereinsteiger

Meistens gibt es einige #define-Angaben hinter denen ein Name für die Präprozessor-Direktive steht und dann der einzustellende Wert. Es handelt sich dabei um so etwas ähnliches wie Konstanten, die unter dem Namen (case-sensitiv, meistens werden durchgängig Großbuchstaben verwendet) anschließend überall im Code bekannt sind. Zwischen dem Namen und dem Wert muss mindestens ein Leerzeichen sein, es können aber auch mehrere oder Tabulatoren verwendet werden. Vor dem Compilieren wird vom Präprozessor überall nach dem Namen gesucht und dieser wird durch den Wert ersetzt, so als hätten Sie diesen gleich im Code verwendet. Wird nur ein Name ohne folgenden Wert bei #define angegeben, dann ist diese Direktive definiert und es kann später mit #if defined darauf geprüft werden.

Das gleiche kann erreicht werden, wenn Sie mit dem Schlüsselwort const Konstanten deklarieren. Deren Inhalt ist dann auch überall bekannt und kann zur Laufzeit nicht (ohne Weiteres) geändert werden. Der Präprozessor erkennt diese und ersetzt den Code vor dem weiteren compilieren durch den angegebenen Wert.

Keins der beiden Verfahren bietet einen Vorteil in Bezug auf Speicherverbrauch oder Ähnliches. Die Methode mit Konstanten hat aber einen elementaren Vorteil: sie ist typensicher. Weil der Compiler den Datentyp der Konstante kennt (zum Beispiel int oder char) kann er prüfen, ob es im Programmcode zu unerlaubten Vermischungen von nicht kompatiblen Datentypen kommt ("type mismatch") und davor warnen. Mit Präprozessor-Direktiven ist dies nicht möglich und Fehler tauchen erst zur Laufzeit auf. Obwohl wohl alle C-Dialekte heute den Typ-Modifizierer const kennen, wird oft aus (falscher) Tradition auf die symbolischen Konstanten mit #define nach dem alten ANSI-C-Standard von Kernighan/Ritchie zurückgegriffen. (fls)