Das 1,3 Zoll OLED-Display ist in der Arduino-Welt aufgrund seiner Eigenschaften und Vielseitigkeit sehr beliebt. Hier sind einige der wichtigsten Eigenschaften zusammengefasst:
- Bildschirmtechnologie: OLED (Organic Light Emitting Diode) bietet selbstleuchtende Pixel, die kein Hintergrundlicht benötigen. Dadurch sind die Displays sehr dünn und leicht.
- Bildschirmgröße: 1,3 Zoll Diagonale, was einer Bildfläche von etwa 33,02 mm2 entspricht.
- Auflösung: Typischerweise 128×64 Pixel, was eine gute Klarheit und Detailgenauigkeit für kleine Projekte bietet.
- Kontrast und Helligkeit: Sehr hoher Kontrast (typisch >10.000:1), da OLEDs echtes Schwarz darstellen können. Dies führt zu scharfen und lebendigen Bildern.
- Energieverbrauch: Niedriger Energieverbrauch, besonders bei der Darstellung von schwarzen Pixeln, da unbeleuchtete Pixel keinen Strom verbrauchen.
- Ansteuerung: Unterstützt mehrere Kommunikationsprotokolle, wie I2C und SPI, was die Integration in verschiedene Projekte erleichtert.
- Sichtwinkel: Sehr weiter Sichtwinkel (>160 Grad), was das Ablesen aus verschiedenen Positionen erleichtert.
- Lebensdauer: Lange Lebensdauer der OLED-Elemente, typischerweise über 20.000 Stunden.
- Bibliotheken und Unterstützung: Es gibt zahlreiche Bibliotheken und Community-Support für die Verwendung mit Arduino (z.B. Adafruit GFX und Adafruit SSD1306).
- Vielseitigkeit: Ideal für viele Anwendungen wie Anzeige von Sensorwerten, Uhren, Benutzeroberflächen und mehr. Helligkeit kann softwareseitig gesteuert werden. Kompatibel mit vielen Mikrocontrollern, einschließlich Arduino, ESP8266, und ESP32.
Diese Eigenschaften machen das 1,3 Zoll OLED-Display zu einer ausgezeichneten Wahl für viele Arduino-Projekte, wo eine klare und stromsparende Anzeige benötigt wird.
Aufbau der Schaltung mit dem ESP32
Benötigte Teile:
Dadurch, dass wir hier ebenfalls den I2C-Bus verwenden, brauchen wir nur die beiden Datenleitungen parallel auf die des ESP32 oder SHT31 legen.
Programmierung mit VS Studio Code
Wir benötigen für die Programmierung des Display 2 Libraries.
die Adafrueit_GFX.h und die Adafrueit_SSD1306.h.
Diese findest du, wie gewohnt unter Libraries in PIO Home.
Sobald beide Libraries installiert sind, dürfte deine platform.ini so aussehen:
[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
lib_deps =
adafruit/Adafruit GFX Library@^1.11.9
adafruit/Adafruit SSD1306@^2.5.10
adafruit/Adafruit SHT31 Library@^2.2.2
monitor_speed=115200
Wenden wir uns dem Code zu
#include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <Adafruit_SHT31.h> // OLED-Display Breite und Höhe für 0,96 Zoll Display #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 // Erstellen einer SSD1306-Anzeigeinstanz Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); // Erstellen einer SHT31-Sensorinstanz Adafruit_SHT31 sht31 = Adafruit_SHT31(); void setup() { // Serielle Kommunikation starten Serial.begin(115200); // Überprüfen, ob das Display initialisiert werden kann if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306-Initialisierung fehlgeschlagen")); for(;;); } // Clear the buffer display.clearDisplay(); // Text formatieren display.setTextSize(1); // Textgröße display.setTextColor(SSD1306_WHITE); // Textfarbe // Display Begrüßungstext display.setCursor(0,0); // Setze Cursor an den Anfang display.println(F("DIYTechAdventure")); display.display(); delay(2000); // Pause für 2 Sekunden // Überprüfen, ob der Sensor initialisiert werden kann if (!sht31.begin(0x44)) { // I2C Adresse für SHT31 Serial.println("SHT31-Initialisierung fehlgeschlagen"); while (1) delay(1); } } void loop() { float temperature = sht31.readTemperature(); float humidity = sht31.readHumidity(); if (!isnan(temperature)) { // Überprüfen, ob die Temperaturmessung erfolgreich war Serial.print("Temperature: "); Serial.print(temperature); Serial.println(" *C"); } else { Serial.println("Fehler beim Auslesen der Temperatur"); } if (!isnan(humidity)) { // Überprüfen, ob die Feuchtigkeitsmessung erfolgreich war Serial.print("Humidity: "); Serial.print(humidity); Serial.println(" %"); } else { Serial.println("Fehler beim Auslesen der Feuchtigkeit"); } // Display aktualisieren display.clearDisplay(); display.setCursor(0, 0); display.println(F("DIYTechAdventure")); display.setTextSize(1); display.setCursor(0, 20); display.print("Temp: "); display.print(temperature); display.println(" C"); display.setCursor(0, 40); display.print("Humidity: "); display.print(humidity); display.println(" %"); display.display(); delay(10000); // Pause für 10 Sekunden }
Hier ein paar Erläuterungen zu den einzelnen Codeteilen.
Wie oben schon erwähnt, sind erst einmal die erforderlichen Bibliotheken einzubinden.
#include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <Adafruit_SHT31.h>
// Hier werden die Anzahl der Pixel für Breite und Höhe des Bildschirms vereinbart #define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
Dann werden die Instanzen für Anzeige und Sensor erzeugt.
Die Zeile Adafruit_SSD1306 Display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); initialisiert das Display. Der Parameter -1 wird verwendet, um anzugeben, dass kein Reset-Pin verwendet wird. Wenn du ein Display ohne speziellen Reset-Pin hast oder der Reset-Pin nicht angeschlossen ist, kannst du diesen Parameter auf -1 setzen. Wenn dein Display einen Reset-Pin hat und dieser angeschlossen ist, würdest du hier die Pin-Nummer angeben.
// Erstellen einer SSD1306-Anzeigeinstanz Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1); // Erstellen einer SHT31-Sensorinstanz Adafruit_SHT31 sht31 = Adafruit_SHT31();
- for: Das Schlüsselwort für eine Schleife.
- (;;): Der Kopf der Schleife, der normalerweise aus drei Teilen besteht:
- Initialisierung: Normalerweise ein Ausdruck, der einmal vor dem Start der Schleife ausgeführt wird. Hier ist er leer.
- Bedingung: Ein Ausdruck, der vor jedem Schleifendurchlauf überprüft wird. Wenn er wahr ist, wird der Schleifenrumpf ausgeführt. Wenn er falsch ist, endet die Schleife. Hier ist er leer, was bedeutet, dass die Schleife immer wahr ist.
- Iteration: Ein Ausdruck, der nach jedem Schleifendurchlauf ausgeführt wird. Hier ist er leer.
Da alle drei Teile leer sind, wird die Schleife endlos ausgeführt.
// Überprüfen, ob das Display initialisiert werden kann if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306-Initialisierung fehlgeschlagen")); for(;;);
In der Loop-Schleife siehst du das Auslesen von Temperatur und Luftfeuchtigkeit, was hier schon beschrieben wurde. Dann geht es an das Beschreiben des Displays.
.clearDisplay() löscht die Anzeige auf dem Display
.setCursor setzt den Cursor in die linke obere Position. Spalte 1, Zeile 1
.println schreibt meinen Text „DIYTechAdventure“
.setTextSize – setzt die Schriftgröße auf 1
.setCursor(0,20) Cursor auf ganz links am Bildschirmrand und 20 Pixel nach unten.
Die anderen Zeilen wiederholen den Vorgang auch für die Anzeige der Luftfeuchtigkeit.
In der Loop-Schleife siehst du die das Auslesen von Temperatur und Luftfeuchtigkeit, was hier schon beschrieben wurde. Dann geht es an das Beschreiben des Displays.
display.display() – schreibt dann auf das Display
// Display aktualisieren display.clearDisplay(); display.setCursor(0, 0); display.println(F("DIYTechAdventure")); display.setTextSize(1); display.setCursor(0, 20); display.print("Temp: "); display.print(temperature); display.println(" C"); display.setCursor(0, 40); display.print("Humidity: "); display.print(humidity); display.println(" %"); display.display();
Und hier sehen wir das Ergebnis unserer Bemühungen. Wie im Code festgelegt, wir die Anzeige alle 10 Sekunden aktualisiert.
Ich hoffe du konntest mit diesen mit DIYTechAdventure ähnliche Ergebnisse erreichen. Freue dich auf weitere spannende Abendteuer und schreibe mir gerne, welche Sensoren du für die Temperatur- und Luftfeuchtigkeitsmessungen verwenden möchtest.