Du kennst das: Kleine I²C-Schaltung mit dem betagten, aber zuverlässigen Arduino Nano V3 aufgebaut – läuft. Also schnell auf den neuen Arduino Nano R4 portiert… und plötzlich findet der I2C-Scanner weder OLED noch irgendeine Adresse. Genau das ist mir passiert. Nach kurzem Vergleich mit UNO R4 / Minima war klar: Für eine saubere I²C-Kommunikation brauchen die R4-Boards externe Pull-Up-Widerstände an SDA und SCL. Der Fix ist simpel: je 1× 4,7 kΩ von VCC nach SDA und von VCC nach SCL (siehe Grafik gleich unten).
Mit diesen zwei Widerständen tauchte das Display sofort im Scanner auf – Projekt gerettet.
Inhaltsverzeichnis
- Ein Beispiel zum nachbauen
- I²C-Scanner: Angeschlossene Geräte finden
- Abschluss: Minimaler OLED-Demo-Sketch (SH1106, I²C)
Ein Beispiel zum nachbauen
Damit du den Effekt direkt selbst nachstellen kannst, habe ich ein superkleines Setup gewählt. Es zeigt genau das Problem (I²C-Gerät wird nicht gefunden) – und die Lösung mit zwei Pull-Up-Widerständen. Ideal zum schnellen Mitbauen auf dem Breadboard und perfekt für erste Tests mit dem Arduino Nano R4.
Bauteile:
- Arduino Nano R4*
- 1,3″ OLED-Display* (I²C)
- 2× 4,7 kΩ Widerstände* (Pull-Ups)
- 4× Breadboard-/Jumperkabel* (m-m, ca. 10 cm)
- 400-Pin Breadboard*
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!

Schaltung – Arduino Nano R4 mit OLED Display über I2C
Die Verbindung erfolgt klassisch über I²C: SDA und SCL vom Nano R4 gehen an das OLED-Modul, zusätzlich ziehen zwei 4,7 kΩ Widerstände die Leitungen SDA → VCC und SCL → VCC auf HIGH. Genau diese Pull-Ups sorgen dafür, dass das Display zuverlässig erkannt wird. In der folgenden Fritzing-Grafik siehst du die Verdrahtung auf dem Breadboard Schritt für Schritt – inklusive der beiden Widerstände. Achte darauf, die Versorgungsspannung des OLEDs passend zu wählen und die Pull-Ups an dieselbe Spannung zu hängen.

I²C-Scanner: Angeschlossene Geräte finden
Bevor wir das OLED Display programmieren, nutze den I²C-Scanner vom Arduino Playground. Lade den Sketch auf den Nano R4, öffne den seriellen Monitor und prüfe, ob Geräteadressen wie 0x3C
auftauchen. Erscheint „No I2C devices found“, stimmt meist die Verdrahtung nicht oder die Pull-Up-Widerstände (2× 4,7 kΩ an SDA/SCL → VCC) fehlen. Hinweis: Beim Arduino Nano (und UNO) liegen SDA = A4 und SCL = A5.

Abschluss: Minimaler OLED-Demo-Sketch (SH1106, I²C)
Zum Schluss noch ein kompaktes Beispiel, das auf dem 1,3″ OLED (128×64, SH1106) eine Textausgabe zeigt.

Installiere vorher die Libraries Adafruit GFX und Adafruit SH110X über den Bibliotheksverwalter. Die I²C-Adresse ist meist 0x3C (per Scanner prüfen).


#include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SH110X.h> // I2C-Adresse (per Scanner prüfen, meist 0x3C) #define I2C_ADDRESS 0x3C // SH1106 128x64 via I2C Adafruit_SH1106G display(128, 64, &Wire, -1); int counter = 0; void setup() { Serial.begin(115200); // Serielle Ausgabe (Baudrate im Monitor anpassen) delay(100); Wire.begin(); // Nano-Formfaktor: SDA=A4, SCL=A5 Wire.setClock(100000); // 100 kHz, bei Bedarf 400000 display.begin(I2C_ADDRESS, true); display.clearDisplay(); } void loop() { display.clearDisplay(); // Kopfzeile display.setTextColor(SH110X_WHITE); display.setTextSize(1); display.setCursor(18, 0); display.println(F("Arduino Nano R4")); display.setCursor(28, 13); display.println(F("I2C Beispiel")); // Footer display.setCursor(19, 55); display.println(F("draeger-it.blog")); // --- 3-stellige Ausgabe mit if-Kaskade (gut lesbar) --- display.setTextSize(2); display.setCursor(47, 30); String strCounter = String(counter++); // erst in String umwandeln, dann erhöhen if (counter > 999) { // nach 999 wieder bei 0 starten counter = 0; } if (counter < 10) { // 0..9 -> "00x" strCounter = "00" + strCounter; } else if (counter < 100) { // 10..99 -> "0xx" strCounter = "0" + strCounter; } // 100..999 -> "xxx" (unverändert) display.println(strCounter); // ------------------------------------------------------ display.display(); delay(125); }