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);
}

 

8 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

Schreibe einen Kommentar

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