Verwendete Fremd-Libraries

Hier möchte ich eine Auflistung jener Libraries für Arduino und Attiny mit Verwendungshinweis und Bezugsquelle erstellen, die ich in meinen Programmen genutzt habe bzw. immer wieder nutze. Diese Liste ist in Arbeit und wird weiter ergänzt werden.


Für Arduino und teilweise auch mit Attiny in Verwendung:

Adafruit_MCP23017: Für 16 zusätzliche digitale Ein- und/oder Ausgänge verwende ich den 16-Bit I/O Expander MCP23017 mit I2C-Schnittstelle und steuere die Pins mit dieser Library -> github.com/adafruit/Adafruit-MCP23017-Arduino-Library


Adafruit_MCP4725: Zur Ansteuerung des Digital-Analogwandlers MCP4725. Mit einer Auflösung von 12 Bit kann ein Digitalwert als Analogsignal ausgegeben werden -> github.com/adafruit/Adafruit_MCP4725

(Inzwischen teste und nutze ich aber lieber meine eigene Library, da diese ein paar Funktionen mehr hat (siehe: DAC MCP4725)


ADS1115: Wem die 10 Bit-Auflösung der Analogeingänge des Arduino Uno, Mega oder Attiny45/85 zu wenig sind, kann z.B. den 16 Bit-Analog-Digitalwandler ADS1115 verwenden. Mit der Library können über I2C-Schnitttstelle Betriebsmoden vorgegeben und Messwerte eingelesen werden -> github.com/jrowberg/i2cdevlib/tree/master/Arduino/ADS1115


LiquidCrystal_I2C: Zur Ansteuerung von LCD-Anzeigen 16x2 (2 Zeilen, je 16 Zeichen) über I2C-Schnittstelle mit der Hilfe des Portexpanders PCF8574 -> fluuux.de/2014/04/pcf8574-ein-lcd-display-mit-nur-zwei-pins-arduino-betreiben/

Allerdings habe ich auch LCD-Anzeigen 16x2, wo diese Library nicht funktioniert. Für diese Anzeigen verwende ich die nachfolgende Library LiquidCrystal_I2C2004.

Achtung: Ab der IDE-Version 1.6.x funktioniert die Ausgabe mit der "print"-Funktion nicht mehr richtig. Es wird nur mehr das erste Zeichen einer Zeichenkette auf dem Display dargestellt. Eine funktionierende Version habe ich unter www.archiduino.com/liquidcrystal_i2c-h-library-arduino-ide-1-6-x/ gefunden. Sie unterscheidet sich gegenüber der ersten Version nur im folgenden Abschnitt des cpp-Files durch die Änderung der Rückgabe von "return 0" auf "return 1":

inline size_t LiquidCrystal_I2C::write(uint8_t value) {

send(value, Rs);

return 1; //Für IDE 1.6.x auf "1" geändert

}


LiquidCrystal_I2C2004: Zur Ansteuerung von LCD-Anzeigen 20x4 (4 Zeilen, je 20 Zeichen) über I2C-Schnittstelle mit der Hilfe des Portexpanders PCF8574 -> www.dfrobot.com/wiki/index.php?title=I2C_TWI_LCD2004_(SKU:DFR0154)

Ich verwende diese Library auch für LCD-Anzeigen 16x2, bei denen die oben genannte Library LiquidCrystal_I2C nicht funktioniert!

Achtung: Ich habe den Namen der Library um den Text "2004" erweitert, um sie gleichzeitig mit der oben genannten Library "LiquidCrystal_I2C" im Sketchbook-Verzeichnis gespeichert haben zu können. Ausserdem mussten dadurch auch ein paar Zeilen im cpp-File und im h-File angepasst werden. Die Erzeugung einer neuen Instanz erfolgt aber trotzdem mit "LiquidCrystal_I2C" (ohne 2004-Namenerweiterung), also z.B.:

#include <LiquidCrystal_I2C2004.h>

LiquidCrystal_I2C lcd(0x27, 20, 4); //Erzeugen einer neuen Instanz

Wie bei LiquidCrystal_I2C funktioniert ab der IDE-Version 1.6.x die Ausgabe mit der "print"-Funktion nicht mehr richtig. Es wird nur mehr das erste Zeichen einer Zeichenkette auf dem Display dargestellt. Abhilfe schafft auch hier die Änderung der Rückgabe von "return 0" auf "return 1" im nachfolgenden Abschnitt des cpp-Files:

inline size_t LiquidCrystal_I2C::write(uint8_t value) {

send(value, Rs);

return 1; //Für IDE 1.6.x auf "1" geändert

}

Wer die namentlich geänderte und angepasste Version von "LiquidCrystal_I2C2004" haben möchte, kann sie gerne bei mir über das Kontaktformular anfragen.


LowPower: Eine Library, die den Arduino in den Schlafmodus (Stromsparmodus) versetzt, z.B. für eine definierte Zeit oder bis ein Interrupt den Schlafmodus wieder beendet ->  github.com/rocketscream/Low-Power


Metro: Steuert die zeitlichen Wiederholungen von Vorgängen durch vorzugebende Zykluszeiten. Metro unterbricht aber nicht nach Ablauf der Zykluszeit, wie bei einer Interruptanforderung, das laufende Programm um in ein Unterprogramm zu verzweigen. Ob die Zykluszeit abgelaufen ist, muss regelmäßig z.B. innerhalb der Loopschleife abgefragt werden. Metro ist daher nicht für "zeitkritische" Aufgaben geeignet. Ich nutze Metro gerne, z.B. für Aktualisierung einer Anzeige im Sekundentakt, oder Einlesen eines Messwertes alle 60 Sekunden, etc. Es können im selben Programm auch mehrere Instanzen mit verschiedenen Zykluszeiten gleichzeit ablaufen -> github.com/thomasfredericks/Metro-Arduino-Wiring (auch für Attiny in Verwendung)

 

MFRC522: Das Packet, welches aus mehreren Libraries besteht, steuert die Kommunikation zwischen Arduino und RFID-Lese-/Schreib-Modulen mit MRFC522-Chip und mit RFID-Karten oder Schlüsselanhänger, z.B. MIFARE Classic.

Die Libraries gibt es hier -> github.com/miguelbalboa/rfid


OneButton: Verwendet wird diese Library zur Abfrage von Tastern. Der Vorteil ist, dass man sich nicht selbst darum kümmern muss, z.B. die Auswirkungen von prellenden Tastern oder Mehrfachklicks zu verhindern und es wird ein Mechanismus zur Verfügung gestellt, mit dem es möglich ist, bei bestimmten Ereignissen - wie z.B. Klick, Doppelklick oder langer Klick - eigene Funktionen aufzurufen.

Zu finden ist die Library hier -> github.com/mathertel/OneButton


OneWire: Zur Kommunikation mit Bauteilen mit 1-Wire- oder Eindraht-Schnittstelle

Hier gehts zur Library -> github.com/PaulStoffregen/OneWire

Eine Funktionsübersicht gibt's hier -> www.pjrc.com/teensy/td_libs_OneWire.html


PID: Zur Programmierung von Regelkreisen -> github.com/br3ttb/Arduino-PID-Library


RF24:  Steuert die Funkübertragung mittels 2,4 GHz Module nRF24L01+ -> github.com/maniacbug/RF24

Eine Übersicht über die Funktionen der Library gibt es hier -> maniacbug.github.io/RF24/classRF24.html


RTClib: Zur Kommunikation mit der "Real Time Clock" RTC DS1307 -> github.com/adafruit/RTClib


SD: Im Gegensatz zur Standard-SD-Lib können hier bei der Initialisierung die für die SPI-Schnittstelle zu verwendenden Pins angegeben werden. So verwendet z.B. der Arduino Mega standardmäßig die Pins 50 - 53, ein Data Logging Shield aber die Uno-Pins 10 - 13. Mit der Library können also die Standardpins für die SPI-Schnittstelle auf die Uno-Pins umgebogen werden -> github.com/adafruit/SD

(Achtung: Da die neue SD-Library aber den gleichen Namen nutzt, wie die Standard-Lib, muss die Standard-Lib vorher z.B. durch verschieben in ein anderes Verzeichnis deaktiviert werden.)

Durch einen Patch in der Library (gilt sowohl für diese, als auch für die Standard-SD-Lib) ist es möglich, SD-Karten bei laufendem Programm zu tauschen, ohne dass das Programm danach neu gestartet werden muss (wobei das Ziehen der Karte nicht gerade während eines Schreibzykluses erfolgen sollte). Lediglich die "SD.begin"-Funktion muss danach neu aufgerufen werden.

Dazu muss die nachfolgende Zeile

if (root.isOpen()) root.close();      // allows repeated calls

im File SD.cpp in die Funktion "begin" (ca. Zeile 335) eingefügt werden:

boolean SDClass::begin(uint8_t csPin, int8_t mosi, int8_t miso, int8_t sck) {
  /*

    Performs the initialisation required by the sdfatlib library.

    Return true if initialization succeeds, false otherwise.

   */
  if (root.isOpen()) root.close();      // allows repeated calls
  return card.init(SPI_HALF_SPEED, csPin, mosi, miso, sck) &&
         volume.init(card) &&
         root.openRoot(volume);
}

In der Standard-SD-Library sieht die gepatchte Funktion dann so aus:

boolean SDClass::begin(uint8_t csPin) {
  /*

    Performs the initialisation required by the sdfatlib library.

    Return true if initialization succeeds, false otherwise.

   */
  if (root.isOpen()) root.close();      // allows repeated calls
  return card.init(SPI_HALF_SPEED, csPin) &&
         volume.init(card) &&
         root.openRoot(volume);
}

(Danke an Tommy56 vom "deutschsprachigen Arduino-Forum" https://www.arduinoforum.de, der mir diesen Tipp gab!)


Streaming: Eine Methode, um Printausdrücke zu vereinfachen -> arduiniana.org/libraries/streaming/


TimerOne & TimerThree: Zur periodischen Messung von Zeitspannen in Mikrosekunden und Auslösung von Interrupts am Ende der Zeitspanne oder zur Verwendung als PWM-Ausgang mit 10 Bit Auflösung (1024 Schritte). TimerThree nicht für Arduino Uno, sondern für Mega oder Leonarde.

TimerOne    -> github.com/PaulStoffregen/TimerOne

TimerThree -> github.com/PaulStoffregen/TimerThree

Eine Auflistung der verwendbaren Pins und eine Funktionsübersicht gibt's hier -> www.pjrc.com/teensy/td_libs_TimerOne.html


U8glib: Diese Library verwende ich zur Ansteuerung meines 128x64 Graphik-LCD-Displays ST7920. Diese Library ist sehr umfangreich und sehr gut dokumentiert. Leider wird der erzeugte Programmcode sehr groß und auch die Übersetzungszeit des Sketch dauert ein bisschen länger als sonst.

Herunterzuladen ist die Library hier -> code.google.com/p/u8glib/

Dazu Schriftarten: -> code.google.com/p/u8glib/wiki/fontsize und

die Dokumentation: -> code.google.com/p/u8glib/wiki/userreference


VirtuellWire: Steuert die drahtlose Übertragung eines Telegramms z.B. über eine Funkübertragungsstrecke -> www.pjrc.com/teensy/td_libs_VirtualWire.html (auch für Attiny in Verwendung)



Nur für Attiny:

TinyWireS und TinyWireM: Zur Kommunikation über die I2C-Schnittstelle -> github.com/rambo/TinyWire


LiquidCrystal_attiny: Zur Ansteuerung von LCD-Anzeigen 16x2 -> https://github.com/platisd/ATtiny85-LCD-library

Achtung: Wie schon bei den LiquidCrystal-Libraries für Arduino (siehe oben) funktioniert die Ausgabe mit der "print"-Funktion nicht mehr richtig. Es wird nur mehr das erste Zeichen einer Zeichenkette auf dem Display dargestellt. Daher habe ich auch hier im folgenden Abschnitt des cpp-Files (Zeile 220 - 222) die Rückgabe der Funktion von "return 0" auf "return 1" geändert:

inline size_t LiquidCrystal_I2C::write(uint8_t value) {

send(value, Rs);

return 1; //Für IDE 1.6.x auf "1" geändert

}