Grundlagen · 9 Min. Lesezeit

Pegelwandler 3,3 V auf 5 V: ESP32 und Arduino sicher verbinden

Pegelwandler erklärt: warum ESP32- und Pico-Pins keine 5 V vertragen, VIH/VIL, Spannungsteiler, BSS138 für I2C, 74HCT-Chips und eine Tabelle für Module.

Ein Pegelwandler (Logic Level Converter) ist eine kleine Schaltung, mit der ein 3,3-V-Board (ESP32, Raspberry Pi Pico, ESP8266) sicher mit einem 5-V-Board oder -Modul (Arduino Uno, I2C-LCD, HC-SR04, WS2812B) kommuniziert. Einen 5-V-Ausgang direkt an einen 3,3-V-Pin zu legen, kann den Pin schleichend oder sofort zerstören; in die andere Richtung wird ein 3,3-V-Signal von einem 5-V-Eingang manchmal nicht einmal als "1" erkannt. Wer weiß, wann ein Pegelwandler nötig ist und welcher genügt, beseitigt die rätselhaften Fehler in der Hälfte aller Projekte mit gemischten Spannungen.

In diesem Artikel siehst du zuerst, was die Schwellen VIH und VIL bedeuten und warum die Pins von ESP32 und Pico keine 5 V vertragen. Danach gehen wir drei Lösungen mit Beispielen durch: die Einweg-Wandlung mit einem Spannungsteiler aus zwei Widerständen, den bidirektionalen BSS138-MOSFET-Wandler für I2C und 74HCT-Chips für schnelle Signale wie WS2812B oder SPI. Am Ende findest du eine Tabelle, welche Module direkt mit 3,3 V laufen, und eine Liste häufiger Fehler.

ESP32-Entwicklungsboard
Alle GPIO-Pins des ESP32 arbeiten mit 3,3-V-Logik; ein 5-V-Signal ist für sie nicht sicher.

Was sind 3,3-V- und 5-V-Logikpegel?

Ein Digitalpin kennt nur 0 und 1, in der echten Welt kann die Spannung aber jeden Wert zwischen 0 und der Versorgung annehmen. Deshalb nennt jedes Datenblatt vier Schwellen. VIH (Eingang HIGH) ist die niedrigste Spannung, die der Eingang sicher als 1 liest. VIL (Eingang LOW) ist die höchste Spannung, die sicher als 0 gilt. Dazwischen liegt ein undefinierter Bereich, in dem der Chip 0 oder 1 lesen kann. Auf der Ausgangsseite ist VOH die niedrigste Spannung, die der Pin bei HIGH garantiert, und VOL die höchste, die er bei LOW garantiert. Damit zwei Chips zuverlässig kommunizieren, muss VOH des Senders sicher über VIH des Empfängers und VOL des Senders sicher unter VIL des Empfängers liegen. Wie Gatter mit diesen Schwellen entscheiden, zeigt der Artikel Logikgatter, ausprobieren kannst du es im Logikgatter-Werkzeug.

Chip (Versorgung)VIL (max.)VIH (min.)VOL (max.)VOH (min.)Pin höchstens
ATmega328P, Arduino Uno (5 V)1,5 V (0,3 × VCC)3,0 V (0,6 × VCC)0,9 V4,2 V5,5 V
ESP32 (3,3 V)0,83 V (0,25 × VDD)2,48 V (0,75 × VDD)0,33 V2,64 V3,6 V
RP2040, Raspberry Pi Pico (3,3 V)0,8 V2,0 V0,5 VEtwa 2,6 V3,8 V
74HC-Serie (5 V)1,5 V3,5 V0,1 V4,4 V5,5 V
74HCT-Serie (5 V)0,8 V2,0 V0,1 V4,4 V5,5 V

Aus der Tabelle folgen drei wichtige Punkte. Erstens überschreitet der HIGH-Ausgang eines 5-V-Uno (4,2–5 V) klar die Grenze von 3,6 V beim ESP32 und 3,8 V beim Pico; in dieser Richtung ist eine Wandlung Pflicht. Zweitens schafft der 3,3-V-HIGH-Ausgang des ESP32 meist die VIH-Schwelle des Uno von 3,0 V, garantiert sind laut Datenblatt aber nur 2,64 V; die Verbindung funktioniert also oft, wird mit längeren Leitungen oder belastetem Pin aber knapp. Drittens werten ein mit 5 V versorgter 74HC-Chip, ein I2C-Expander mit 0,7 × VCC-Schwelle wie der PCF8574 oder eine WS2812B-LED nichts unter 3,5 V sicher als HIGH; für sie reicht ein 3,3-V-Signal wirklich nicht. Die 74HCT-Serie hat dagegen eine VIH von 2,0 V und ist deshalb einer der saubersten Wege, 3,3 V auf 5 V umzusetzen.

Warum vertragen die Pins von ESP32 und Pico keine 5 V?

Jeder Eingangspin eines 3,3-V-Chips hat kleine Schutzdioden, die den Pin mit der 3,3-V-Schiene und mit GND verbinden. Sie sollen sehr kurze Impulse wie elektrostatische Entladungen abfangen, keinen Dauerstrom. Legst du 5 V an den Pin, leitet die obere Diode und es fließt Strom aus der 5-V-Quelle in die 3,3-V-Schiene. Ist der Innenwiderstand der Quelle klein, sind das Dutzende Milliampere, die Diode und Umgebung des Pins durch Erhitzen zerstören. Ist der Strom kleiner, stirbt der Pin nicht sofort, der Chip altert aber, und die 3,3-V-Schiene kann sogar so weit angehoben werden, dass sich das Board über den Pin versorgt: Du ziehst das Stromkabel ab, und die LED des ESP32 glimmt weiter. Das Datenblatt des ESP32 nennt als Grenze für die Pins Versorgung + 0,3 V (etwa 3,6 V), das des RP2040 Versorgung + 0,5 V (etwa 3,8 V). "Hab's einmal probiert, ist nicht kaputtgegangen" heißt nicht, dass der Pin 5-V-tolerant ist.

Die digitalen Pins des RP2350 auf dem Raspberry Pi Pico 2 sind bei eingeschaltetem Board 5-V-tolerant ausgelegt; die Analogeingänge (GP26–GP29) gehören nicht dazu, und die Pins geben trotzdem nur 3,3 V aus. 5 V an den Pins eines ausgeschalteten Boards sind in jedem Fall riskant. Beim ersten Pico (RP2040), beim ESP32 und beim ESP8266 ist kein einziger Pin 5-V-tolerant.

Was brauchst du in welchem Fall?

FallBeispielLösung
5-V-Ausgang → 3,3-V-EingangUno TX → ESP32 RX, HC-SR04 ECHO → PicoSpannungsteiler (langsame Signale) oder 74LVC-Puffer (schnelle Signale)
3,3-V-Ausgang → 5-V-Eingang (VIH um 3 V)ESP32 TX → Uno RXKlappt oft direkt; mit 74HCT auf der sicheren Seite
3,3-V-Ausgang → 5-V-Eingang (VIH 3,5 V)ESP32 → WS2812B, 5-V-74HC-ChipEin Puffer wie 74HCT125 / 74AHCT125
Bidirektionale Open-Drain-LeitungI2C (SDA, SCL), 1-WireBSS138-MOSFET-Wandler
Bidirektionale schnelle Push-Pull-LeitungParalleler Datenbus74LVC245 mit Richtungspin oder TXS0108E

Einweg-Wandlung mit Spannungsteiler (5 V → 3,3 V)

Am einfachsten bringst du einen 5-V-Ausgang mit zwei Widerständen an einen 3,3-V-Eingang. Das Signal kommt über den oberen Widerstand R1, der Mittelpunkt geht an den 3,3-V-Pin, der untere Widerstand R2 an GND. Am Ausgang liegt Vaus = 5 V × R2 / (R1 + R2); ist R2 doppelt so groß wie R1, werden aus 5 V 3,33 V. Ein Teiler arbeitet nur in eine Richtung, von der höheren zur niedrigeren Spannung, und taugt nicht für bidirektionale Leitungen, auf denen die 3,3-V-Seite antworten muss. Auch die Geschwindigkeit ist begrenzt, weil der Ausgangswiderstand des Teilers mit der Pinkapazität einen kleinen RC-Tiefpass bildet und die Flanken abrundet. Werte findest du mit dem Spannungsteiler-Rechner, die ausführliche Erklärung im Artikel zum Spannungsteiler.

R1 (Signalseite)R2 (GND-Seite)Ausgang bei 5 VAusgangswiderstandGeeignet für
1 kΩ2 kΩ (zwei 1 kΩ in Reihe)3,33 V667 ΩDie meisten Aufgaben, auch schnelle Signale; zieht bei HIGH 1,7 mA
2,2 kΩ3,3 kΩ3,00 V1,3 kΩGrößte Sicherheitsreserve; UART, HC-SR04 ECHO
10 kΩ20 kΩ3,33 V6,7 kΩWenig Strom; UART bis 115200 Baud und langsame Signale
4,7 kΩ10 kΩ3,40 V3,2 kΩGrenzwertig; bei 5,25 V auf der 5-V-Schiene werden es 3,57 V, nicht empfohlen

Beispiel: UART zwischen Arduino Uno und ESP32

In Projekten, in denen der Uno die Sensoren liest und der ESP32 die Daten per WLAN ins Internet bringt, sprechen beide Boards über UART. Da die TX-Leitung des Uno 5 V liefert, geht sie über einen Teiler aus 1 kΩ + 2 kΩ an den RX-Pin des ESP32. Die 3,3-V-TX-Leitung des ESP32 darf direkt an den RX-Pin des Uno, denn der Uno wertet alles über 3,0 V als HIGH. Damit die USB-Schnittstelle des Uno (D0, D1) für den Computer frei bleibt, nutzt der Uno SoftwareSerial auf D10 und D11; beim ESP32 läuft die zweite Hardware-Schnittstelle Serial2 auf GPIO 16 (RX) und 17 (TX). Die GNDs beider Boards müssen verbunden sein.

C++ (Arduino IDE)
1// Arduino Uno: SoftwareSerial ile ESP32'ye veri gönder / send data to the ESP32 with SoftwareSerial
2// Uno D11 (TX, 5 V) -> 1k -> ESP32 GPIO 16 ; GPIO 16 -> 2k -> GND
3// ESP32 GPIO 17 (TX, 3,3 V) -> Uno D10 (RX) doğrudan / directly ; GND <-> GND
4#include <SoftwareSerial.h>
5
6SoftwareSerial link(10, 11);   // RX, TX
7
8void setup() {
9  Serial.begin(9600);          // bilgisayar / computer
10  link.begin(9600);            // ESP32 hattı / ESP32 line
11}
12
13void loop() {
14  int raw = analogRead(A0);
15  link.print(F("A0="));
16  link.println(raw);           // ör. / e.g. "A0=512"
17
18  unsigned long start = millis();
19  while (millis() - start < 1000) {          // 1 sn cevap bekle / wait 1 s for a reply
20    if (link.available()) {
21      String reply = link.readStringUntil('\n');
22      Serial.print(F("ESP32: "));
23      Serial.println(reply);
24    }
25  }
26}
C++ (Arduino IDE)
1// ESP32: Serial2 ile Uno'dan gelen satırları oku ve cevap ver / read lines from the Uno on Serial2 and reply
2const int RX2_PIN = 16;        // bölücünün orta noktası / divider midpoint
3const int TX2_PIN = 17;        // Uno D10'a doğrudan / straight to Uno D10
4
5void setup() {
6  Serial.begin(115200);
7  Serial2.begin(9600, SERIAL_8N1, RX2_PIN, TX2_PIN);
8}
9
10void loop() {
11  if (Serial2.available()) {
12    String line = Serial2.readStringUntil('\n');
13    line.trim();
14    Serial.print("Uno: ");
15    Serial.println(line);
16    Serial2.print("OK ");      // 3,3 V çıkış Uno için yeterli / 3.3 V output is enough for the Uno
17    Serial2.println(line.length());
18  }
19}

Miss vor dem Hochladen den Mittelpunkt des Teilers mit dem Multimeter: Läuft der Uno und sendet nichts, solltest du etwa 3,3 V sehen, weil eine UART-Leitung im Ruhezustand HIGH ist. Erscheint im seriellen Monitor des Uno jede Sekunde eine Zeile wie "ESP32: OK 6", funktioniert die Verbindung in beide Richtungen. Bei 9600 Baud dauert ein Bit 104 µs, die Verzögerung durch den 1-kΩ-+-2-kΩ-Teiler liegt dagegen im Nanosekundenbereich; die Geschwindigkeit ist also kein Thema.

Beispiel: HC-SR04 am Raspberry Pi Pico

HC-SR04-Ultraschallsensor
Der HC-SR04 läuft mit 5 V und gibt am ECHO-Pin einen 5-V-Impuls aus; an 3,3-V-Boards gehört er über einen Teiler.

Der HC-SR04 arbeitet nur mit 5 V zuverlässig. Versorgst du den Pico per USB, schließt du VCC des Sensors an VBUS des Pico (Pin 40) an. Der TRIG-Eingang erkennt den 3,3-V-Impuls des Pico problemlos und geht direkt an GP15. ECHO liefert dagegen einen 5-V-Impuls; zwischen ECHO und GP14 kommt ein 1-kΩ-Widerstand, zwischen GP14 und GND ein 2-kΩ-Widerstand. Der Code misst die Länge des ECHO-Impulses mit time_pulse_us in Mikrosekunden und rechnet sie über die Schallgeschwindigkeit in Luft (etwa 343 m/s) in eine Entfernung um.

MicroPython
1# Raspberry Pi Pico + HC-SR04 (ECHO bölücüyle) / Raspberry Pi Pico + HC-SR04 (ECHO through a divider)
2# VCC -> VBUS (pin 40), GND -> GND, TRIG -> GP15, ECHO -> 1k -> GP14 -> 2k -> GND
3from machine import Pin, time_pulse_us
4import time
5
6trig = Pin(15, Pin.OUT)
7echo = Pin(14, Pin.IN)
8
9
10def distance_cm():
11    trig.value(0)
12    time.sleep_us(2)
13    trig.value(1)                      # 10 µs tetik darbesi / 10 µs trigger pulse
14    time.sleep_us(10)
15    trig.value(0)
16    t = time_pulse_us(echo, 1, 30000)  # en fazla 30 ms bekle / wait at most 30 ms
17    if t < 0:
18        return None                    # yankı yok / no echo
19    return t * 0.0343 / 2              # gidiş-dönüş / round trip
20
21
22while True:
23    d = distance_cm()
24    if d is None:
25        print("Olcum yok / No echo")
26    else:
27        print("Mesafe / Distance: {:.1f} cm".format(d))
28    time.sleep(0.5)

Der bidirektionale BSS138-Pegelwandler

Die meisten kleinen Platinen, die als "4-Kanal-Pegelwandler" verkauft werden, haben pro Kanal einen N-Kanal-MOSFET BSS138 und zwei 10-kΩ-Pull-up-Widerstände. Die Schaltung ist denkbar einfach: Das Gate des MOSFET liegt an 3,3 V (LV), Source geht an die Niederspannungsseite, Drain an die Hochspannungsseite. Jede Seite zieht die Leitung über ihren eigenen Pull-up auf ihre Versorgung. Dieser Aufbau ist für Open-Drain-Leitungen wie I2C gedacht, die die Leitung nur auf 0 ziehen und den Pegel 1 den Pull-ups überlassen, und er arbeitet von selbst in beide Richtungen; einen Richtungspin, der angibt, welche Seite spricht, gibt es nicht.

  1. Beide Seiten im Ruhezustand: Gate und Source liegen beide an 3,3 V, zwischen ihnen ist keine Spannung, der MOSFET sperrt. Jede Seite wird über ihren eigenen Widerstand auf HIGH gezogen: LV auf 3,3 V, HV auf 5 V.
  2. Die 3,3-V-Seite zieht auf LOW: Source fällt auf 0 V; da das Gate auf 3,3 V bleibt, beträgt die Gate-Source-Spannung 3,3 V und der MOSFET leitet. Die HV-Seite wird über den MOSFET auf LOW gezogen.
  3. Die 5-V-Seite zieht auf LOW: Die Body-Diode im MOSFET leitet und zieht Source auf etwa 0,7 V. Erreicht die Gate-Source-Spannung etwa 2,6 V, schaltet der MOSFET voll durch, und auch die LV-Seite geht ganz auf LOW.
ModulpinAnschließen anHinweis
LV3V3-Pin des 3,3-V-BoardsVersorgung der Niederspannungsseite und Gate-Spannung der MOSFETs
HV5-V-Quelle (Uno 5V oder ESP32 VIN)Pull-up-Versorgung der Hochspannungsseite
GND (zwei)GND beider BoardsGemeinsame Masse ist Pflicht
LV1–LV4Pins von ESP32 oder PicoSignale der 3,3-V-Seite
HV1–HV4Pins des 5-V-ModulsGehört jeweils zum LV-Pin mit derselben Nummer
Die Geschwindigkeit einer BSS138-Platine bestimmen ihre 10-kΩ-Pull-ups: I2C mit 100 und 400 kHz und UART mit 115200 Baud laufen problemlos, für WS2812B-Daten mit 800 kHz oder SPI mit mehreren MHz sind die Flanken aber zu langsam. Automatische 8-Kanal-Wandler wie der TXS0108E sind bei Push-Pull-Signalen schneller; sie funktionieren auch mit I2C, können aber bei starken Pull-ups auf der Leitung und langen Kabeln instabil werden. Der TXB0108 aus derselben Familie eignet sich gar nicht für I2C.

Beispiel: ESP32 an einem 5-V-I2C-LCD

16x2-Zeichen-LCDs liefern ohne 5-V-Versorgung zu wenig Kontrast, und das PCF8574-I2C-Modul auf ihrer Rückseite zieht SDA und SCL mit 4,7-kΩ-Widerständen auf 5 V. Dazu kommt, dass der PCF8574 eine VIH-Schwelle von 0,7 × VCC hat, also 3,5 V bei 5 V; die 3,3 V des ESP32 liegen darunter. Ein BSS138-Wandler zwischen I2C-LCD und ESP32 schützt deshalb die Pins und macht die Kommunikation zuverlässig. So wird verdrahtet: 3V3 des ESP32 an LV, VIN (5 V vom USB) an HV und an VCC des LCD, alle GNDs verbunden; GPIO 21 an LV1, HV1 an SDA des LCD; GPIO 22 an LV2, HV2 an SCL des LCD. Findet der Scanner-Code unten das LCD (meist unter 0x27 oder 0x3F), arbeitet der Wandler richtig.

C++ (Arduino IDE)
1// ESP32 I2C tarayıcı: BSS138 dönüştürücü üzerinden 5 V'luk cihazları bul
2// ESP32 I2C scanner: find 5 V devices through a BSS138 converter
3// GPIO 21 -> LV1 / HV1 -> SDA ; GPIO 22 -> LV2 / HV2 -> SCL ; 3V3 -> LV ; VIN (5 V) -> HV
4#include <Wire.h>
5
6const int SDA_PIN = 21;
7const int SCL_PIN = 22;
8
9void setup() {
10  Serial.begin(115200);
11  Wire.begin(SDA_PIN, SCL_PIN);
12  Wire.setClock(100000);       // 100 kHz, BSS138 için rahat hız / comfortable speed for the BSS138
13}
14
15void loop() {
16  int found = 0;
17  for (byte addr = 1; addr < 127; addr++) {
18    Wire.beginTransmission(addr);
19    if (Wire.endTransmission() == 0) {      // 0 = ACK, cihaz var / device present
20      Serial.printf("Cihaz / Device: 0x%02X\n", addr);
21      found++;
22    }
23  }
24  if (found == 0) Serial.println("Cihaz yok / No device found");
25  Serial.println("---");
26  delay(3000);
27}

74HCT-Chips: schnelle Einweg-Signale

Sind Teiler und BSS138 zu langsam, ist ein Pufferbaustein die professionelle Lösung. Die 74HCT-Serie wird mit 5 V versorgt, hat aber TTL-kompatible Eingangsschwellen (VIH = 2,0 V); sie erkennt das 3,3-V-Signal von ESP32 oder Pico also sicher als HIGH und gibt ein volles 5-V-Signal mit steilen Flanken aus. Am häufigsten wird das für die Datenleitung von WS2812B-Streifen genutzt: Der ESP32-Pin geht an den Eingang eines 74AHCT125, dessen Ausgang über 330 Ω an DIN des Streifens; der OE-Pin (Freigabe) des 74AHCT125 liegt an GND. Für die Gegenrichtung, also ein schnelles 5-V-Signal auf 3,3 V, nimmt man einen mit 3,3 V versorgten 74LVC125 oder 74LVC245; deren Eingänge vertragen unabhängig von der eigenen Versorgung bis 5,5 V.

LösungVersorgungRichtungKanäleTypische Aufgabe
74AHCT125 / 74HCT1255 V3,3 V → 5 V4WS2812B-Daten, SPI, MAX7219
74HCT2455 V3,3 V → 5 V8Paralleler Datenbus, viele Ausgänge
74LVC125 / 74LVC2453,3 V5 V → 3,3 V4 / 8Schnelle 5-V-Sensorausgänge, SD-Kartenmodule
BSS138-Modul3,3 V und 5 VBidirektional4I2C, 1-Wire, langsamer UART
SpannungsteilerKeine5 V → 3,3 V1UART RX, HC-SR04 ECHO, Taster

Welche Module laufen direkt mit 3,3 V?

Die folgende Tabelle fasst zusammen, ob die in ESP32- und Pico-Projekten häufigsten Module ohne Wandler an ein 3,3-V-Board dürfen. Module mit "Ja" kannst du über den 3V3-Pin versorgen und ihre Signalpins direkt anschließen. Unter demselben Namen gibt es aber verschiedene Versionen; schau nach, ob auf der Platine ein Regler oder Pegelwandler sitzt, und miss im Zweifel bei eingeschalteter Versorgung die Spannung am Signalpin.

ModulDirekt an 3,3 VHinweis
BME280-/BMP280-ModulJaDer Chip selbst verträgt höchstens 3,6 V; über 3V3 versorgen
DHT11 / DHT22Ja3,3–5,5 V; bei 3,3 V Kabel kurz halten
DS18B20Ja3,0–5,5 V; 4,7-kΩ-Pull-up an 3,3 V
0,96"-OLED (SSD1306)JaDas Modul hat einen Regler; mit 3V3 bleibt auch I2C bei 3,3 V
MPU6050 (GY-521)JaDie Pull-ups des Moduls hängen an VCC; über 3V3 versorgen
RC522-RFIDJa, nur 3,3 VMit 5 V versorgt geht das Modul kaputt
nRF24L01Ja, nur 3,3 V10–100 µF an die Versorgung
HC-SR04NeinMit 5 V versorgen, ECHO herunterteilen; die 3,3-V-Version heißt HC-SR04P
I2C-16x2-LCD (PCF8574)TeilweiseDas LCD braucht 5 V; für SDA und SCL einen BSS138 verwenden
WS2812B-LED-StreifenTeilweiseVersorgung mit 5 V; 3,3-V-Daten sind grenzwertig, 74AHCT125 empfohlen
5-V-RelaismodulTeilweiseBei Low-aktiven Modulen lässt ein 3,3-V-HIGH das Relais evtl. nicht ganz los; Modul mit 3,3-V-Ansteuerung wählen
SG90-ServoSignal jaMotor mit 5 V versorgen; ein 3,3-V-PWM-Signal reicht meist

Häufige Fehler und ihre Lösungen

SymptomMögliche UrsacheLösung
Der BSS138-Wandler funktioniert gar nichtLV und HV nicht angeschlossen oder vertauscht3,3 V an LV, 5 V an HV; GNDs verbinden
Die LED des ESP32 glimmt ohne USBEin 5-V-Signal versorgt das Board über einen PinTeiler oder Wandler in diese Leitung
Signal nach dem Teiler verzerrt oder abgerundetWiderstände zu groß für eine schnelle LeitungAuf 1 kΩ + 2 kΩ gehen oder 74LVC-Puffer nutzen
Die erste LED eines WS2812B-Streifens flackert3,3-V-Daten liegen unter der VIH-Schwelle von 3,5 VMit 74AHCT125 auf 5 V wandeln, 330 Ω in die Datenleitung
I2C läuft mal, hängt malPull-ups an 5 V und hohe VIH-Schwelle am GerätBSS138 verwenden, Takt auf 100 kHz senken
Relais fällt nie abLow-aktives Relaismodul sieht 3,3 V nicht als HIGHModul mit 3,3-V-Ansteuerung oder Transistortreiber verwenden
UART-Zeichen über den Wandler verstümmeltKeine gemeinsame MasseGNDs beider Boards verbinden
Bevor du eine Schaltung mit gemischten Spannungen zum ersten Mal einschaltest, miss jede Signalleitung zum 3,3-V-Board mit dem Multimeter, solange das Board noch nicht steckt. Liegt keine Leitung über 3,6 V, kannst du es gefahrlos anschließen. Diese einfache Gewohnheit ist die billigste Lebensversicherung für einen ESP32.

Pegelwandlung klingt technisch, lässt sich aber auf drei Regeln herunterbrechen: Eine Leitung von 5 V nach 3,3 V immer absichern, bei einer Leitung von 3,3 V nach 5 V die VIH-Schwelle des Empfängers prüfen und auf bidirektionalen Leitungen wie I2C einen BSS138 einsetzen. Mit diesen Regeln kombinierst du Arduino, ESP32 und Pico problemlos im selben Projekt. In der BlueGrays-App wird jede Verbindung der ESP32- und Raspberry-Pi-Pico-Projekte mit Pins passend zum Logikpegel des Boards und einem Schritt-für-Schritt-Schaltplan erklärt.

Häufige Fragen

Ist der ESP32 5-V-tolerant?

Nein. Das Datenblatt des ESP32 erlaubt an den GPIO-Pins höchstens Versorgung + 0,3 V, also etwa 3,6 V. Bei 5 V leiten die Schutzdioden des Pins, Strom fließt in die 3,3-V-Schiene, und der Pin kann mit der Zeit oder sofort ausfallen. Dass es eine Weile zu funktionieren scheint, macht es nicht sicher.

Kann ich Arduino und ESP32 ohne Pegelwandler verbinden?

Teilweise. 3,3-V-Signale vom ESP32 zum Arduino überschreiten meist die 3,0-V-Schwelle des Uno und dürfen direkt angeschlossen werden. 5-V-Signale vom Arduino zum ESP32 müssen dagegen immer über einen Spannungsteiler oder Pegelwandler laufen. In jedem Fall müssen die GNDs beider Boards verbunden sein.

Welchen Pegelwandler nehme ich für I2C?

Da I2C-Leitungen Open-Drain sind, ist ein bidirektionaler BSS138-MOSFET-Wandler die beste Wahl; er läuft bei 100 und 400 kHz problemlos. Für I2C entwickelte Chips wie der PCA9306 erfüllen denselben Zweck. Ein Spannungsteiler taugt für I2C nicht, weil die Leitung Daten in beide Richtungen überträgt.

Funktioniert ein WS2812B mit den 3,3-V-Daten des ESP32?

Oft ja, garantiert ist es aber nicht. Ein mit 5 V versorgter WS2812B erwartet am Dateneingang mindestens 3,5 V, und 3,3 V liegen darunter; besonders bei längeren Kabeln oder einer Versorgung über 5 V kann die erste LED flackern. Die zuverlässige Lösung ist ein Puffer wie 74AHCT125 oder 74HCT125 in der Datenleitung.

Spannungsteiler oder Pegelwandlermodul?

Musst du ein langsames Einweg-Signal von 5 V auf 3,3 V bringen, etwa UART RX oder HC-SR04 ECHO, reichen zwei Widerstände, und das ist die günstigste Lösung. Ist die Leitung bidirektional (I2C) oder müssen 3,3 V auf 5 V angehoben werden, hilft ein Teiler nicht; dann nimmst du ein BSS138-Modul oder einen 74HCT-Puffer. Für sehr schnelle Signale sind Pufferbausteine die richtige Wahl.

Was bedeuten HV und LV auf einem Pegelwandler?

HV (High Voltage) ist die Hochspannungsseite und kommt meist an 5 V, LV (Low Voltage) ist die Niederspannungsseite und kommt an 3,3 V. Die Pins HV1–HV4 gehen an die Signale des 5-V-Geräts, die gleich nummerierten LV1–LV4 an die Pins des 3,3-V-Boards. Die GNDs beider Seiten werden an den GND-Pins des Moduls verbunden.

Alle Projekte ansehen
LED Blinken mit ESP32
#103Anfänger

LED Blinken mit ESP32

Lehrt die grundlegende Verwendung von GPIO-Ausgängen mit ESP32. Wir erreichen einen Blinkeffekt, indem wir eine LED über einen digitalen Pin ein- und ausschalten. ESP32-Version des klassischen Blink-Projekts auf Arduino UNO; die grundlegenden Blink-Befehle in der Arduino-Umgebung bleiben gleich, aber die Pinbelegung und die GPIO-Pegel von 3,3 V des ESP32 unterscheiden sich von denen des Arduino UNO.

4.7(37)
100
ESP32 LED-Steuerung mit Drucktaste (Push)
#104Anfänger

ESP32 LED-Steuerung mit Drucktaste (Push)

Die LED leuchtet auf, wenn die Taste gedrückt wird und geht aus, wenn sie losgelassen wird. Zeigt, wie der digitale Eingangspin des ESP32 und der interne Pull-up-Widerstand verwendet werden. Dank des INPUT_PULLUP-Modus ist kein externer Widerstand erforderlich.

4.6(36)
55
Messung der Lichtintensität mit dem ESP32-LDR-Modul
#113Anfänger

Messung der Lichtintensität mit dem ESP32-LDR-Modul

Echtzeit-Anzeige des ADC-Rohwerts des LDR-Moduls und des anhand von Dunkel- und Hellreferenzwerten berechneten relativen Lichtwerts in Prozent im Serial Monitor. Dieser Prozentwert ist keine Lux-Messung. Vermittelt die Kalibrierungslogik des Moduls. Sollte idealerweise vor Projekt 10 durchgeführt werden, da es zur Festlegung des Schwellenwerts dient.

4.6(36)
55
Raspberry Pi Pico Onboard-LED Blinken (Pico und Pico W)
#147Anfänger

Raspberry Pi Pico Onboard-LED Blinken (Pico und Pico W)

Das Eröffnungsprojekt der Raspberry Pi Pico-Serie! Wir bringen die grüne interne LED zum Blinken, um zu überprüfen, ob die Platine funktioniert — ein klassisches "Hello World"-Erstexperiment. Keine externen Komponenten, nur Pico und USB-Kabel. Der Code ist in MicroPython geschrieben (die offiziell von der Raspberry Pi Foundation unterstützte Sprache). Lerne die machine.Pin-Klasse, Pin.OUT-Modus, led.on()/off()-Methoden und time.sleep() in Thonny IDE. Verfolge jede Umsch

5.0(1)
10
ESP32 I2C-LCD-Display (16×2)
#119Mittel
Premium

ESP32 I2C-LCD-Display (16×2)

In diesem Projekt zeigen wir Text an, indem wir ein 16x2-Zeichen-LCD-Display über das I2C-Protokoll an den ESP32 anschließen. Dank I2C können wir das Display mit nur zwei Datenpins (SDA und SCL) steuern; die Verschwendung von 6+ Pins bei einer klassischen parallelen Verbindung entfällt. Der Code schreibt in die erste Zeile eine feste Meldung und in die zweite Zeile einen Zähler, der sich jede Sekunde erhöht. Außerdem lassen wir zu Beginn den I2C-Scanner laufen und geben die Adresse des Displays

4.9(23)
40
ESP32 HC-SR04 Ultraschall-Entfernungsmesser
#116Mittel

ESP32 HC-SR04 Ultraschall-Entfernungsmesser

Der Ultraschallsensor HC-SR04 berechnet die Entfernung, indem er die Zeit misst, die die von ihm ausgesendete Schallwelle benötigt, um auf ein Objekt zu treffen und zurückzukehren (Time of Flight). In diesem Projekt senden wir mit dem ESP32 einen 10-Mikrosekunden-Impuls an den TRIG-Pin und lesen die vom ECHO-Pin kommende Echozeit mit pulseIn(). Die berechnete Entfernung geben wir in cm auf einem 16x2-I2C-LCD aus. Da der HC-SR04 mit 5 V betrieben wird, ist ein Spannungsteiler am ECHO-Pin zw

4.9(28)
46
Steuerung des ESP32 WS2812B NeoPixel-Streifens
#126Mittel
Premium

Steuerung des ESP32 WS2812B NeoPixel-Streifens

WS2812B (NeoPixel) adressierbare LEDs sind intelligente RGB-LEDs, die über einen einzigen Datenpin in Reihe geschaltet gesteuert werden können. In diesem Projekt werden wir einen WS2812B-Streifen mit 8 LEDs mithilfe der Adafruit_NeoPixel-Bibliothek steuern und eine fließende Regenbogenanimation erzeugen. Obwohl der 3,3-V-Logikpegel des ESP32 bei den meisten WS2812B-Bausteinen problemlos funktioniert, zeigen wir im Falle von Instabilität die Lösung mit einem 470-Ω-Reihenwiderstand und einem 1000-

4.9(19)
30
Raspberry Pi Pico: Externe LED zum Leuchten bringen (Steckbrett)
#148Anfänger

Raspberry Pi Pico: Externe LED zum Leuchten bringen (Steckbrett)

Der nächste Schritt nach der integrierten LED des Pico: Eine externe LED an das Breadboard anschließen und über den GP14-Pin steuern. In diesem Projekt lernst du, wie du einen beliebigen universellen GPIO-Pin des Pico als Ausgang nutzen kannst, welche Polarität die LED hat (langes Bein = Anode/+, kurzes Bein = Kathode/–) und warum ein Strombegrenzungswiderstand (220 Ω) erforderlich ist. Wenn du den Widerstand weglässt, fließt zu viel Strom durch die LED und sie kann durchbrennen. Die Schaltung i

4.5(2)
7