Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Gartenautomation
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Deutsch
  • English
Menu

OLED Display und Drehregler: Programmieren in der Arduino IDE

Posted on 3. November 20242. November 2024 by Stefan Draeger

Auf Aliexpress.com habe ich ein cooles Modul mit 1,3″ OLED Display und Drehregler gefunden. In diesem Beitrag möchte ich dir gerne zeigen wie du dieses Modul in der Arduino IDE programmierst.

OLED Display und Drehregler: Programmieren in der Arduino IDE
Dieses Video auf YouTube ansehen.

Im letzten Beitrag Eigenes MacroPad bauen: mit Raspberry Pi Pico zum Effizienz-Booster habe ich dir gezeigt, wie du ein MacroPad erstellen und programmieren kannst. Dieses hier vorgestellte Modul wäre eine optimale Ergänzung um dieses noch Effektiver zu machen.

OLED Display & Drehregler
OLED Display & Drehregler
OLED Display & Drehregler
OLED Display & Drehregler
OLED Display & Drehregler - Rückseite
OLED Display & Drehregler – Rückseite

Auf diesem Blog habe ich ebenso bereits das Modul mit einem kleinen 0,96″ OLED Display & einem 4×4 Tastenfeld im Beitrag Einführung in das OLED Display und Tastenfeld Modul für Arduino mit Beispielprojekt vorgestellt.

Dieses ist ebenso recht nützlich, jedoch finde ich einen Drehregler besonders für Menüs deutlich besser.

OLED Display & Eingabegeräte
OLED Display & Eingabegeräte

Inhaltsverzeichnis

  • Bezug des Modules
  • Aufbau des Modules – OLED Display mit Drehregler
  • Technische Daten
  • Programmieren des Moduls
    • Anleitung zur Programmierung des Moduls am Arduino UNO
      • Bibliothek zum Auslesen des Rotary Encoder
      • Bibliothek zum Ansteuern des Displays
      • Schritt 1 – Auslesen des Rotary Encoders am Arduino UNO
      • Schritt 2 – steuern der Helligkeit einer LED mit dem Drehregler
      • Schritt 3 – Anzeigen der Helligkeit der LED auf dem Display

Bezug des Modules

Das Modul bekommst du auf ebay.de bereits ab 6,50 € zzgl. Versandkosten*, in meinem Fall habe ich dieses über aliexpress.com für 3 € zzgl. Versandkosten erstanden.

Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!

Es gibt zwei Varianten von diesem Model, zum einen mit einem 0,96″ Display und SSD1306 Treiberchip und dieses hier vorgestellte Modell mit einem 1,3″ Display und SH1106 Treiberchip.

Aufbau des Modules – OLED Display mit Drehregler

Das Modul verfügt wie bereits erwähnt über ein 1,3 Zoll (3,7 cm) OLED Display sowie über zwei frei programmierbare Tasten und einen Drehregler mit zusätzlicher Tastfunktion. Rings um das Modul sind vier Bohrungen im Durchmesser von 3 mm angebracht.

Aufbau - OLED Display mit Drehregler
Aufbau – OLED Display mit Drehregler

Was ich bei diesem Modul sehr gut gelungen finde ist, dass die Beschriftung der Pins beidseitig erfolgt ist, somit hast du beim Anschluss via Breadboardkabel weniger Probleme und musst das Modul nicht hin und her drehen.

Zusätzlich ist hier die Beschriftung auch etwas ausführlicher und nicht wie auf der Vorderseite stark eingekürzt!

OLED Display & Drehregler - Rückseite
OLED Display & Drehregler – Rückseite

Technische Daten

Hier ist eine übersichtliche Tabelle mit den technischen Daten des Moduls:

KomponenteTechnische Daten
Betriebsspannung3,3 V
Display
Dimension1,3″ (3,7 cm)
Auflösung128×64 Pixel
FarbeSchwarz/Weiß
TreiberchipSH1106
SchnittstelleI2C
Rotary Encoder
TypEC11

Die beiden Taster sind bereits über Pull-up-Widerstände verbunden! Daher benötigst du im späteren Code keine extra Konfiguration dafür.

Programmieren des Moduls

Das Modul kannst du am Arduino, Raspberry Pi, Raspberry Pi Pico und auch an den ESP Mikrocontrollern programmieren. Durch die I2C Schnittstelle für das Display und die einfachen digitalen Anschlüsse steht dir hier nichts im Wege.

Anleitung zur Programmierung des Moduls am Arduino UNO

Zunächst möchte ich kurz und knapp erläutern, wie du dieses Modul am Arduino UNO in der Arduino IDE programmierst.

Bibliothek zum Auslesen des Rotary Encoder

Für den Rotary Encoder gibt es diverse Bibliotheken, ich habe mit der Bibliothek von CarlosSiles67 welche du unter https://github.com/CarlosSiles67/Rotary als ZIP-Datei herunterladen kannst, sehr gute Erfahrung gesammelt.

Bibliothek zum Ansteuern des Displays

Das OLED Display wird über den Treiberchip SH1106 betrieben und dafür benötigen wir eine spezielle Bibliothek, diese können wir entweder vom GitHub Repository Adafruit / Adafruit_SH110x als ZIP-Datei herunterladen, oder über den internen Bibliotheksverwalter über die Suche nach Adafruit SH110x.

Schritt 1 – Auslesen des Rotary Encoders am Arduino UNO

Über die Bibliothek Rotary können wir mit der Funktion process den aktuellen Wert ablesen. Als Rückgabe erhalten wir entweder einen positiven oder negativen Wert. Diesen können

Programm – auslesen des Rotary Encoders am Arduino UNOHerunterladen
//Bibliothek zum auslesen eines Drehreglers
#include <rotary.h>

//Pin-Konfiguration
#define push 2
#define a 4
#define b 3

//LED am digitalen PWM Pin D10 angeschlossen
#define led 10

//Objektinstanz mit der Pinbelegung anlegen
Rotary rotary = Rotary(a, b, push);

int brightness = 0;

void setup() {
  //beginn der seriellen Kommunikation mit 9600 baud
  Serial.begin(9600);
  
  //Pin der LED als Ausgang definieren
  pinMode(led, OUTPUT);
}

void loop() {
  //Auslesen der aktuellen Position als Wert erhalten 
  //wir je nach Drehrichtung einen anderen Wert.
  char currentPosition = rotary.process();

  //Das Rotary Objekt verfügt über Funktionen mit
  //welcher wir die Drehrichtung einfach auslesen können.
  if (currentPosition == rotary.clockwise()) {
    //Wenn der Wert der Helligkeit kleiner als 255 ist, dann...
    if (brightness < 255)
      brightness = brightness + 1;
  } else if (currentPosition == rotary.counterClockwise()) {
    //Wenn der Wert der Helligkeit größer als 0 ist, dann...
    if (brightness > 0)
      brightness = brightness - 1;
  }

  //Wenn der Taster betätigt wird, dann wird ebenso eine Ausgabe getätigt.
  if (rotary.buttonPressedReleased(20)) {
    Serial.println("Taster gedrückt!");
  }

  //Schreiben der aktuellen Helligkeit an den Pin / der LED
  analogWrite(led, brightness);
}

Schritt 2 – steuern der Helligkeit einer LED mit dem Drehregler

Über den Drehregler lässt sich recht einfach die Helligkeit einer LED steuern, damit möchte ich dir gerne zeigen wie du diesen in deinem Code benutzen kannst.

Die LED muss in diesem Fall an einen der digitalen PWM Pins des Arduinos verbunden werden, diese erkennst du an der kleinen Welle vor der Beschriftung.

Programm – steuern der Helligkeit einer LED mit dem Drehregler am Arduino UNOHerunterladen
//Bibliothek zum auslesen eines Drehreglers
#include <rotary.h>

//Pin-Konfiguration
#define push 2
#define a 4
#define b 3

//LED am digitalen PWM Pin D10 angeschlossen
#define led 10

//Objektinstanz mit der Pinbelegung anlegen
Rotary rotary = Rotary(a, b, push);

int brightness = 0;

void setup() {
  //beginn der seriellen Kommunikation mit 9600 baud
  Serial.begin(9600);
  
  //Pin der LED als Ausgang definieren
  pinMode(led, OUTPUT);
}

void loop() {
  //Auslesen der aktuellen Position als Wert erhalten 
  //wir je nach Drehrichtung einen anderen Wert.
  unsigned char currentPosition = rotary.process();

  //Das Rotary Objekt verfügt über Funktionen mit
  //welcher wir die Drehrichtung einfach auslesen können.
  if (currentPosition == rotary.clockwise()) {
    //Wenn der Wert der Helligkeit kleiner als 255 ist, dann...
    if (brightness < 255)
      brightness = brightness + 1;
  } else if (currentPosition == rotary.counterClockwise()) {
    //Wenn der Wert der Helligkeit größer als 0 ist, dann...
    if (brightness > 0)
      brightness = brightness - 1;
  }

  //Wenn der Taster betätigt wird, dann wird ebenso eine Ausgabe getätigt.
  if (rotary.buttonPressedReleased(20)) {
    Serial.println("Taster gedrückt!");
  }

  //Schreiben der aktuellen Helligkeit an den Pin / der LED
  analogWrite(led, brightness);
}

Schritt 3 – Anzeigen der Helligkeit der LED auf dem Display

Im nächsten Schritt möchte ich dir zeigen, wie du den eingestellten Wert für die Helligkeit auf dem Display anzeigen lassen kannst. Dazu lagern wir die Logik in eine separate Funktion aus da wir diese bei Vorwärts-/Rückwärtsdrehungen ausführen wollen.

Das Display wird via I2C mit dem Mikrocontroller verbunden, an den analogen Pins A4 (SDA) und A5 (SCL) findest du diese Schnittstelle (oben links findest du ebenso diese beiden Pin).

Arduino UNO SCL & SDA Pins
Arduino UNO SCL & SDA Pins
Programm – Anzeigen der Helligkeit der LED auf dem OLED-DisplayHerunterladen
//Bibliothek zum auslesen eines Drehreglers
#include <rotary.h>

//Bibliotheken zum darstellen von Texten
//und geometrischen Figuren auf dem Display
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SH110X.h>

//Pin-Konfiguration
#define push 2
#define a 4
#define b 3

//LED am digitalen PWM Pin D10 angeschlossen
#define led 10

//Objektinstanz mit der Pinbelegung anlegen
Rotary rotary = Rotary(a, b, push);

#define i2c_Address 0x3c
Adafruit_SH1106G display = Adafruit_SH1106G(128, 64, &Wire, -1);

int brightness = 0;

void setup() {
  //beginn der seriellen Kommunikation mit 9600 baud
  Serial.begin(9600);

  //Pin der LED als Ausgang definieren
  pinMode(led, OUTPUT);

  //Beginn der Kommunikation mit dem Display
  display.begin(i2c_Address, true);
  //leeren des Displays
  display.clearDisplay();
}

void loop() {
  //Auslesen der aktuellen Position als Wert erhalten
  //wir je nach Drehrichtung einen anderen Wert.
  unsigned char currentPosition = rotary.process();

  //Das Rotary Objekt verfügt über Funktionen mit
  //welcher wir die Drehrichtung einfach auslesen können.
  if (currentPosition == rotary.clockwise()) {
    //Wenn der Wert der Helligkeit kleiner als 255 ist, dann...
    if (brightness < 255) {
      //erhöhen der Helligkeit um 5 Schritte
      brightness = brightness + 5;
      //Aufrufen der Funktion zum schreiben der Helligkeit auf dem Display
      displayLedBrightness();
    }

  } else if (currentPosition == rotary.counterClockwise()) {
    //Wenn der Wert der Helligkeit größer als 0 ist, dann...
    if (brightness > 0) {
      //verringern der Helligkeit um 5 Schritte
      brightness = brightness - 5;
      //Aufrufen der Funktion zum schreiben der Helligkeit auf dem Display
      displayLedBrightness();
    }
  }

  //Wenn der Taster betätigt wird, dann wird ebenso eine Ausgabe getätigt.
  if (rotary.buttonPressedReleased(20)) {
    Serial.println("Taster gedrückt!");
  }

  //Schreiben der aktuellen Helligkeit an den Pin / der LED
  analogWrite(led, brightness);
}

/**
* Funktion zum Anzeigen der aktuellen Helligkeit der LED
* auf dem Display
**/
void displayLedBrightness() {
  //aktuelle Anzeige löschen
  display.clearDisplay();
  //setzen der Textfarbe auf Weiß
  display.setTextColor(SH110X_WHITE);
  //setzen der Textgröße auf 3
  display.setTextSize(3);
  //setzen der Cursorposition
  display.setCursor(50, 15);
  //schreiben der Helligkeit an die Cursorposition
  display.println(String(brightness, DEC));
  //absenden der Daten und schreiben auf dem Display
  display.display();
}

Schreibe einen Kommentar Antworten abbrechen

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

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}