Wemos D1 mini Shield: 0,66 Zoll OLED Display

Das 0,66 Zoll OLED Display verfügt über eine Auflösung von 64×48 Pixel.

Wemos D1 mini 0,66" OLED Display
Wemos D1 mini 0,66″ OLED Display

Technische Daten

  • Auflösung – 64 x 48 Pixel
  • Betriebsspannung – 3.3 V
  • Treiber IC Version – SSD1306
  • IIC Adressen 0X3C oder 0X3D

Benötigte Bibliotheken

Für den Betrieb am Wemos D1 mini werden zwei Bibliotheken benötigt welche über die Arduino IDE eingebunden werden können. Dazu navigiert man als erstes über das Menü „Sketch“ -> „Bibliothek einbinden“ -> „Bibliotheken verwalten…“

In dem nun neu geöffneten Dialog wird der Suchbegriff eingegeben (1) und danach auf die Schaltfläche Installieren (2) geklickt.

Bevor man einen Suchbegriff eingeben kann, müssen erst einige Daten aus dem Internet geladen werden, dieses kann je nach Internetgeschwindigkeit dauern.

 

Adafruit GFX Bibliothek

Installieren der Adafruit GFX Bibliothek
Installieren der Adafruit GFX Bibliothek

Adafruit SSD1306

Installieren der Adafruit SSD1306 Bibliothek
Installieren der Adafruit SSD1306 Bibliothek

Programmieren des Displays

Nachdem die beiden benötigten Bibliotheken eingebunden wurden, kann nun mit dem Programmieren eines Sketches begonnen werden.
Jedoch ist die Bibliothek Adafruit SSD1306 nicht für Displays mit einer Auflösung von 64 x 48 Pixel entworfen daher ist die Positionierung des Cursors mit der Funktion „setCursor(Spalte, Zeile)“ nicht bei Wert 0,0 sondern bei 32,8.

Initialisieren des Displays

Bevor man einen Text oder eine Zeichenkette auf dem Display ausgeben kann muss zuerst das Display initialisiert werden, beim 0,66″ OLED Shield ist dieses relativ einfach denn das verfügt über 2 feste Pins welche nicht anders gesteckt werden kann.

Okay man könnte auch das Shield auf ein Breadboard stecken und dann mit Breadboardkabeln an einen anderen Microcontroller stecken und somit können ggf. andere Pins infrage kommen.
In diesem Tutorial gehe ich jedoch auf die Verbindung mit einem Wemos D1 mini ein.

#define OLED_RESET 0  // GPIO0
Adafruit_SSD1306 display(OLED_RESET);
void setup()   {
  //initialisieren mit der I2C Adresse 0x3C für das 64 x 48 Pixel große Display.
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  //display starten
  display.display();
  //kleine Pause von 2 sek.
  //Das Display und die Bibliothek startet, auf dem Display erscheint arda.....
  delay(2000);
  //Alle Zeichen auf dem Display löschen.
  display.clearDisplay(); 
}

Texte

Eine Zeichenkette / Text kann wiefolgt gesetzt werden:

//Alle Zeichen auf dem Display löschen
display.clearDisplay();
//Textgröße auf 1 (das kleinste) setzen
display.setTextSize(1);
//Textfarbe weiß
display.setTextColor(WHITE);
//Textposition oben, links
display.setCursor(32,8);
//Zeichenkette mit Zeilenumbruch
display.println("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
//Zeichenkette anzeigen
display.display();

Begrenzungen des Displays

Das Display hat eine Größe von 0,66 Zoll und 64 x 48 Pixel.

Wenn man eine Zeichenkette darstellen möchte kann man bei einer Textgröße von 1 also 10 Zeichen in einer Reihe und 3 Reihen darstellen.

Wemos D1 mini OLED Display Shield mit Text
Wemos D1 mini OLED Display Shield mit Text

Quellcode

Beispiel I – „Hallo Welt!“

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
 
#define OLED_RESET 0
Adafruit_SSD1306 display(OLED_RESET);
 
void setup()   {
  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.display();
  delay(2000);
  display.clearDisplay(); 
}

void loop() {
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(32,8);
  display.println("Hallo Welt!");
  display.display();
  delay(2000);
}

Beispiel II – Temperatur & Luftdruck darstellen

Mit einem Dual Base Shield, dem Wemos D1 mini DHT11 Shield und dem folgenden Quellcode kann man sich nun die Daten des DHT11 Sensors bequem, auf dem Display ausgeben lassen.

Wemos D1 mini mit DHT11 und 0,66" OLED Display Shield
Wemos D1 mini mit DHT11 und 0,66″ OLED Display Shield
#include "DHT.h" //DHT Bibliothek
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 0
Adafruit_SSD1306 display(OLED_RESET);

//Pin an welchem der DHT11 Sensor angeschlossen ist.
//Beim DHT11 Shield ist es der digitale Pin D4.
#define DHTPIN D4 
 
//Festlegen welcher Typ von DHT Sensor verwendet wird.
#define DHTTYPE DHT11

//Initialisieren des Sensors mit dem Anschluss und dem Typ
DHT dht(DHTPIN, DHTTYPE);
 
void setup() {
  Serial.begin(9600); //Begin der seriellen Kommunikation mit 9600 Baud.
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.display();
  delay(2000);
  display.clearDisplay(); 
  dht.begin(); //DHT Kommunikation beginnen.
}
 
void loop() {
  //Der DHT11 Sensor liefert alle 2 Sekunden einen neuen
  //Wert daher lohnt es sich nicht die loop konstant durchlaufen 
  //zu lassen.
  delay(2000);
 
  //lesen der Luftfeuchtigkeit
  double luftfeuchtigkeit = dht.readHumidity();
  //lesen der Temperatur in Grad Celsius
  double temperaturC = dht.readTemperature();
  //lesen der Temperatur in Grad Fahrenheit
  //mit dem Boolean Parameter wird "gesteuert" ob
  //die Temperatur in Fahrenheit oder Celsius ausgegeben wird.
  double temperaturF = dht.readTemperature(true);
 
  //Prüfen ob die Werte erfolgreich gelesen wurden.
  if (isnan(luftfeuchtigkeit) || isnan(temperaturC) || isnan(temperaturF)) {
    Serial.println("Fehler beim lesen von Daten.");
    return;
  }

  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  
  display.setCursor(32,8);
  display.println("DHT11");

  display.setCursor(32,9);
  display.println("_____");
    
  display.setCursor(32,17);
  String tempValue = String(temperaturC);
  display.println("T: "+tempValue+"C");

  display.setCursor(32,25);
  String humValue = String(luftfeuchtigkeit);
  display.println("H: "+humValue+"%");
  
  display.display();
  delay(2000);
}

 

13 Gedanken zu „Wemos D1 mini Shield: 0,66 Zoll OLED Display

  • Pingback:Wemos D1 mini Shields & Module - Technik Blog

  • Pingback:Arduino Projekt: Darstellen von Text und Grafik auf einem OLED isplay - Technik Blog

  • Pingback:Arduino Projekt: Darstellen von Text und Grafik auf einem OLED Display - Technik Blog

  • Pingback:Arduino Lektion 69: OpenWeatherMap Daten auf OLED Display anzeigen - Technik Blog

  • 8. Mai 2019 um 21:58
    Permalink

    Hallo Stefan,
    das WEMOS D1 mit dem WEMOS TFT 1.4 bekomme ich mit „Hallo Welt“ nicht zum Laufen.
    Das Hochladen funktioniert.
    Welche Pins vom D1mini werden benutzt?
    An D5 SCK, D7 MOSI würde ich Signale erwarten, kommt aber nichts
    Wo sind SCK, MOSI, DC anzuschließen? CS liegt auf Masse.
    Muß RST zwingend mit dem Reset des Prozessors verbunden sein, oder kann RST mit +3,3V verbunden werden?
    Ich bin am Ende meiner Kunst und für Deine Hilfe ich im Voraus dankbar.

    Freundliche Grüße aus dem Südwesten
    Dieter Deck

    Antwort
  • 8. Mai 2019 um 22:00
    Permalink

    Hallo Stefan,
    das WEMOS D1 mit dem WEMOS TFT 1.4 bekomme ich mit „Hallo Welt“ nicht zum Laufen.
    Das Hochladen funktioniert.
    Welche Pins vom D1mini werden benutzt?
    An D5 SCK, D7 MOSI würde ich Signale erwarten, kommt aber nichts
    Wo sind SCK, MOSI, DC anzuschließen? CS liegt auf Masse.
    Muß RST zwingend mit dem Reset des Prozessors verbunden sein, oder kann RST mit +3,3V verbunden werden?
    Ich bin am Ende meiner Kunst und für Deine Hilfe ich im Voraus dankbar.

    Freundliche Grüße aus dem Südwesten
    Dieter Deck

    Antwort
  • 7. Oktober 2019 um 18:25
    Permalink

    Hallo Stefan,

    das Modul hängt sich auf wenn man einen Reset während eines Zeichenvorgangs (oder Buffer-Wechsels?) auslöst, es bleibt teils ein halb gezeichnetes Display stehen. Der D1 läuft normal hoch & weiter, nur das OLED reagiert danach auf nichts mehr — nicht mal auf weitere Resets. Nur ein Kaltstart bringt es wieder ans Laufen.

    Wo finde ich den Schaltplan für dieses Modul? Ist die Reset-Leitung des SSD1306 evtl. nicht mit dem D1-Reset verbunden, so wie beim Wemos-Shield v1?

    https://wiki.wemos.cc/_media/products:d1_mini_shields:mini_oled.pdf

    Bei v2 haben Wemos einen Lötjumper für die Reset-Leitung eingeführt.

    Danke & Gruß
    Michael Balzer

    Antwort
  • 12. August 2020 um 15:57
    Permalink

    ich verwende Wemos D1 mini Shield: 0,66 Zoll OLED Display und habe es direkt auf die Pins vom D1 mini gesteckt das Programm wird auf den D1 geladen, aber am Ende kommt die Meldung
    Leaving…
    Hard resetting via RTS pin…

    und nicht geht, was mache ich falsch ?

    Antwort
  • 12. August 2020 um 17:01
    Permalink

    Hi Dieter,
    ich verwende Wemos D1 mini Shield: 0,66 Zoll OLED Display und habe es direkt auf die Pins vom D1 mini gesteckt das Programm wird auf den D1 geladen, aber am Ende kommt die Meldung
    Leaving…
    Hard resetting via RTS pin…

    und nicht geht, was mache ich falsch ?

    Antwort
  • 23. August 2020 um 12:03
    Permalink

    Hallo,
    wie Dieter habe ich das gleiche Problem,
    beide Bibliotheken sind eingebunden,
    auch kompilieren und hochladen klappt einwandfrei,
    am Display aber nichts oder nur das was zuvor zu sehen
    war bleibt.
    Der Lötjumper ist auf 0x3C eingestellt
    Das Shield habe ich auch einfach auf den Wemos D1
    kompatibel aufgesteckt.
    Woran könnte das liegen, daß nichts angezeigt wird ?
    Vielen Dank
    Thomas

    Antwort
    • 23. August 2020 um 21:05
      Permalink

      Hallo Thomas,
      Hallo Dieter,

      ich habe mir einmal die Zeit genommen und mir das Problem angeschaut. Es ist wohl nun so das die aktuelle Bibliothek nicht mehr kompatibel mit dem Display ist und der Wemos D1 mini einen Reset durchführt.
      Das würdest du zbsp. in dem seriellen Monitor der Arduino IDE sehen.

      Ich werde ein Update zu diesem Beitrag schreiben und veröffentlichen.

      Gruß und Danke,

      Stefan Draeger

      Antwort
  • Pingback:Wemos D1 mini Shield: 0,66 Zoll OLED Display - (Update 23.08.2020) - Technik Blog

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.