In der Post: 128*64px OLED Display

OLED Display 128*64pxIn einem meiner Briefumschläge war dieses kleine (wirklich kleine) OLED Display. Ein eBay Kauf aus China für sagenhafte 2,08€. Kleiner Haken: Außer einem Firmennamen (heltec.cn) hat es keinerlei Typen- oder Seriennummer. Ein Datenblatt gab es auch nicht dazu.

Das Nachgooglen der Spezifikation hat eine Weile gedauert, denn von dem kleinen Platinchen gibt es (den Google Abbildungen zu Folge) eine ganze Reihe von Versionen. 4 Pins, 6 Pins, mit Spannungsregler, ohne, für fünf Volt, für 3,3 Volt (aber keines Falls für fünf!) und für 3V bis 5V Betriebsspannung. Nach einiger Suche war ich so weit, zu glauben, dass da ein 3-5V Display mit I²C Bus vor mir liegt. Also mutig an 5V angeklemmt… …und es ist nicht abgebrannt. Puh!

Die restlichen Verbindungen: SDA an Analog IN (!) 4, SCL an Analog IN 5 und für den Bus noch zwei Pullup Widerstände 47k von SDA und SCL an +5V (…wobei nach dem ganzen Rumgesuche nicht klar ist, ob die überhaupt notwendig sind).

Für die Ansteuerung gibt es glücklicherweise eine seeehr umfassende Library – die u8glib. Runtergeladen, importiert und einen Sketch verfasst. In verschiedenen Schriftgrößen wird – wie sollte es anders sein – „Hello World!“ ausgegeben. Danach wird das Display kurz gelöscht, bevor wieder die Schrift angezeigt wird. Um das Ganze in Betrieb zu nehmen, muss das Display korrekt eingestellt sein. Mein eBay Kauf verfügt über einen SSD1306 Controller Chip und ist 128*64px groß. Zeile 3 zeigt die Definition.

#include "U8glib.h"

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);	// I2C / TWI 

void setup()
{
    u8g.setColorIndex(1); //BW Display
}

void loop()
{
  u8g.firstPage();
  while(u8g.nextPage()==1)
  {
    u8g.setFont(u8g_font_4x6);
    u8g.drawStr( 0, 6, "Hello World!");
    u8g.setFont(u8g_font_5x7);
    u8g.drawStr( 0, 13, "Hello World!");
    u8g.setFont(u8g_font_5x8);
    u8g.drawStr( 0, 21, "Hello World!");
    u8g.setFont(u8g_font_6x10);
    u8g.drawStr( 0, 31, "Hello World!");
    u8g.setFont(u8g_font_7x13);
    u8g.drawStr( 0, 44, "Hello World!");
    u8g.setFont(u8g_font_8x13);
    u8g.drawStr( 0, 57, "Hello World!");
  }
  delay(1000);
  u8g.firstPage();
  while(u8g.nextPage()==1)
  {
    delay(1);
  }
  delay(500);
}

3 Gedanken zu „In der Post: 128*64px OLED Display

  1. Danke du hast mir glaub ich viele Nerven gespart, wobei ich immernoch nicht weis wie man anhand der Doku auf Pin 4 und 5 Analog In kommt.

    Viele Grüße

  2. Danke schön, hat mir den Anfang erleichert.
    Aber sollte auf dem Display nicht 6x „Hello World“ stehen?
    Wenn ich eine hor. Linie zeichnen will, wird bei mir nicht angezeit:
    u8g.drawHLine(1,8,100); // Werte =< 8
    Wenn u8g.drawHLine(1,9,100); kommt die Linie.
    Das wundert mich etwas. Hast Du das mal probiert?

    • Hallo Ralph,

      ja, wenn man den Quellcode mit dem Ergebnis vergleicht, sollte tatsächlich sechs mal „Hello World“ abgebildet sein. Bei einem y-Offset von 57 und einer Schrifthöhe von 13 passt das auf ein Display mit Höhe 64 wohl nicht mehr drauf. Das Linienproblem konnte ich nicht ausprobieren, da das Display mittlerweile an anderer Stelle fest verbaut ist. Wenn man sich die Schrift anschaut, fällt aber auf, dass am oberen Rand auch schon etwas nicht stimmt. Bei einem y-Offset von 6 sollte eine 6 Pixel hohe Schrift problemlos abgebildet werden können. Trotzdem ist sie oben abgeschnitten…
      Taucht die Linie mit y-Offset=9 denn genau am oberen Rand auf oder mit acht Pixeln Abstand vom oberen Rand?

      Viele Grüße
      Jo

Schreibe einen Kommentar

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