RisalDash RisalDash

Гайд · Железо · Уровни

3.3V ↔ 5V: как не сжечь ESP32

Половина датчиков и модулей из мира Arduino работает на 5 В. ESP32, ESP8266 и большинство современных чипов — на 3,3 В. Подашь 5-вольтовый выход прямо на 3,3-вольтовый пин — и можешь убить его на месте. Разбираем, почему они не дружат, когда преобразователь можно не ставить, и три чистых способа их подружить.

Уровни3.3V / 5VBSS138ESP32ArduinoЖелезо

Это тот самый вопрос «как считывается уровень?» из основ шин, доведённый до практики — и самый частый способ, которым новички убивают пин ESP32.

Почему 3.3 В и 5 В не работают вместе просто так

Две отдельные проблемы, по одной в каждую сторону:

Сначала — а нужен ли вообще преобразователь?

Проверь, прежде чем городить детали:

Способ 1 — делитель напряжения (в одну сторону)

Для одного 5-вольтового выхода на 3,3-вольтовый вход — TX датчика на RX ESP32 — хватит двух резисторов:

5V TX ──[ R1 = 1кОм ]──┬──> 3V3 RX (безопасно)
                       │
                    [ R2 = 2кОм ]
                       │
                      GND

Vout = 5В × R2 / (R1 + R2) = 5 × 2 / 33.3 В
// Только в одну сторону (5В -> 3В3). НЕ ставить на линию I²C SDA.
HC-SR04 подключён к ESP32 с делителем 1 кОм / 2 кОм на линии Echo 5 В для защиты входа 3.3 В
Делитель на практике: 5 В Echo от HC-SR04 снижен до безопасных 3.3 В — 1 кОм последовательно, 2 кОм на землю. Собрано в BoardLab.

Дёшево и надёжно, но только в одну сторону и чуть медленно (сопротивление плюс ёмкость провода заваливают быстрые фронты). Никогда не ставь на двунаправленную линию вроде I²C SDA.

Способ 2 — MOSFET BSS138 (двунаправленный, рабочая лошадка)

Классическая 4-канальная платка «logic level converter» — это несколько MOSFET BSS138. Каждый канал сдвигает сразу в обе стороны автоматически, что и нужно для I²C (и SDA, и SCL двунаправленные). Высокую сторону на 5 В, низкую на 3,3 В, общая земля, сигналы через неё. Пара долларов — и закрыто 90% случаев.

Способ 3 — специальные микросхемы (много/быстрых линий)

Для 8-битной параллельной шины или быстрого SPI — специализированная микросхема: TXS0108E (авто-направление, дружит с открытым стоком) или TXB0104 (push-pull, быстрее, не для I²C). Они тянут выше скорости и больше каналов чище, чем делитель или одиночный MOSFET.

Грабли

Правило: один 5-вольтовый сигнал внутрь → делитель. Двунаправленная шина (I²C) → платка на BSS138. Много или быстрые линии → нормальная микросхема-преобразователь. Сделай правильно один раз — и пины ESP32 проживут долго.

Борешься с молчащей I²C? Несовпадение уровней — один из типовых виновников.