Biblio­thek Adafruit_SSD1306

Lese­zeit: 5 Minu­ten

Die Biblio­thek Adafruit_SSD1306 kann eben­so wie die Biblio­thek ⇒u8g2 Gra­fik und Text darstellen.

Pin­be­le­gung eines OLED-Dis­plays am Arduino

Benö­tig­te Biblio­thek:
Ach­te dar­auf, dass du auch die abhän­gi­gen Biblio­the­ken installierst.

Funk­tio­nen der Biblio­thek Adafruit_SSD1306

Schlüs­sel­wortPara­me­terAkti­on
begin(Parameter);SSD1306_SWITCHCAPVCC, Adres­se in HexadezimalOLED star­ten
dim(Parameter);true
false
Bild­schirm dunk­ler schalten
width();Bild­schirm­brei­te feststellen
height();Bild­schirm­hö­he feststellen
cle­ar­Dis­play();Bild­schirm löschen
setRotation(Drehrichtung);0 = kei­ne Drehung
1 = 90° im Uhr­zei­ger­sinn drehen
2 = 180° drehen
3 = 270° im Uhr­zei­ger­sinn drehen
Bild­schirm drehen
fillScreen(Farbe);Bild­schirm­hin­ter­grund­far­be festlegen
drawPixel(x-Achse, y-Ach­se, Farbe)Far­be:
WHITE (SSD1306_WHITE)
BLACK (SSD1306_BLACK)
ein­zel­nen Pixel zeichnen
diso­lay();Bild­schirm anzeigen
drawLine(StartX, Star­tY, End­eX, EndeY, Farbe);Far­be:
WHITE (SSD1306_WHITE)
BLACK (SSD1306_BLACK)
Linie zeich­nen
drawFastVLine(StartX, Star­tY, Brei­te, Farbe);Far­be:
WHITE (SSD1306_WHITE)
BLACK (SSD1306_BLACK)
Ver­ti­ka­le Linie zeichnen
drawFastVLine(StartX, Star­tY, Brei­te, Farbe);Far­be:
WHITE (SSD1306_WHITE)
BLACK (SSD1306_BLACK)
Hori­zon­ta­le Linie zeichnen
drawRect(StartX, Star­tY,, Brei­te, Höhe, Farbe);Far­be:
WHITE (SSD1306_WHITE)
BLACK (SSD1306_BLACK)
Recht­eck zeichnen
drawRoundRect(StartX, Star­tY , Brei­te, Höhe, Ecken­ra­di­us, Farbe);abge­run­de­tes Recht­eck zeichnen
fillRect(StartX, Star­tY,, Brei­te, Höhe, Farbe);aus­ge­füll­tes Recht­eck zeichnen
fillRoundRect(StartX, Star­tY , Brei­te, Höhe, Ecken­ra­di­us, Farbe);aus­ge­füll­tes, abge­run­de­tes Recht­eck zeichnen
drawCircle(MittelpunkX, Mit­tel­punk­tY, Radi­us, Farbe);Far­be:
WHITE (SSD1306_WHITE)
BLACK (SSD1306_BLACK)
Kreis zeich­nen
fillCircle(MittelpunkX, Mit­tel­punk­tY, Radius);Aus­ge­füll­ten Kreis zeichnen
setCursor(x-Achse, y-Ach­se);Cur­sor setzen
print("Text");
Text schrei­ben
write(Zeichen)ein­zel­nes Zei­chen schreiben

So sieht es aus:

#include "Adafruit_GFX.h"
#include "Adafruit_SSD1306.h"

// Maße des Bildschirms
#define BildschirmBreite 128  
#define BildschirmHoehe 64  

#define OLED_RESET 4  

// Adresse: 0x3C oder 0x3D
#define Adresse 0x3c  

// Name des Displays und Startparameter
Adafruit_SSD1306 oled(BildschirmBreite, BildschirmHoehe, &Wire, OLED_RESET);

void setup() 
{
  // OLED starten
  oled.begin(SSD1306_SWITCHCAPVCC, Adresse);

  // Bildschirm löschen
  oled.clearDisplay();

  // Schriftfarbe und -größe
  oled.setTextColor(WHITE);

  // Textgröße (1-3)
  oled.setTextSize(2);

  // Codepage auf 437 setzen -> Sonderzeichen anzeigen
  oled.cp437(true);

  // Display dunkler stellen
  oled.dim(true);
}

void loop() 
{
  // ausgefüllte Kreise von links nach rechts
  int Radius = 3;

  // Start am linken Rand
  int StartX = Radius;
  int StartY = 5;
  while (StartX < oled.width() - Radius) 
  {
    for (int i = StartY; i < oled.height() - Radius; i += 10) {

      oled.fillCircle(StartX, i, Radius, WHITE);
      oled.display();
      delay(1);
    }
    StartX += 10;
  }
  delay(500);
  oled.clearDisplay();

  // ausgefüllte Kreise von rechts nach links
  // Start am rechten Rand
  StartX = oled.width() - Radius;
  StartY = 5;

  // solange der linke Rand nicht erreicht wurde
  while (StartX > Radius) 
  {
    for (int i = StartY; i < oled.height() - Radius; i += 10) 
    {

      oled.fillCircle(StartX, i, Radius, WHITE);
      oled.display();
      delay(10);
    }

    // 10 Pixel weiter nach links
    StartX -= 10;
  }
  delay(500);

  // Kreise 
  Radius = 5;
  StartX = Radius;
  while (StartX < oled.width() - Radius)
  {
    for (int i = StartY; i < oled.height() - Radius; i += 15) 
    {
      oled.drawCircle(StartX, i, Radius, WHITE);
      oled.display();
      delay(1);
    }
    StartX += 15;
  }
  
  delay(500);
  oled.clearDisplay();

  // diagonale Linien   
  for (int i = 0; i < oled.width(); i += 4) 
  {
    oled.drawLine(0, 0, i, oled.height() - 1, WHITE);
    oled.display(); 
    delay(1);
  }

  for (int i = 0; i < oled.height(); i += 4)
  {
    oled.drawLine(0, 0, oled.width() - 1, i, WHITE);
    oled.display();
    delay(1);
  }
  delay(500);
  oled.clearDisplay();

  // horizontale Linie mit drawLine
  for (int i = 0; i < oled.height() - 1; i += 4) 
  {
    oled.drawLine(0, i, oled.width() - 1, i, WHITE);
    oled.display();
    delay(1);
  }
  oled.clearDisplay();
  delay(500);

   // horizontale Linien mit drawFastHLine
  for (int i = 0; i < oled.height() - 1; i += 4) 
  {
    oled.drawFastHLine(0, i, oled.width(), WHITE);
    oled.display();
    delay(1);
  }
  oled.clearDisplay();
  delay(500);

  // vertikale Linie mit drawLine
  for (int i = 0; i < oled.width() - 1; i += 4) 
  {
    oled.drawLine(i, 0, i, oled.height() - 1, WHITE);
    oled.display();
    delay(1);
  }
  oled.clearDisplay();
  delay(500);
  
  // vertikale Linien mit drawFastVLine
  for (int i = 0; i < oled.width() - 1; i += 4) 
  {
    oled.drawFastVLine(i, 0, oled.height(), WHITE);
    oled.display();
    delay(1);
  }
  oled.clearDisplay();
  delay(500);

  // Rechtecke
  for (int i = 0; i < oled.height() / 2; i += 4) 
  {
    oled.drawRect(i, i, oled.width() - 2 * i, oled.height() - 2 * i, WHITE);
    oled.display(); 
    delay(10);
  }
  delay(500);
  oled.clearDisplay();

  // abgerundete Rechtecke
  for (int i = 0; i < oled.height() / 2; i += 4) 
  {
    oled.drawRoundRect(i, i, oled.width() - 2 * i, oled.height() - 2 * i, 5, WHITE);
    oled.display(); 
    delay(10);
  }
  delay(500);
  oled.clearDisplay();

  // einzelne Pixel zufällig anordnen
  for (int i = 0; i < 500; i++) 
  {
    int x = random(1, oled.width());
    int y = random(1, oled.height());
    oled.drawPixel(x, y, WHITE);
    delay(2);
  }
  oled.display();

  delay(500);
  oled.clearDisplay();

  oled.setTextSize(2);
  oled.setCursor(0, 0);
  oled.print("Text");
  oled.display();

  delay(500);
  oled.clearDisplay();

  // Sonderzeichen
  oled.setCursor(0, 0);
  oled.print("Sonder-");
  oled.setCursor(0, 15);
  oled.print("-zeichen:");
  oled.display();
  delay(500);

  oled.clearDisplay();
  oled.setCursor(0, 0);
  oled.write("\x84");  // ä -> 132
  oled.write("\x94");  // ö -> 148
  oled.write("\x81");  // ü -> 129
  oled.write("\x8e");  // Ä -> 142
  oled.write("\x99");  // Ö -> 153
  oled.write("\x9a");  // Ü -> 154
  oled.write("\xe1");  // ß -> 224
  oled.write("\xe0");  // alpha -> 223
  oled.write("\xe4");  // Summenzeichen -> 228
  oled.write("\xe3");  // PI -> 227
  oled.write("\xea");  // Ohm -> 234
  oled.write("\xed");  // Durchschnitt -> 237
  oled.write("\xee");  // PI -> 238
  oled.write("\x10");  // Pfeil links -> 16
  oled.write("\x11");  // Pfeil rechts -> 17
  oled.write("\x12");  // Pfeil oben und unten -> 18
  oled.write("\x7b");  // { -> 123
  oled.write("\x7c");  // | -> 124
  oled.write("\x7d");  // } ~ -> 125
  oled.write("\xf8");  // ° -> 248
  oled.display();
  delay(2000);
  oled.clearDisplay();

  // Lauftext
  oled.setTextSize(2);
  oled.setTextColor(SSD1306_WHITE);
  oled.setCursor(0, 0);
  oled.println("Text");
  oled.display();

  oled.startscrollright(0x00, 0x0F);
  delay(4000);
  oled.stopscroll();
  delay(500);
  oled.startscrollleft(0x00, 0x0F);
  delay(4000);
  oled.stopscroll();
  delay(500);
  oled.clearDisplay();
}

I²C-Adres­se herausfinden:

#include "Wire.h"

void setup()
{
  Wire.begin();
  Serial.begin(9600);
  delay(500);
  Serial.print("I2C Scanner");
}

void loop()
{
  byte Fehler, Adresse;
  int Geraete = 0;
  Serial.println("Starte Scanvorgang");

  for (Adresse = 1; Adresse < 127; Adresse++ )
  {
    // Übertragung starten
    Wire.beginTransmission(Adresse);

    // wenn die Übertragung beendet wird
    Fehler = Wire.endTransmission();

    if (Fehler == 0)
    {
      Serial.print("I2C Gerät gefunden - Adresse: 0x");
      if (Adresse < 16) Serial.print("0");
      Serial.print(Adresse, HEX);
      Serial.println("");
      Geraete++;
    }
  }
  if (Geraete == 0) Serial.println("Keine I2C Geräte gefunden\n");
  else Serial.println("Scanvorgang abgeschlossen");

  delay(10000);
}

Hier fin­dest du einen Über­blick über die 🔗Adafruit class refe­rence SSD1306 (exter­ner Link abge­ru­fen am 07.12.23).


Letzte Aktualisierung: 7. Dez 2023 @ 19:01