Arduino-Code und Video für das SSD1306 OLED 128 x 32 Display mit I2C
In diesem Tutorial zeigen wir, wie man das SSD1306 OLED-Display 128 x 32 mit I2C-Kommunikation an einem Arduino verwendet. Ziel ist es, verschiedene Elemente wie Text, Rechtecke und dynamische Werte wie Spannung und Temperatur auf dem Display anzuzeigen. Diese Konfiguration eignet sich ideal für Projekte, die eine kompakte und effiziente Displaylösung benötigen.

Wir führen Sie durch die notwendigen Hardwarekomponenten, die Verdrahtungsanleitungen und den Arduino-Code, damit alles funktioniert. Für eine visuelle Anleitung sollten Sie sich unbedingt das dem Tutorial beigefügte Video ansehen (im Video bei 00:00).
Hardware erklärt
Zu den wichtigsten Komponenten dieses Projekts gehört das SSD1306-OLED-Display, ein stromsparendes Display, das I2C-Kommunikation für eine einfache Anbindung verwendet. Das Display bietet eine Auflösung von 128 x 32 Pixeln, wodurch es sich zum Anzeigen von Text und einfachen Grafiken eignet.
Um das Display zu steuern, werden wir das Arduino-Board verwenden, das Befehle und Daten über I2C sendet. Das Arduino übernimmt die Logik zur Anzeige der Informationen, indem es Bibliotheken wieAdafruit_GFXundAdafruit_SSD1306. Diese Bibliotheken vereinfachen die Kommunikation und erleichtern das Zeichnen von Formen und Text.
Details zum Datenblatt
| Hersteller | Adafruit |
|---|---|
| Teilenummer | SSD1306 |
| Logik-/I/O-Spannung | 3.3 - 5 V |
| Versorgungsspannung | 3,3–5 V |
| Aktueller Verbrauch | ~20 mA (typ.) |
| Bildschirmauflösung | 128 × 32 Pixel |
| Schnittstelle | I2C |
| Abmessungen | 128 x 32 mm |
| Notizen / Varianten | Erhältlich in verschiedenen Größen und Schnittstellen |
- Überprüfen Sie die I2C-Adresse, typischerweise 0x3C für OLEDs.
- Stellen Sie eine ordnungsgemäße Stromversorgung sicher, um Schäden zu vermeiden.
- Verwenden Sie Pull-up-Widerstände für die SDA- und SCL-Leitungen, falls erforderlich.
- Halten Sie die Leitungen kurz, um das Rauschen im I2C-Signal zu reduzieren.
- Berücksichtigen Sie die Wärmeabfuhr, wenn Sie mehrere Module mit Strom versorgen.
Verdrahtungsanleitung

Um das SSD1306-OLED-Display zu verkabeln, verbinden Sie zunächst den VCC-Pin des Displays mit dem 5V-Ausgang des Arduino. Verbinden Sie als Nächstes den GND-Pin mit einem der Massepins des Arduino. Für die I2C-Kommunikation verbinden Sie den SDA-Pin des Displays mit dem SDA-Pin am Arduino, der beim UNO A4 ist. Verbinden Sie dann den SCL-Pin des Displays mit dem SCL-Pin am Arduino, der beim UNO A5 ist. Wenn Sie ein anderes Arduino-Modell verwenden, konsultieren Sie die spezifische Pinbelegung für SDA und SCL.
Für zusätzliche Komponenten: Wenn Sie eine LED haben, die Sie steuern möchten, verbinden Sie sie über einen 330-Ohm-Widerstand mit Pin 9. Stellen Sie sicher, dass das andere Ende des Widerstands mit der Anode der LED verbunden ist, während die Kathode an Masse (GND) angeschlossen werden sollte. Diese Anordnung ermöglicht, dass die LED aufleuchtet, wenn Pin 9 aktiviert wird.
Codebeispiele & Schritt-für-Schritt-Anleitung
Im Arduino-Code beginnen wir damit, die notwendigen Bibliotheken für das OLED-Display einzubinden. Ein wichtiger Bezeichner istdisplay, das eine Instanz vonAdafruit_SSD1306Klasse. Das Display wird in der initialisiertsetup()Funktion, in der wir das Display ebenfalls löschen, um es zum Zeichnen vorzubereiten.

void setup() {
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.display();
delay(2000);
display.clearDisplay();
}In demloop()Funktion, wir definieren eine String-VariablevStringum den Spannungswert zu speichern, der dynamisch aktualisiert wird. DerrobojaxText()Die Funktion wird verwendet, um Text auf dem Bildschirm an angegebenen Koordinaten anzuzeigen.
void loop() {
String vString = String(count, 3);
display.clearDisplay();
robojaxText("Voltage: ", 4, 3, 1, false);
robojaxText(vString, 72, 3, 1, false);
display.display();
count += 0.173;
delay(2000);
}DerrobojaxText()Die Funktion ist entscheidend für die Positionierung und Anzeige von Text. Sie nimmt Parameter für die Textzeichenfolge, die x- und y-Koordinaten, die Textgröße und einen booleschen Wert entgegen, der bestimmt, ob die Anzeige sofort aktualisiert werden soll.
void robojaxText(String text, int x, int y, int size, boolean d) {
display.setTextSize(size);
display.setTextColor(WHITE);
display.setCursor(x, y);
display.println(text);
if(d) {
display.display();
}
}Diese Funktion legt die Textgröße, die Farbe und die Cursorposition fest, bevor der Text ausgegeben wird. Denken Sie daran, das Video anzusehen, um eine vollständige Durchsicht des Codes zu erhalten (im Video bei 10:00).
Vorführung / Was Sie erwartet
Wenn der Code auf das Arduino hochgeladen ist, sollte das OLED-Display die Spannungs-, Temperatur- und Kapazitätswerte anzeigen, die sich alle zwei Sekunden dynamisch aktualisieren. Sie sollten außerdem ein Rechteck um die Textelemente gezeichnet sehen. Wenn das Display nichts anzeigt, stellen Sie sicher, dass die Verbindungen korrekt sind und die I2C-Adresse mit der im Code angegebenen übereinstimmt.
Video-Zeitstempel
- 00:00- Einführung in das Projekt
- 02:00- Verdrahtungsanleitung
- 05:00- Code-Durchgang
- 10:00- Demonstration der Ausgabe
/*
* Dies ist ein Beispiel für unsere monchrome OLEDs, die auf SSD1306-Treibern basieren.
*
* Dieses Beispiel ist für ein Display der Größe 128x32, das I2C verwendet.
*
* Wenn Sie den Fehler erhalten: Adafruit_GFX.h nicht gefunden, laden Sie die Adafruit-GFX-Bibliothek herunter
* https://github.com/adafruit/Adafruit-GFX-Library
*
* Kaufen Sie dieses OLED-Modul bei Amazon: https://amzn.to/36zFvTb
*
* Geschrieben von Limor Fried/Ladyada für Adafruit Industries.
* BSD-Lizenz, überprüfen Sie die license.txt für weitere Informationen.
* Alle oben genannten Texte und der Startbildschirm müssen bei jeder Weiterverbreitung enthalten sein.
*
* Sehen Sie sich das Video zu diesem Code an, um ihn vollständig zu lernen.
* Sehen Sie sich das Video hier an: https://youtu.be/RjyulqVsz2o
* Dieser Code wird „wie er ist“ ohne jegliche Garantie angeboten.
* Aktualisiert von Ahmad Shamshiri für das Robojax.com-Video-Tutorial
* am 18. März 2018 um 10:21 in Ajax, Ontario, Kanada.
* Bitte sehen Sie sich andere Robojax-Codes und -Videos unter http://robojax.com/learn/arduino an.
* Wenn Sie diesen Code teilen, müssen Sie diesen Urheberrechtshinweis beibehalten.
*/
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2
double count=0;
/*
* PIN-Verbindung:
* PIN-Verbindung siehe: https://www.arduino.cc/en/Reference/Wire
* für UNO: SDA an A4, SCL an A5
* für Mega2560: SDA an 20, SCL an 21
* für Leonardo: SDA an 2, SCL an 3
* für Due: SDA an 20, SCL an 21
* VCC an 5V
* GND an GND :-)
*/
// dies ist die Breite und Höhe des Displays, die 128 x 32 beträgt
#define LOGO16_GLCD_HEIGHT 32
#define LOGO16_GLCD_WIDTH 128
#if (SSD1306_LCDHEIGHT != 32)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
void setup() {
Serial.begin(9600);
// Standardmäßig erzeugen wir die Hochspannung intern aus der 3,3 V-Leitung! (cool!)
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialisieren mit der I2C-Adresse 0x3C (für das 128x32)
display.display();
delay(2000);
// Löschen Sie den Puffer.
display.clearDisplay();
}
void loop() {
String vString = String(count, 3); // ein Float verwenden und die
display.clearDisplay();
robojaxText("Voltage: ", 4, 3, 1, false);
robojaxText(vString, 72, 3, 1, false);
robojaxText("V", 110, 3, 1, false);
robojaxText("Temperature: 32C", 4, 11, 1, false);
robojaxText("Capacity: 92.86L", 4, 21, 1, false);
// display.drawLine(1, 37, 100, 37, WEISS);
display.drawRect(1, 1, 126,31, WHITE);
// display.drawCircle(63,31, 31, WEISS);
// display.startscrollright(0x00, 0x0F);
display.display();
count +=0.173;
delay(2000);
}
/*
* robojaxText(String text, int x, int y, int size, boolean d)
* text ist der Textstring, der gedruckt werden soll
* x ist die ganzzahlige x-Position des Texts
* y ist die ganzzahlige y-Position des Texts
* size ist die Textgröße, 1, 2, 3 usw.
* d ist entweder wahr oder falsch. Wenn wahr, wird die Anzeige aktualisiert.
*/
void robojaxText(String text, int x, int y,int size, boolean d) {
display.setTextSize(size);
display.setTextColor(WHITE);
display.setCursor(x,y);
display.println(text);
if(d){
display.display();
}
// Verzögerung(100);
}
Dinge, die Sie vielleicht brauchen
-
AmazonOLED 128x32 bei Amazon kaufenamzn.to
-
AliExpressKaufen Sie SSD1306 OLED 128x32 bei AliExpresss.click.aliexpress.com
Ressourcen & Referenzen
-
ExternAdafruit-GFX-Bibliothek (von GitHub)github.com
-
ExternSSD1306-Bibliothek (von GitHub)github.com
Dateien📁
Keine Dateien verfügbar.