OLED Displays für den Arduino sind beliebt. Ein kurzer Wegweiser durch Anschluß-Pins, Protokolle und Libraries, damit das Mini-Display auch etwas anzeigt.

Bei eBay, Aliexpress & Co. gibt es zahnlose Mini-OLED-Displays, beispielsweise für den Betrieb an einem Arduino. Dabei sind die gängigen Größen 0,96 Zoll und 1,3 Zoll mit Auflösungen von 128 x 64 oder 128 x 32 Pixeln. Die Displays sind selbstleuchtend und werden in weiß, blau, gelb, Kombinationen davon oder auch “full color” angeboten. Die Full Color Displays stellen dann üblicherweise 65K Farben dar.

Es werden unterschiedliche Kommunikationsprotokolle unterstützt, in der Regel entweder I2C oder SPI oder beides. Dazu kommen unterschiedliche Driver Chips, für die die richtige Library benötigt wird, um das OLED ansteuern zu können. Gängig und gut unterstützt ist der Driver Chip SSD1306, der u.a. mit den folgenden beiden Libraries angesteuert werden kann: Adafruit_SSD1306 (github) oder U8glib (github). Wer ein OLED mit SS1106 Driver Chip erwischt hat, kann es mit der SH1106_SPI Library (github) versuchen.

Dieser Post zeigt den Anschluß und Betrieb eines einfachen, weißen 0,96″ Zoll OLED Displays (eBay) mit SSD1306 Driver Chip und sieben Anschluss-Pins an einen Arduino Uno. Nano, und alle weiteren Modelle mit ATmega328 Pinout, dürften auf dieselbe Weise angesteuert werden können. Im Zweifel das Datenblatt des Arduinos zu Rate ziehen.

Im folgenden Video ist das OLED im Einsatz zu sehen. Die Chord-Animation ist von Hari Wiguna, sein Kode steht auf GitHub bereit.

Um ein OLED erfolgreich ansteuern zu können, ist die richtige Verdrahtung zwischen Arduino und Display wichtig. Dabei wird es durch die Tatsache, dass die Displays mit unterschiedlicher Anzahl und Beschriftung der Pins geliefert werden nicht einfacher. Die Libraries erlauben üblicherweise die Verwendung von Software oder Hardware SPI, wobei letztere Variante deutlich schneller ist. Hardware SPI erfordert mehr Anschluss-Pins als Software SPI.

OLED Anschluss Arduino PIN Was ist das?
GND GND Ground
VCC 5V Volle Power! 🙂
D0 13 CLK, SCL, Hardware SCK
D1 11 DATA, MOSI DATA, SDA, Hardware MOSI
DC 6 Data/Command
DS 7 CS, Chip Select
RES 8 Reset

Das im Video gezeigte 0,96″ Display ist zur Ansteuerung durch Hardware SPI entsprechend der Tabelle mit dem Arduino zu verbinden. Bitte unbedingt prüfen, ob das eigene Display für 5V ausgelegt ist! Im Zweifel am 3,3V Pin anschließen und erst einmal damit versuchen. Die “Was ist das?”-Spalte in der Tabelle zeigt die ausgeschriebenen, gängigen oder alternativen Bezeichnungen der Anschlüsse; vielleicht hilft es dem einen oder anderen bei der Verkabelung. Ich fand diesen Beitrag von paulwb im Adafruit-Forum sehr hilfreich, um das Display nach einigen erfolglosen Versuchen endlich zum Laufen zu bringen.

Hier noch der Arduino-Sketch zur Darstellung der Animation wie im Video.

#include 
#include 
#include 
#include 

/* Wiring for Hardware SPI
    GND ------- ground
    VCC ------- 5V
    D0 -------- 13 hardware SCK
    D1 -------- 11 to hardware MOSI
    DC -------- 6 (user choice, defined below)
    DS -------- 7 (user choice, defined below)
    RST ------- 8 (user choice, defined below)
  Hardware MISO (12) unused */

#define OLED_DC     6
#define OLED_CS     7
#define OLED_RESET  8
Adafruit_SSD1306 display( OLED_DC, OLED_RESET, OLED_CS );

void setup( ) {
  display.begin( );
  display.clearDisplay( );
  display.display( );
}

int nFrames = 36;
void loop() {
  for ( int frame = 0; frame < nFrames; frame++ )
    HariChord( frame );
  for ( int frame = ( nFrames - 1 ); frame >= 0; frame-- )
    HariChord( frame );
}

void HariChord( int frame ) {
  display.clearDisplay( );
  int   n   = 7;
  int   r   = frame * 64 / nFrames;
  float rot = frame * 2 * PI / nFrames;
  for ( int i = 0; i < ( n - 1 ); i++ ) {
    float a  = rot + i * 2 * PI / n;
    int   x1 = 64 + cos( a ) * r;
    int   y1 = 32 + sin( a ) * r;
    for ( int j = i + 1; j < n; j++ ) {
      a  = rot + j * 2 * PI / n;
      int x2 = 64 + cos( a ) * r;
      int y2 = 32 + sin( a ) * r;
      display.drawLine( x1, y1, x2, y2, WHITE );
    }
  }
  display.display( );
}

Join the conversation!

  • Hi,
    very nice job 🙂 … unfortunately I saw just half the chord. drawing a line 0,0 – 127,63 I got a diogonal “line” but every second line is empty. What I am doing wrong ?
    regards

  • my fault was to change display size SSD1306_128_64 in wrong file Adafruit_SSD1306.h

  • Danke für das Tutorial.
    Hat mir geholen meine oLED zu prüfen und etwas Licht in den Bezeichnugsdschungel gebracht 🙂

    • Hi Gregor,
      freue mich sehr, dass Dir das Mini-Tutorial geholfen hat! Ich hatte seinerzeit einiges an Zeit investieren müssen, um die – teilweise doppelt oder synonym verwendeten – Begrifflichkeiten für mich zu klären und das OLED endlich an’s Laufen zu bekommen. Damit ich sowas nicht vergesse, schreibe ich es dann (hier) auf. 😉
      Beste Grüße
      Axel

Leave a Reply

Your email address will not be published. Required fields are marked *