Biblio­thek Adafruit SH110X

Lese­zeit: 5 Minu­ten

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

Aller­dings kann sie nur mit dem Chip­sät­zen SH1106 und SH1107 ver­wen­det werden.

Anschluss eines OLED an ver­schie­de­ne Mikrocontroller

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_SH110X

Schlüs­sel­wortPara­me­terAkti­on
begin(Parameter);SSD1306_SWITCHCAPVCC, Adres­se in HexadezimalOLED star­ten
width();Bild­schirm­brei­te feststellen
height();Bild­schirm­hö­he feststellen
cle­ar­Dis­play();Bild­schirm löschen
fillScreen(Farbe);Bild­schirm­hin­ter­grund­far­be festlegen
drawPixel(x-Achse, y-Ach­se, Farbe)Far­be:
SH110X_WHITE
SH110X_BLACK
ein­zel­nen Pixel zeichnen
diso­lay();Bild­schirm anzeigen
drawLine(StartX, Star­tY, End­eX, EndeY, Farbe);Far­be:
SH110X_WHITE
SH110X_BLACK
Linie zeich­nen
drawFastVLine(StartX, Star­tY, Brei­te, Farbe);Far­be:
SH110X_WHITE
SH110X_BLACK
Ver­ti­ka­le Linie zeichnen
drawFastVLine(StartX, Star­tY, Brei­te, Farbe);Far­be:
SH110X_WHITE
SH110X_BLACK
Hori­zon­ta­le Linie zeichnen
drawRect(StartX, Star­tY,, Brei­te, Höhe, Farbe);Far­be:
SH110X_WHITE
SH110X_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:
SH110X_WHITE
SH110X_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
set­Text­Si­ze();Text­grö­ße
print("Text");
Text schrei­ben
write(Zeichen)ein­zel­nes Zei­chen schreiben
invertDisplay(true/false);Far­ben tauschen
true = wei­ßer Hintergrund
fal­se = schwar­zer Hintergrund

So sieht es aus:

#include "Adafruit_SH110X.h"
#include "Adafruit_GFX.h"

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

// Name des Displays und Startparameter
#define Adresse 0x3c
#define OLED_RESET 4 

// SH1106
Adafruit_SH1106G oled = Adafruit_SH1106G(BildschirmBreite, BildschirmHoehe, &Wire, OLED_RESET);

// SH1107
// Adafruit_SH1107 oled = Adafruit_SH1107(BildschirmBreite, BildschirmHoehe, &Wire, OLED_RESET);

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

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

  // Schriftfarbe
  oled.setTextColor(SH110X_WHITE);

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

  // Codepage auf 437 setzen -> Sonderzeichen anzeigen
  oled.cp437(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, SH110X_WHITE);
      oled.display();
      delay(1);
    }
    StartX += 10;
  }
  delay(1000);
  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, SH110X_WHITE);
      oled.display();
      delay(10);
    }

    // 10 Pixel weiter nach links
    StartX -= 10;
  }
  delay(1000);
  oled.clearDisplay();

  // 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, SH110X_WHITE);
      oled.display();
      delay(1);
    }
    StartX += 15;
  }
  
  delay(1000);
  oled.clearDisplay();

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

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

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

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

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

  // Rechtecke
  for (int i = 0; i < oled.height() / 2; i += 4) 
  {
    oled.drawRect(i, i, oled.width() - 2 * i, oled.height() - 2 * i, SH110X_WHITE);
    oled.display(); 
    delay(10);
  }
  delay(1000);
  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, SH110X_WHITE);
    oled.display(); 
    delay(10);
  }
  delay(1000);
  oled.clearDisplay();

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

  delay(1000);
  oled.clearDisplay();

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

  delay(1000);
  oled.clearDisplay();

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

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

  // Farben tauschen
  oled.invertDisplay(true);
  oled.setCursor(0, 0);
  oled.print("Text");
  oled.display();
  delay(1000);
  oled.clearDisplay();
  oled.invertDisplay(false);
}

Schrif­ten verwenden

So sieht es aus:

#include "Adafruit_SH110X.h"
#include "Adafruit_GFX.h"

// alle Schriftarten einbinden
#include "Fonts/FreeMono9pt7b.h"	
#include "Fonts/FreeMono12pt7b.h"
#include "Fonts/FreeMono18pt7b.h"
#include "Fonts/FreeMono24pt7b.h"

#include "Fonts/FreeMonoBold9pt7b.h"		
#include "Fonts/FreeMonoBold12pt7b.h"
#include "Fonts/FreeMonoBold18pt7b.h"
#include "Fonts/FreeMonoBold24pt7b.h"	

#include "Fonts/FreeMonoBoldOblique9pt7b.h"
#include "Fonts/FreeMonoBoldOblique12pt7b.h"	
#include "Fonts/FreeMonoBoldOblique18pt7b.h"
#include "Fonts/FreeMonoBoldOblique24pt7b.h"	

#include "Fonts/FreeMonoOblique9pt7b.h"
#include "Fonts/FreeMonoOblique12pt7b.h"
#include "Fonts/FreeMonoOblique18pt7b.h"
#include "Fonts/FreeMonoOblique24pt7b.h"

#include "Fonts/FreeSans9pt7b.h"	
#include "Fonts/FreeSans12pt7b.h"
#include "Fonts/FreeSans18pt7b.h"	
#include "Fonts/FreeSans24pt7b.h"	

#include "Fonts/FreeSansBold9pt7b.h"
#include "Fonts/FreeSansBold12pt7b.h"
#include "Fonts/FreeSansBold18pt7b.h"	
#include "Fonts/FreeSansBold24pt7b.h"

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

// Name des Displays und Startparameter
#define Adresse 0x3c
#define OLED_RESET 4 
Adafruit_SH1106G oled = Adafruit_SH1106G(BildschirmBreite, BildschirmHoehe, &Wire, OLED_RESET);

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

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

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

void loop() 
{
  oled.setFont(&FreeMono9pt7b);
  oled.setCursor(0, 10);
  oled.print("Text");
  oled.display();
  delay(1000);
  oled.clearDisplay();

  oled.setFont(&FreeMono12pt7b);
  oled.setCursor(0, 15);
  oled.print("Text");
  oled.display();
  delay(1000);
  oled.clearDisplay();
  
  oled.setFont(&FreeMono24pt7b);
  oled.setCursor(0, 30);
  oled.print("Text");
  oled.display();
  delay(1000);
  oled.clearDisplay();

  oled.setFont(&FreeSansBold24pt7b);
  oled.setCursor(0, 35);
  oled.print("Text");
  oled.display();
  delay(1000);
  oled.clearDisplay();

  oled.setFont(&FreeMonoBoldOblique24pt7b);
  oled.setCursor(0, 35);
  oled.print("Text");
  oled.display();
  delay(1000);
  oled.clearDisplay();
}

Letzte Aktualisierung: Jan. 5, 2025 @ 22:44