Arduino - SSD1309 OLED-Display 128x64 | 2,42 Zoll I2C OLED Tutorial
Ein OLED-Display (Organic Light-Emitting Diode) bietet selbstleuchtende Pixel, die ein tiefes Schwarz, hohen Kontrast und weite Blickwinkel liefern – und damit eine großartige Aufrüstung gegenüber herkömmlichen LCDs darstellen. Der SSD1309 ist der Treiber-IC, der üblicherweise auf 2,42-Zoll (manchmal als 2,4-Zoll bezeichnet) 128×64 I2C-OLED-Modulen zu finden ist.

In dieser Schritt-für-Schritt-Anleitung lernen Sie, wie Sie das SSD1309 OLED 128×64 mit einem Arduino-Board verbinden und programmieren, wobei die DIYables_OLED_SSD1309-Bibliothek verwendet wird. Genauer gesagt werden wir Folgendes abdecken:
- Anschluss des 2,42-Zoll SSD1309 OLED an den Arduino über I2C
- Text und Zahlen auf dem Display anzeigen
- Text sowohl horizontal als auch vertikal zentrieren
- Geometrische Formen zeichnen (Linien, Rechtecke, Kreise, Dreiecke, abgerundete Rechtecke)
- Monochrome Bitmap-Bilder darstellen
- Hardware-Scrolling in vier Richtungen
- Kontrast einstellen und das Display abdunkeln
- Eigene externe Schriftarten aus der Adafruit GFX-Schriftartensammlung verwenden
Erforderliche Hardware
Oder Sie können die folgenden Kits kaufen:
| 1 | × | DIYables STEM V3 Starter-Kit (Arduino enthalten) | |
| 1 | × | DIYables Sensor-Kit (30 Sensoren/Displays) | |
| 1 | × | DIYables Sensor-Kit (18 Sensoren/Displays) |
Über das SSD1309 2,42-Zoll-OLED-Display
Der SSD1309 ist ein CMOS-OLED-Treiber-IC, der in einem einzigen Chip integriert ist und für 128×64 Dot-Matrix-Panelen entwickelt wurde. Er ist registerkompatibel mit dem weit verbreiteten SSD1306, sodass viele vorhandene Code-Beispiele mit nur minimalen Änderungen übernommen werden können. Die wesentlichen Hardware-Unterschiede sind:
- Keine integrierte Ladespumpe — der SSD1309 benötigt eine externe VCC-Spannungsversorgung, wobei praktisch alle Breakout-Boards (einschließlich 2,42-Zoll- und 2,4-Zoll-Module) mit einem eingebauten Boost-Wandler geliefert werden, sodass dies für Sie transparent ist.
- Höhere Spannungszulässigkeit — der SSD1309 akzeptiert bis zu 16 V VCC, während der SSD1306 auf ungefähr 4,2 V beschränkt ist.
Das 2,42-Zoll-(2,4-Zoll)-OLED-Modul verwendet typischerweise den SSD1309-Treiber und besitzt eine Auflösung von 128×64 Pixeln mit I2C-Schnittstelle. Die Panelfarbe (weiß, blau, gelb, grün oder Dual-Zone) wird durch das physische OLED-Material bestimmt und ist softwareseitig nicht steuerbar.
Dieses Tutorial kommuniziert mit dem Display über den I2C-Bus, der nur zwei Signalleitungen (SDA und SCL) benötigt und den Bus mit anderen I2C-Peripheriegeräten teilen kann.
SSD1309 OLED-Pinbelegung (I2C-Modul)
Das typische 2,42-Zoll-SSD1309-I2C-OLED-Modul verfügt über vier Pins:
- GND — Mit der Masse-Schiene des Arduino verbinden.
- VCC — Stromversorgung. Mit dem Arduino 5 V (oder 3,3 V, je nach dem auf dem Modul integrierten Regler) verbinden.
- SCL — I2C-Taktleitung.
- SDA — I2C-Datenleitung.

※ Notiz:
- Die Pin-Belegung variiert je nach Hersteller. Vergewissern Sie sich vor dem Verdrahten unbedingt, dass die auf Ihrem Modul aufgedruckten Beschriftungen korrekt sind.
- Dieses Tutorial wurde mit dem 2,42-Zoll SSD1309 OLED-Display von DIYables verifiziert. Andere SSD1309-basierte 2,4/2,42-Zoll-Module sollten identisch funktionieren.
Schaltplan – Arduino und SSD1309 OLED 128×64
- Schematische Verdrahtung zwischen Arduino und dem 2,42-Zoll SSD1309 OLED 128×64

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
- Foto der tatsächlichen Verdrahtung zwischen Arduino und SSD1309-OLED 128×64

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
Bei der Verwendung einer anderen Arduino-Variante ändern sich die I2C-Pins. Die unten stehende Tabelle listet die richtigen Verbindungen auf.
| OLED Module | Arduino Uno, Nano | Arduino Mega |
|---|---|---|
| Vin | 5V | 5V |
| GND | GND | GND |
| SDA | A4 | 20 |
| SCL | A5 | 21 |
Erste Schritte – SSD1309-OLED mit Arduino
Schritt 1: Installieren Sie die DIYables_OLED_SSD1309-Bibliothek
- Öffnen Sie die Arduino IDE und klicken Sie auf das Bibliotheken-Symbol in der linken Seitenleiste.
- Geben Sie im Suchfeld "DIYables_OLED_SSD1309" ein und finden Sie die von DIYables veröffentlichte Bibliothek.
- Klicken Sie auf die Installieren-Schaltfläche.

- Die IDE wird Sie auffordern, die benötigte Abhängigkeit (Adafruit GFX Library) zu installieren. Klicken Sie auf Alle installieren, um fortzufahren.

Schritt 2: Grundlegendes Programmiermuster
Jeder Sketch, der den SSD1309 ansteuert, folgt dem gleichen Muster: Header-Dateien einbinden, ein Display-Objekt erstellen, es in setup() initialisieren, in den Offscreen-Puffer zeichnen, dann den Puffer mit display() auf dem Bildschirm anzeigen.
- Die erforderlichen Header-Dateien einbinden:
- Stellen Sie die Bildschirmabmessungen ein (128×64 für das 2,42-Zoll-Modul):
- Erzeuge das Display-Objekt (übergib -1, wenn kein Reset-Pin verbunden ist):
- Initialisiere das Display in setup():
- Danach kannst du jede Zeichnungsfunktion (clearDisplay(), drawPixel(), print(), usw.) aufrufen, gefolgt von oled.display(), um den Bildschirm zu aktualisieren.
※ Notiz:
Alle Beispielcodes in diesem Tutorial zielen auf das SSD1309 OLED 128×64 (2,42 Zoll) ab und verwenden die DIYables_OLED_SSD1309-Bibliothek.
Arduino-Code — Hallo Welt auf dem SSD1309-OLED-Display
Der einfachste Ausgangspunkt: Drucke einige Zeilen Text in unterschiedlichen Größen.
Arduino-Code — Text auf SSD1309 OLED anzeigen
Das folgende Beispiel demonstriert weitere Textfunktionen — mehrere Größen, Zahlenformatierung und das F()-Makro zum Sparen von RAM.
Referenz zu nützlichen Anzeige-Funktionen
Nachfolgend finden Sie eine Schnellreferenzliste der am häufigsten verwendeten Funktionen beim Arbeiten mit dem SSD1309-OLED über die DIYables-Bibliothek:
- oled.clearDisplay() — Lösche den Framebuffer (alle Pixel aus).
- oled.display() — Übertrage den Puffer auf das OLED, damit Änderungen sichtbar werden.
- oled.drawPixel(x, y, color) — Setze bzw. lösche einen einzelnen Pixel.
- oled.setTextSize(n) — Skaliere die Schrift um den Faktor *n* (1 = 6×8, 2 = 12×16, …, bis zu 8).
- oled.setCursor(x, y) — Bewege den Textcursor zu den Pixelkoordinaten *(x, y)*.
- oled.setTextColor(SSD1309_PIXEL_ON) — Nur der Textvordergrund (Hintergrund ist transparent).
- oled.setTextColor(SSD1309_PIXEL_OFF, SSD1309_PIXEL_ON) — Text mit expliziter Hintergrundfarbe.
- oled.println("message") — Gibt eine Zeichenkette aus und springt zur nächsten Zeile.
- oled.println(number) — Gibt eine Ganzzahl im Dezimalsystem aus.
- oled.println(number, HEX) — Gibt eine Ganzzahl im Hexadezimalsystem aus.
- oled.startscrollright(start, stop) — Hardware-Scroll nach rechts zwischen Seite *start* und Seite *stop*.
- oled.startscrollleft(start, stop) — Hardware-Scroll nach links zwischen Seite *start* und Seite *stop*.
- oled.startscrolldiagright(start, stop) — Hardware-Scroll diagonale nach rechts zwischen Seite *start* und Seite *stop*.
- oled.startscrolldiagleft(start, stop) — Hardware-Scroll diagonale nach links zwischen Seite *start* und Seite *stop*.
- oled.stopscroll() — Stoppe jegliches aktives Hardware-Scroll.
- oled.setContrast(value) — Passe die Display-Helligkeit an (0–255).
- oled.dim(true/false) — Dimmt das Display schnell auf den Minimalwert oder stellt den vorherigen Kontrast wieder her.
- oled.invertDisplay(true/false) — Farb-Inversion auf Hardware-Ebene (Pixel an ↔ Pixel aus).
So zentrieren Sie Text vertikal und horizontal auf dem SSD1309 OLED
Arduino-Code — Formen auf dem SSD1309-OLED-Display zeichnen
Da die DIYables_OLED_SSD1309-Bibliothek Adafruit_GFX erweitert, erhalten Sie eine vollständige Sammlung von Formen zum Zeichnen: Pixel, Linien, Rechtecke, ausgefüllte Rechtecke, Kreise, ausgefüllte Kreise, Dreiecke, ausgefüllte Dreiecke und abgerundete Rechtecke. Der unten gezeigte Sketch durchläuft alle mit animierten Demos.
Arduino-Code – Hardware-Scrollen auf einem SSD1309-OLED
Der SSD1309 verfügt über einen eingebauten Scroll-Mechanismus, der den Anzeigeninhalt verschiebt, ohne CPU-Last zu verursachen. Die DIYables-Bibliothek bietet vier Scrollrichtungen: rechts, links, diagonal-rechts und diagonal-links. Jede nimmt einen Startseiten- und einen Endseitenparameter (Seiten sind 8 Pixel hohe horizontale Streifen, die auf einem 64-Pixel-hohen Display von 0 bis 7 nummeriert sind).
※ Notiz:
Rufen Sie immer display() auf, um Ihre Inhalte auf dem OLED anzuzeigen, bevor Sie mit dem Scrollen beginnen. Vermeiden Sie es, während des Scrollens neue Inhalte zu zeichnen — rufen Sie zuerst stopscroll() auf.
Arduino-Code – Bitmap-Bild auf dem SSD1309-OLED-Display anzeigen
Um eine Bitmap auf dem SSD1309-OLED darzustellen, musst du zuerst dein Bild in ein C-Byte-Array konvertieren. Verwende das kostenlose image2cpp Online-Tool, um dies zu tun:
- Laden Sie Ihr Bild hoch (PNG, JPG, BMP usw.).
- Setzen Sie die Leinwandgröße auf 128×64 (oder kleiner).
- Wählen Sie Arduino-Code als Ausgabformat.
- Kopieren Sie das generierte Array in Ihren Sketch.

Das untenstehende Beispiel wechselt zwischen einem 16×16-Herzsymbol und einem DIYables-Logo in voller Breite:
※ Notiz:
- Die Bitmap-Dimensionen dürfen die Bildschirmauflösung nicht überschreiten (128×64 für das 2,42-Zoll-Modul).
Arduino-Code — Kontrast und Dimmen am SSD1309-OLED
Der SSD1309 unterstützt 256 Kontraststufen (0–255). Die DIYables-Bibliothek bietet setContrast() für eine feine Kontrolle und dim() für einen schnellen Wechsel zwischen der minimalen Helligkeit und dem zuvor konfigurierten Level.
Arduino-Code — Benutzerdefinierte externe Schriftarten auf dem SSD1309-OLED-Display
Die Adafruit GFX-Bibliothek wird mit Dutzenden skalierbarer FreeFont-Schriftarten geliefert (Serif, Sans, Mono — jeweils in Regular, Bold, Italic und vier Größen). Sie können eine davon auf dem SSD1309-Display aktivieren, indem Sie den entsprechenden Header einbinden und setFont() aufrufen.
※ Notiz:
- Wenn eine externe Schriftart aktiv ist, bezieht sich die Y-Koordinate des Cursors auf die Textgrundlinie, nicht auf die obere linke Ecke. Dies unterscheidet sich von der integrierten 5×7-Schriftart.
- Externe Schriftarten werden im Flash-Speicher (PROGMEM) gespeichert. Bei speicherbegrenzten AVR-Boards (Arduino Uno = 32 KB Flash) verwenden Sie sie sparsam.
SSD1309 OLED Fehlerbehebung
Wenn nach dem Hochladen Ihres Sketches auf dem 2,42-Zoll-SSD1309-OLED nichts angezeigt wird, führen Sie diese Prüfungen durch:
- Verkabelung überprüfen — Bestätigen Sie, dass SDA, SCL, VCC und GND an die richtigen Arduino-Pins angeschlossen sind.
- Treiber-Chip bestätigen — Diese Bibliothek ist für den SSD1309 ausgelegt. Wenn Ihr Modul einen anderen Controller verwendet (z. B. SH1106), wird es nicht korrekt reagieren.
- I2C-Adresse überprüfen — Die meisten SSD1309-Module verwenden standardmäßig 0x3C, aber einige verwenden 0x3D. Führen Sie den untenstehenden I2C-Scanner-Sketch aus, um die tatsächliche Adresse zu ermitteln:
Erwartete Ausgabe im seriellen Monitor, wenn der SSD1309 erkannt wird:
- Stellen Sie sicher, dass display() aufgerufen wird — Der SSD1309 verwendet einen Framebuffer. Zeichnungsfunktionen ändern nur den Puffer im RAM; auf dem Bildschirm wird nichts angezeigt, bis Sie oled.display() aufrufen.
- Stellen Sie sicher, dass die Stromversorgung ausreichend ist — Das 2,42-Zoll-Modul zieht mehr Strom als kleinere OLEDs. Stellen Sie sicher, dass Ihre Stromquelle ausreichend Strom liefern kann (typischerweise 20–40 mA bei voller Helligkeit).