Dieses Tutorial zeigt, wie ein OLED-Display und ein BME280-Sensor mit einem Arduino zur Messung von Temperatur, Luftfeuchtigkeit und Luftdruck genutzt werden können. Die Komponenten kommunizieren über die I2C-Schnittstelle und benötigen nur wenige Kabel.
Benötigte Bauteile
- Arduino Uno oder vergleichbares Modell
- BME280 Sensor
- OLED-Display (128×32 oder 128×64, SSD1306-Treiber)
- Jumper-Kabel
- Breadboard oder kleines Starter Kit (optional, aber hilfreich)
OLED-Displays und ihre Eigenschaften
OLED-Displays (Organic Light Emitting Diode) benötigen keine Hintergrundbeleuchtung, da jedes Pixel selbst leuchtet. Sie bieten hohe Kontraste und sind energieeffizient. Das von mir verwendete 0,91-Zoll-Display hat 128×32 Pixel und nutzt den SSD1306-Treiber. Die Header-Pins müssen oft selbst angelötet werden.
I2C-Schnittstelle
I2C ist eine serielle Schnittstelle, die mit nur zwei Leitungen auskommt, SDA (Serial Data) für die Datenübertragung und SCL (Serial Clock) für das Taktsignal. Am Arduino UNO R3 sind die Pins A4 und A5 für diese Schnittstelle zuständig. Mehrere Geräte können an denselben Bus angeschlossen werden, da jedes eine eindeutige Adresse besitzt.
Schaltplan und Verkabelung

Vom OLED-Display zum Arduino:
- GND → GND
- VCC → 5V (oder 3,3V, falls das Modul keine 5V kann)
- SDA → A4
- SCL → A5
Vom BME280 Sensor zum Arduino:
- GND → GND
- VCC → 5V
- SDA → A4
- SCL → A5
Am einfachsten ist die Verkabelung, wenn man A4 und A5 vom Arduino zuerst aufs Breadboard zu den Pins des Displays und von dort weiter zum Sensor führt.
I2C-Adresse der Module ermitteln
Zum Test des Aufbaus kann der I2CScanner Sketch verwendet werden. Der überprüft an allen möglichen Adressen, ob sich ein I2C Gerät zurückmeldet. Der Sketch findet sich in der Arduino IDE unter
- Arduino IDE → Beispiele → Wire → i2cscanner
Typische Adressen für OLED Display sind 0x3C oder 0x3D, für den BME280 Sensor 0x76 oder 0x77. Falls ein Modul nicht angezeigt wird, sollte die Verkabelung überprüft werden.
Bibliotheken installieren
Damit mit der nachfolgende Sketch funktioniert, müssen folgenden Bibliotheken in der Arduino IDE installiert werden:
- Adafruit SSD1306
- Adafruit BME280
Arduino-Code zur Anzeige der Messwerte
/***************************************************************************
BMP280 und OLED Display 128x32
https://www.makerblog.at
- Arduino UNO R3 (oder vergleichbar)
- BMP280 Klimasensor für Temperatur und Luftfeuchtigkeit
- OLED I2C Display 128x32 (oder größer)
Verkabelung:
BME280 -> Arduino UNO R3
SDA -> A4
SVL -> A5
GND -> GND
VIN -> 5V
OLED -> Arduino UNO R3
SDA -> A4
SVL -> A5
GND -> GND
VIN -> 5V
Folgende Libraries müssen installiert sein, bei Fehlermeldung bitte mit dem Library Manager
kontrollieren
- Adafruit SSD1306
- Adafruit BME280
***************************************************************************/
#include <Adafruit_BME280.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // Horizontale Auflösung des Displays in Pixel
#define SCREEN_HEIGHT 32 // Vertikale Auflösung des Displays in Pixel
#define OLED_RESET -1 // Reset pin # (oder -1 wenn kein Reset Pin am Display)
#define SCREEN_ADDRESS 0x3C // I2C Adresse des Displays, siehe Datenblatt, meist 0x3D für 128x64, 0x3C für 128x32
#define BME_ADDRESS 0x76 // I2C Adresse des Sensors
#define DELAY_TIME 500 // Wartezeit zwischen Messungen
// display Objekt mit Parametern erstellen
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
Adafruit_BME280 bme; // bme Objekt für den Temperatursensor
void setup() {
Serial.begin(9600);
while (!Serial)
; // Warten bis serielle Kommunikation funktioniert
Serial.println(F("OLED mit BME280 Projekt"));
if (!bme.begin(BME_ADDRESS)) {
Serial.println("Kein BME280 Sensor an der Adresse gefunden.");
while (1) {
delay(100);
}
}
// SSD1306_SWITCHCAPVCC = 3.3V Spannung wird intern erzeugt
if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("Keinen SSD1306 Verbindung gefunden"));
while (1) {
delay(100);
}
}
display.clearDisplay(); // Displayinhalt leeren
display.setTextSize(1); // Schriftgrösse 1
display.setTextColor(SSD1306_WHITE); // Pixel leuchtet
display.cp437(true); // Use full 256 char 'Code Page 437' font
display.display(); // Displayinhalt anzeigen
Serial.println("Setup finished");
}
void loop() {
display.clearDisplay(); // Display leeren
display.drawRect(0, 0, 128, 32, SSD1306_WHITE); // Rahmen zeichnen
display.setCursor(2, 2); //Cursorposition x, y
display.print("Temp: ");
display.setCursor(50, 2);
display.print(bme.readTemperature());
display.print(" ");
display.write(248); // Hochgestellter Kreis für °C
display.println("C");
display.setCursor(2, 12);
display.print("Luftf: ");
display.setCursor(50, 12);
display.print(bme.readHumidity());
display.println(" %");
display.setCursor(2, 22);
display.print("LDruck: ");
display.setCursor(50, 22);
display.print(bme.readPressure() / 100.0F);
display.println(" hPa");
display.display();
delay(DELAY_TIME);
}
Code-Sprache: PHP (php)
Fazit und Erweiterungsmöglichkeiten
Geschafft. Das OLED-Display zeigt die Messwerte des BME280-Sensors an. Mögliche Erweiterungen sind:
- Anzeige von Symbolen oder größeren Schriftarten
- Einbau in ein Gehäuse
- Übertragung der Werte per Bluetooth oder WLAN an eine IoT-Plattform mit einem geeigneten Arduino, z.B. dem neuen Arduino UNO R4