Zum Inhalt springen

OLED Display 1.3 Zoll

    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:

    1. Bildschirmtechnologie: OLED (Organic Light Emitting Diode) bietet selbstleuchtende Pixel, die kein Hintergrundlicht benötigen. Dadurch sind die Displays sehr dünn und leicht.
    2. Bildschirmgröße: 1,3 Zoll Diagonale, was einer Bildfläche von etwa 33,02 mm2 entspricht.
    3. Auflösung: Typischerweise 128×64 Pixel, was eine gute Klarheit und Detailgenauigkeit für kleine Projekte bietet.
    4. 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.
    5. Energieverbrauch: Niedriger Energieverbrauch, besonders bei der Darstellung von schwarzen Pixeln, da unbeleuchtete Pixel keinen Strom verbrauchen.
    6. Ansteuerung: Unterstützt mehrere Kommunikationsprotokolle, wie I2C und SPI, was die Integration in verschiedene Projekte erleichtert.
    7. Sichtwinkel: Sehr weiter Sichtwinkel (>160 Grad), was das Ablesen aus verschiedenen Positionen erleichtert.
    8. Lebensdauer: Lange Lebensdauer der OLED-Elemente, typischerweise über 20.000 Stunden.
    9. Bibliotheken und Unterstützung: Es gibt zahlreiche Bibliotheken und Community-Support für die Verwendung mit Arduino (z.B. Adafruit GFX und Adafruit SSD1306).
    10. 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:

    ESP32

    OLED Display 0,96 oder 1.3 Zoll

    SHT3x (aus dem Beitrag Temperaturmessung mit dem SHT3x)

    Breadboard

    Verbindungsdrähte (Jumper Wire)

    Fritzing Schaltung - ESP32 mit OLED Dislplay und SHT31
    Logo Fitzing.org




    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.

    Sreenshot - Auswahl der Libraries in Arduino IDE

    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.

    Projektergebnis - anzeige der Temperatur und Luftfeuchtigkeit am OLED Display
    0 Kommentare
    Inline Feedbacks
    View all comments