OLED Display 0,96 Zoll mit Arduino: Schaltung und Beispielsketch
/**
* OLED-Display "Hallo Welt!" Test für Arduino Uno
*
* Dieser Sketch zeigt "Hallo Welt!" auf einem 0.96" OLED-Display
* mit SSD1306-Controller über I2C-Kommunikation an.
*
* Hardware-Verbindungen:
* - OLED VCC -> Arduino 5V (oder 3.3V - abhängig vom Display)
* - OLED GND -> Arduino GND
* - OLED SCL -> Arduino A5 (SCL)
* - OLED SDA -> Arduino A4 (SDA)
*
* Bibliotheken, die installiert werden müssen:
* - Adafruit SSD1306
* - Adafruit GFX Library
*/
// Einbinden der benötigten Bibliotheken
#include
#include
#include
// Definieren der Display-Parameter
#define SCREEN_WIDTH 128 // OLED-Display-Breite in Pixeln
#define SCREEN_HEIGHT 64 // OLED-Display-Höhe in Pixeln
#define OLED_RESET -1 // Reset-Pin (-1, wenn der Arduino Reset-Pin geteilt wird)
#define SCREEN_ADDRESS 0x3C // I2C-Adresse des Displays (typischerweise 0x3C oder 0x3D)
// Erstellen des Display-Objekts
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
// Initialisierung der seriellen Kommunikation zur Fehlersuche
Serial.begin(9600);
Serial.println("OLED 'Hallo Welt!' Test für Arduino Uno");
// Initialisierung des Displays
// SSD1306_SWITCHCAPVCC = Spannungsversorgung intern generieren
if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println("SSD1306-Initialisierung fehlgeschlagen");
for (;;); // Endlosschleife bei Fehler
}
// Display löschen und Puffer leeren
display.clearDisplay();
// Textparameter konfigurieren
display.setTextSize(1); // Textgröße 1 (1:1 Pixelverhältnis)
display.setTextColor(SSD1306_WHITE); // Weißer Text auf schwarzem Hintergrund
display.setCursor(0, 0); // Startposition des Textes (x, y)
// Text zum Puffer hinzufügen
display.println("Hallo Welt!");
// Zweite Textzeile hinzufügen mit etwas mehr Info
display.setCursor(0, 20);
display.println("Arduino Uno Test");
// Inhalt des Puffers auf dem Display anzeigen
display.display();
Serial.println("Setup abgeschlossen. Text wird auf dem Display angezeigt.");
}
void loop() {
// Nichts zu tun im Hauptloop, da wir den Text nur einmal anzeigen
// Hier könnten Erweiterungen wie blinkender Text oder
// wechselnde Inhalte implementiert werden.
}
Informationen zum Code
Arduino Uno - OLED Display Anschlussanleitung
Was sind OLED-Displays?
OLED (Organic Light Emitting Diode) Displays bieten gegenüber herkömmlichen LCD-Displays mehrere Vorteile:
- Hoher Kontrast - echte schwarze Pixel, da keine Hintergrundbeleuchtung benötigt wird
- Geringer Stromverbrauch - ideal für batteriebetriebene Projekte
- Schnelle Reaktionszeit - keine Verzögerungen bei Animationen
- Weiter Betrachtungswinkel - von fast allen Seiten gut ablesbar
- Kompakte Bauweise - dünner als LCDs
Die meisten für Arduino verwendeten OLED-Displays basieren auf dem SSD1306-Controller und kommunizieren über den I2C-Bus, was die Verkabelung vereinfacht.
Hinweis: Diese Anleitung ist für monochrome OLED-Displays mit I2C-Schnittstelle. Farbige OLED-Displays oder Displays mit SPI-Schnittstelle erfordern andere Anschlüsse und Bibliotheken.
Pinbelegung
Der Anschluss eines I2C OLED-Displays an einen Arduino Uno ist dank des I2C-Bus sehr einfach und benötigt nur 4 Verbindungen:
OLED Display Pin | Arduino Uno Pin | Beschreibung |
---|---|---|
VCC | 5V oder 3.3V | Stromversorgung (je nach Display-Typ) |
GND | GND | Masse |
SCL | A5 | I2C Clock-Leitung |
SDA | A4 | I2C Data-Leitung |

Achtung: Überprüfe die Spezifikationen deines OLED-Displays, bevor du es anschließt. Manche Displays benötigen 3.3V, während andere mit 5V betrieben werden können. Ein Anschluss an die falsche Spannung kann dein Display beschädigen!
Benötigte Bibliotheken
Für die Verwendung eines OLED-Displays benötigst du folgende Bibliotheken:
- Adafruit SSD1306: Für die Steuerung des OLED-Displays
- Adafruit GFX Library: Für die Grafikfunktionen
- Wire.h: Für die I2C-Kommunikation (standardmäßig in Arduino enthalten)
Installation der Bibliotheken
So installierst du die benötigten Bibliotheken über den Bibliotheksverwalter:
- Öffne die Arduino IDE
- Navigiere zu Werkzeuge > Bibliotheken verwalten
- Suche nach "Adafruit SSD1306" und installiere diese Bibliothek
- Suche nach "Adafruit GFX" und installiere diese Bibliothek
Alternativ kannst du die Bibliotheken auch manuell von GitHub herunterladen:
I2C-Adresse
Die Standard-I2C-Adresse des Displays ist 0x3C. Falls dein Display nicht erkannt wird, versuche 0x3D als alternative Adresse.
Um herauszufinden, welche Adresse dein Display verwendet, kannst du einen I2C-Scanner verwenden. Hier ist ein einfacher Code dafür:
#include
void setup() {
Wire.begin();
Serial.begin(9600);
Serial.println("I2C Scanner bereit!");
}
void loop() {
byte error, address;
int deviceCount = 0;
Serial.println("Scanning...");
for(address = 1; address < 127; address++) {
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0) {
Serial.print("I2C-Gerät gefunden an Adresse 0x");
if (address < 16) {
Serial.print("0");
}
Serial.println(address, HEX);
deviceCount++;
}
}
if (deviceCount == 0) {
Serial.println("Keine I2C-Geräte gefunden!");
} else {
Serial.println("Scan abgeschlossen!");
}
delay(5000); // Warte 5 Sekunden, dann scanne erneut
}
Display-Initialisierung
Hier ist ein Beispiel, wie du das OLED-Display initialisierst:
#include
#include
#include
#include
#define SCREEN_WIDTH 128 // OLED-Display-Breite in Pixeln
#define SCREEN_HEIGHT 64 // OLED-Display-Höhe in Pixeln
#define OLED_RESET -1 // Reset Pin (-1 = teilt Arduino Reset Pin)
#define SCREEN_ADDRESS 0x3C // Siehe Adresse deines Displays (0x3C oder 0x3D)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
Serial.begin(9600);
// SSD1306 Display initialisieren
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 Initialisierung fehlgeschlagen"));
for(;;); // Programm anhalten, wenn Display nicht gefunden wurde
}
// Display leeren
display.clearDisplay();
// Grundeinstellungen
display.setTextSize(1); // Normale Textgröße
display.setTextColor(SSD1306_WHITE); // Weißer Text
display.setCursor(0, 0); // Start links oben
// Text anzeigen
display.println(F("OLED Test"));
display.println(F("Es funktioniert!"));
// Änderungen anzeigen
display.display();
}
void loop() {
// Hier kommt dein Code hin
}
Beispiel mit Text und Grafik
Hier ist ein komplettes Beispiel, das Text und einige Grafikelemente auf dem Display zeigt:
#include
#include
#include
#include
#define SCREEN_WIDTH 128 // OLED-Display-Breite in Pixeln
#define SCREEN_HEIGHT 64 // OLED-Display-Höhe in Pixeln
#define OLED_RESET -1 // Reset Pin (-1 = teilt Arduino Reset Pin)
#define SCREEN_ADDRESS 0x3C // Siehe Adresse deines Displays (0x3C oder 0x3D)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
Serial.begin(9600);
// SSD1306 Display initialisieren
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 Initialisierung fehlgeschlagen"));
for(;;); // Programm anhalten, wenn Display nicht gefunden wurde
}
// Display leeren
display.clearDisplay();
}
void loop() {
// Text demonstrieren
textDemo();
delay(2000);
// Formen zeichnen
drawShapes();
delay(2000);
// Animation zeigen
bounceDemo();
delay(1000);
}
void textDemo() {
display.clearDisplay();
// Verschiedene Textgrößen demonstrieren
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println(F("Hello, Arduino!"));
display.setTextSize(2);
display.setCursor(0, 16);
display.println(F("Size 2"));
display.setTextSize(3);
display.setCursor(0, 36);
display.println(F("BIG"));
display.display();
}
void drawShapes() {
display.clearDisplay();
// Rechteck zeichnen
display.drawRect(0, 0, 60, 30, SSD1306_WHITE);
// Gefüllter Kreis
display.fillCircle(95, 15, 15, SSD1306_WHITE);
// Linie zeichnen
display.drawLine(0, 40, 127, 40, SSD1306_WHITE);
// Dreiecke zeichnen
display.fillTriangle(
30, 60, 60, 45, 90, 60,
SSD1306_WHITE);
display.display();
}
void bounceDemo() {
const int ballSize = 8;
int x = random(ballSize, SCREEN_WIDTH - ballSize);
int y = random(ballSize, SCREEN_HEIGHT - ballSize);
int xSpeed = 2;
int ySpeed = 1;
for(int i = 0; i < 60; i++) { // Animation für 60 Frames
display.clearDisplay();
// Position aktualisieren
x += xSpeed;
y += ySpeed;
// Auf Kollision mit Rändern prüfen
if(x <= ballSize || x >= SCREEN_WIDTH - ballSize) {
xSpeed = -xSpeed;
}
if(y <= ballSize || y >= SCREEN_HEIGHT - ballSize) {
ySpeed = -ySpeed;
}
// Ball zeichnen
display.fillCircle(x, y, ballSize, SSD1306_WHITE);
display.display();
delay(50);
}
}
Anpassungen für verschiedene Display-Größen
Wenn dein Display andere Abmessungen als 128x64 Pixel hat, passe diese Parameter im Code an:
#define SCREEN_WIDTH 128 // OLED-Display-Breite in Pixeln
#define SCREEN_HEIGHT 64 // OLED-Display-Höhe in Pixeln
Übliche OLED-Display-Größen sind:
- 128x64 - Standard-Größe
- 128x32 - Häufig bei kleineren Displays
- 96x16 - Schmale Displays
- 64x48 - Kompakte quadratische Displays
Display-Rotation
Um das Display zu drehen, füge nach der Display-Initialisierung folgende Zeile hinzu:
display.setRotation(2); // Werte 0-3 für 0°, 90°, 180°, 270°
Die Werte für setRotation()
entsprechen folgenden Drehungen:
0
- Keine Drehung (0°)1
- 90° im Uhrzeigersinn2
- 180° gedreht (umgedreht)3
- 270° im Uhrzeigersinn (90° gegen den Uhrzeigersinn)
Text-Formatierung und Positionierung
Die Adafruit GFX Bibliothek bietet verschiedene Möglichkeiten zur Text-Formatierung:
// Textgröße festlegen (1-6)
display.setTextSize(1); // 1 ist die kleinste Größe
// Textfarbe festlegen
display.setTextColor(SSD1306_WHITE); // Weißer Text (Standard)
display.setTextColor(SSD1306_BLACK, SSD1306_WHITE); // Invertierter Text
// Cursor-Position setzen
display.setCursor(0, 0); // x, y Position in Pixeln
// Text ausrichten (nur für Textblock mit mehreren print-Befehlen)
display.setTextWrap(true); // Zeilenumbruch aktivieren (Standard)
display.setTextWrap(false); // Zeilenumbruch deaktivieren
// Text ausgeben
display.print("Normaler Text");
display.println("Mit Zeilenumbruch");
// Nach jedem Zeichnen display.display() aufrufen, um Änderungen zu zeigen
display.display();
Energiesparfunktionen
OLED-Displays verbrauchen weniger Strom als LCDs, können aber dennoch in batteriebetriebenen Projekten optimiert werden:
// Display ausschalten (niedriger Stromverbrauch)
display.ssd1306_command(SSD1306_DISPLAYOFF);
// Display wieder einschalten
display.ssd1306_command(SSD1306_DISPLAYON);
// Helligkeit einstellen (0x00 bis 0xFF)
display.ssd1306_command(SSD1306_SETCONTRAST);
display.ssd1306_command(0x8F); // Wert zwischen 0 und 255
Tipp: Wenn du das Display nur gelegentlich aktualisieren musst, kannst du es zwischen den Aktualisierungen ausschalten, um Strom zu sparen. Beachte, dass das Display seinen Inhalt behält, auch wenn es ausgeschaltet ist.
Fehlerbehebung
Hier sind einige häufige Probleme und deren Lösungen:
- Display bleibt leer: Überprüfe die Verkabelung und die I2C-Adresse. Benutze den I2C-Scanner, um die richtige Adresse zu ermitteln.
- Unscharfe oder fehlerhafte Anzeige: Überprüfe die eingestellte Display-Größe in deinem Code. Möglicherweise wird eine falsche Größe verwendet.
- Fehler "Adafruit SSD1306 allocation failed": Dein Arduino hat nicht genügend RAM. Versuche, weniger Variablen zu verwenden oder den Code zu optimieren.
- Nur ein Teil des Displays funktioniert: Überprüfe die Stromversorgung. Manche Displays benötigen mehr Strom für eine vollständige Anzeige.
- Text ist invertiert/negativ: Du verwendest möglicherweise
SSD1306_BLACK
für die Textfarbe stattSSD1306_WHITE
.
Wenn dein Display extrem heiß wird oder Rauch entwickelt, trenne sofort die Stromversorgung! Dies ist ein Zeichen für einen Kurzschluss oder eine falsche Verkabelung.
Weiterführende Projekte
Nach dem erfolgreichen Anschluss deines OLED-Displays könntest du folgende Projekte ausprobieren:
- Temperatur- und Feuchtigkeitsanzeige mit einem DHT22-Sensor
- Mini-Wetterstation mit Barometer und Außentemperatur
- Batterieanzeige für batteriebetriebene Projekte
- Kleinspannungs-Messgerät mit Spannungsanzeige
- Arduino-Spiel mit einfacher Grafik (z.B. Pong, Snake)
- Status-Display für Smart Home mit Raumtemperatur und Luftqualität
Die Möglichkeiten sind nahezu endlos, und ein OLED-Display verleiht deinen Arduino-Projekten eine professionelle visuelle Komponente!