Display OLED SSD1306 128×64 / 128×32

FunduinoUltimo aggiornamento il

Speicherschonend programmieren mit der Bibliothek SSD1306Ascii

OLED-Displays sind im Vergleich zu LCD-Displays sehr dünn und haben einen guten Kontrast. Deshalb findest du die Technik immer häufiger in Alltagsgeräten. Die kleinen OLEDs für Mikrocontroller sind in der Regel monochrom, also einfarbig: Die leuchtenden Pixel haben gegenüber der Hintergrundfarbe nur eine Möglichkeit. Selbst zweifarbige OLEDs wie das hier verwendete sind monochrom – oben (Reihe 1 bis 16) leuchten die Pixel nur gelb, unten (Reihe 17 bis 64) nur blau.

OLED-Displays gibt es in vielen Varianten; sie unterscheiden sich in Farbe, Größe und Ansteuerung. Für diese Anleitung nutzen wir ein Display mit 128×64 Pixeln und Ansteuerung über den I²C-Bus. Das Display sitzt auf einer Platine, die den Treiberchip SSD1306 und die Anschlusspins trägt.

Praxistipp: Mit etwas Geschick löst du das eigentliche Display von der Trägerplatine – fahre mit einem Stück Papier zwischen Platine und Glas entlang und löse so das doppelseitige Klebeband. Danach ist das Display nur noch etwa 1 mm dick und passt in noch kompaktere Anwendungen.

OLED-Display 128x64 mit Text am Arduino
OLED-Display mit SSD1306-Treiber am Arduino
OLED-Display von der Seite, von der Platine getrennt
Vom Trägerboard getrennt ist das Display nur noch etwa 1 mm dick
1 / 2

Pinout

Das Display hat vier Pins:

  • VCC – Spannungsversorgung, an den 5V-Pin des Mikrocontrollers
  • GND – an den GND-Pin des Mikrocontrollers
  • SDA und SCL – an die dafür vorgesehenen Kontakte am Mikrocontroller

Beim UNO R3 findest du SDA und SCL oberhalb von Pin 13. Alternativ kannst du die analogen Pins A4 (SDA) und A5 (SCL) verwenden.

Die richtige Bibliothek wählen

Für OLED-Displays gibt es viele Bibliotheken, jede mit Vor- und Nachteilen. Alle bringen Beispielsketche mit, die nach der Installation in der Arduino-Software unter Datei → Beispiele auftauchen. Diese Beispiele zeigen gut, was möglich ist – auch grafisch.

Die vielen Möglichkeiten haben aber einen Preis: Sie belegen sehr viel internen Speicher. Manche Beispielsketche für OLED-Displays nutzen mehr als 96 % des Speicherplatzes eines Arduino UNO. Für eigene Aufgaben wie das Auswerten von Sensordaten bleibt dann zu wenig übrig.

Deshalb arbeiten wir hier mit einer speicheroptimierten und leicht zu bedienenden Bibliothek: SSD1306Ascii. Du findest sie über den Bibliotheksverwalter.

Teste zuerst den mitgelieferten Sketch FontSamplesWire unter Datei → Beispiele → SSD1306Ascii → FontSamplesWire. Nach dem Hochladen laufen viele Schriftarten über das Display. Auf dem UNO belegt allein dieser Sketch 96 % des Speichers – verwende später also möglichst wenige verschiedene Schriften.

Bibliotheksverwalter der Arduino IDE mit SSD1306Ascii
Die Bibliothek SSD1306Ascii im Bibliotheksverwalter
Vier OLED-Displays mit verschiedenen Schriftarten
Die Schriftarten aus dem Beispielsketch FontSamplesWire
1 / 2

Beispielsketch

Für eigene Programme eignet sich ein deutlich kleinerer Beispielsketch. Öffne unter Datei → Beispiele → SSD1306Ascii → HelloWorldWire den Sketch „Hello World“ und lösche alles heraus, was nicht zwingend nötig ist.

Selbst diese kleine Bibliothek kann noch viel mehr: seitliches Scrollen, dauerhaftes Auf- und Abscrollen, das Display um 180 Grad drehen (oled.displayRemap(true);), die folgende Textzeile invertieren (oled.setInvertMode(i%2);), das gesamte Display invertieren (oled.invertDisplay(!(i%2));), den Buchstabenabstand vergrößern (oled.setLetterSpacing(2);) oder am Ende des Bildschirms automatisch scrollen (oled.setScrollMode(SCROLL_MODE_AUTO);). Für jede Funktion liegt ein eigener Beispielsketch bei.

OLED-Display zeigt „Viel Erfolg“
Das Ergebnis des Beispielsketches auf dem Display
Liste der Beispielsketche der Bibliothek SSD1306Ascii
Für jede Funktion liefert die Bibliothek einen eigenen Beispielsketch mit
1 / 2
Text auf dem OLED anzeigen
#include <Wire.h>
#include "SSD1306Ascii.h"
#include "SSD1306AsciiWire.h"
#define I2C_ADDRESS 0x3C
SSD1306AsciiWire oled;
void setup() {
  Wire.begin();
  Wire.setClock(400000L);
  oled.begin(&Adafruit128x64, I2C_ADDRESS);
}
void loop()
{
  oled.setFont(System5x7); // Auswahl der Schriftart
  oled.clear(); // Löschen der aktuellen Displayanzeige
  oled.println("Viel"); // Text in der ersten Zeile. "println" sorgt für einen Zeilenumbruch.
  oled.print("Erfolg!!!"); // Text in der zweiten Zeile. Da es keine dritte Zeile gibt, braucht es hier keinen Umbruch.
  delay (2000);
}

Ausblick: die Bibliothek U8g2

Eine sehr umfangreiche Bibliothek heißt U8g2. Sie steuert eine Vielzahl verfügbarer Displays und Displaycontroller an, und ihre Beispiele helfen besonders bei grafischen Anwendungen weiter.

Um mit U8g2 zu arbeiten, musst du in jedem Beispielsketch dein Display aktivieren – dazu musst du wissen, welchen Displaytreiber es hat. Entferne dazu die zwei Schrägstriche vor der passenden Zeile.

OLED mit SSD1306-Chip: U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);

OLED mit SH1106-Chip: U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);

Bibliotheksverwalter der Arduino IDE mit U8g2
Die Bibliothek U8g2 im Bibliotheksverwalter
Codeausschnitt mit auskommentierten Displaytypen
In jedem U8g2-Beispiel aktivierst du dein Display, indem du die zwei Schrägstriche entfernst
Sechs OLED-Displays mit Grafiken und Schriften
Grafische Ergebnisse mit der Bibliothek U8g2
1 / 3
Valuta le istruzioni

Commenti

Fare una domanda o condividere un'esperienza

Scrivici se qualcosa non funziona. Indica la tua scheda e il messaggio di errore.

Controlliamo ogni commento prima della pubblicazione. Il tuo indirizzo e-mail rimane presso di noi.