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
/*********************************************************************
This is an example for our monochrome OLEDs based on SSD1306 drivers.
This example is for a 128x32 size display using I2C.
If you get the error: Adafruit_GFX.h not found, download the Adafruit-GFX Library
https://github.com/adafruit/Adafruit-GFX-Library
Purchase this OLED module from Amazon: https://amzn.to/36zFvTb
Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, check license.txt for more information.
All text above, and the splash screen must be included in any redistribution.
* Watch the video for this code to learn it fully.
* Watch the video here: https://youtu.be/RjyulqVsz2o
* This code is offered "as is" without any warranty.
* Updated by Ahmad Shamshiri for Robojax.com video tutorial
* on March 18, 2018 at 10:21 in Ajax, Ontario, Canada.
* Please view other Robojax codes and videos at http://robojax.com/learn/arduino
* If you are sharing this code, you must keep this copyright note.
*
*********************************************************************/
#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 connection:
* Pin connection see: https://www.arduino.cc/en/Reference/Wire
* for UNO: SDA to A4, SCL to A5
* for Mega2560: SDA to 20, SCL to 21
* for Leonardo: SDA to 2, SCL to 3
* for Due: SDA to 20, SCL to 21
* VCC to 5V
* GND to GND :-)
*/
// this is the Width and Height of Display which is 128 x 32
#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);
// by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x32)
display.display();
delay(2000);
// Clear the buffer.
display.clearDisplay();
}
void loop() {
String vString = String(count, 3);// using a float and the
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, WHITE);
display.drawRect(1, 1, 126,31, WHITE);
//display.drawCircle(63,31, 31, WHITE);
//display.startscrollright(0x00, 0x0F);
display.display();
count +=0.173;
delay(2000);
}
/*
* robojaxText(String text, int x, int y,int size, boolean d)
* text is the text string to be printed
* x is the integer x position of text
* y is the integer y position of text
* size is the text size, 1, 2, 3 etc
* d is either true or false. If true, the display is updated.
*/
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();
}
//delay(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.