Основы · 9 мин чтения

Преобразователь логических уровней: безопасное соединение устройств на 3,3 V и 5 V

Что такое преобразователь логических уровней? Почему пины ESP32 и Pico не выдерживают 5 V, пороги VIH/VIL, делители напряжения, BSS138 для I2C, микросхемы 74HCT и таблица модулей.

Преобразователь логических уровней — небольшая схема, которая позволяет плате на 3,3 V (ESP32, Raspberry Pi Pico, ESP8266) безопасно обмениваться данными с платой или модулем на 5 V (Arduino Uno, I2C LCD, HC-SR04, WS2812B). Прямое соединение выхода 5 V с пином на 3,3 V может повредить пин постепенно или мгновенно; в обратном направлении вход на 5 V иногда даже не распознаёт сигнал 3,3 V как «1». Понимание того, когда нужен преобразователь и какой подойдёт, устраняет загадочные сбои в половине проектов с разными напряжениями.

В этой статье ты сначала узнаешь, что означают пороги VIH и VIL и почему пины ESP32 и Pico не выдерживают 5 V. Затем мы рассмотрим три решения с примерами: однонаправленное преобразование делителем из двух резисторов, двунаправленный преобразователь на MOSFET BSS138 для I2C и микросхемы 74HCT для быстрых сигналов, например WS2812B или SPI. В конце есть таблица модулей, которые работают напрямую при 3,3 V, и список частых ошибок.

Отладочная плата ESP32
Все пины GPIO ESP32 используют логику 3,3 V; сигнал 5 V для них небезопасен.

Что такое логические уровни 3,3 V и 5 V?

Цифровой пин знает только 0 и 1, но в реальности напряжение может быть любым от 0 до напряжения питания. Поэтому в даташите каждой микросхемы указаны четыре пороговых значения. VIH (входной HIGH) — минимальное напряжение, которое вход гарантированно распознаёт как 1. VIL (входной LOW) — максимальное напряжение, гарантированно распознаваемое как 0. Область между ними неопределённая: микросхема может считать её как 0 или как 1. Для выхода VOH — минимальное напряжение, которое пин гарантирует при выдаче HIGH, а VOL — максимальное напряжение, которое он гарантирует при выдаче LOW. Для надёжного обмена между двумя микросхемами VOH передатчика должен с запасом превышать VIH приёмника, а VOL передатчика — быть с запасом ниже VIL приёмника. Как элементы принимают решения по этим порогам, можно узнать в статье логические элементы и проверить в утилите логических элементов.

Микросхема (питание)VIL (макс.)VIH (мин.)VOL (макс.)VOH (мин.)Предельно допустимое напряжение пина
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 VОколо 2,6 V3,8 V
Серия 74HC (5 V)1,5 V3,5 V0,1 V4,4 V5,5 V
Серия 74HCT (5 V)0,8 V2,0 V0,1 V4,4 V5,5 V

Из таблицы следуют три важных вывода. Во-первых, выходной HIGH платы Uno с питанием 5 V (4,2–5 V) явно превышает предел 3,6 V для ESP32 и 3,8 V для Pico, поэтому в этом направлении преобразование обязательно. Во-вторых, выходной HIGH 3,3 V платы ESP32 обычно превышает порог VIH 3,0 V платы Uno, но минимальное гарантированное даташитом VOH составляет 2,64 V; поэтому соединение часто работает, однако при удлинении провода или нагрузке на пин оказывается на грани. В-третьих, микросхема 74HC с питанием 5 V, расширитель I2C с порогом 0,7 × VCC, например PCF8574, или светодиод WS2812B не будут надёжно распознавать напряжение ниже 3,5 V как HIGH; для них сигнала 3,3 V действительно недостаточно. У серии 74HCT порог VIH равен 2,0 V, поэтому она представляет собой один из самых удобных способов преобразовать 3,3 V в 5 V.

Почему пины ESP32 и Pico не выдерживают 5 V?

У каждого входного пина микросхемы на 3,3 V есть небольшие защитные диоды, соединяющие его с шиной 3,3 V и GND. Они рассчитаны на поглощение очень коротких импульсов, например статического разряда, а не постоянного тока. Когда на пин подаётся 5 V, верхний диод открывается и ток течёт от источника 5 V в шину 3,3 V. Если внутреннее сопротивление источника мало, ток достигает десятков миллиампер и нагревом разрушает диод и цепи вокруг пина. При меньшем токе пин не выходит из строя сразу, но микросхема со временем деградирует, а напряжение шины 3,3 V может даже повыситься настолько, что плата начнёт питаться через пин: ты отключаешь кабель питания, а светодиод ESP32 продолжает тускло светиться. В даташите ESP32 предел для пина равен напряжению питания + 0,3 V (около 3,6 V), а у RP2040 — напряжению питания + 0,5 V (около 3,8 V). «Один раз получилось и ничего не сломалось» не означает, что пин допускает 5 V.

Цифровые пины микросхемы RP2350 на Raspberry Pi Pico 2 рассчитаны на 5 V при включённом питании платы; это не относится к аналоговым входам (GP26–GP29), а выходное напряжение пинов по-прежнему составляет только 3,3 V. Подавать 5 V на пины выключенной платы в любом случае рискованно. У оригинальной Pico (RP2040), ESP32 и ESP8266 ни один пин вообще не допускает 5 V.

Что нужно в каждом случае?

СитуацияПримерРешение
Выход 5 V → вход 3,3 VUno TX → ESP32 RX, HC-SR04 ECHO → PicoДелитель напряжения (медленные сигналы) или буфер 74LVC (быстрые сигналы)
Выход 3,3 V → вход 5 V (VIH около 3 V)ESP32 TX → Uno RXЧасто работает напрямую; для гарантированного запаса — 74HCT
Выход 3,3 V → вход 5 V (VIH 3,5 V)ESP32 → WS2812B, микросхема 74HC на 5 VБуфер, например 74HCT125 / 74AHCT125
Двунаправленная линия с открытым стокомI2C (SDA, SCL), 1-WireПреобразователь на MOSFET BSS138
Быстрая двунаправленная двухтактная линияПараллельная шина данных74LVC245 с выводом направления или TXS0108E

Однонаправленное преобразование делителем напряжения (5 V → 3,3 V)

Самый простой способ подключить выход 5 V ко входу 3,3 V — два резистора. Сигнал поступает через верхний резистор R1, средняя точка соединяется с пином на 3,3 V, а нижний резистор R2 — с GND. Выходное напряжение Vout = 5 V × R2 / (R1 + R2); если R2 вдвое больше R1, напряжение 5 V снижается до 3,33 V. Делитель работает только в одном направлении: от более высокого напряжения к более низкому, поэтому не подходит для двунаправленных линий, где сторона 3,3 V должна отвечать. Скорость тоже ограничена: выходное сопротивление делителя вместе с ёмкостью пина образует небольшой RC-фильтр и скругляет фронты сигнала. Подбирай номиналы в калькуляторе делителя напряжения, а подробное объяснение смотри в статье делитель напряжения.

R1 (со стороны сигнала)R2 (со стороны GND)Выход при 5 VВыходное сопротивлениеДля чего подходит
1 kΩ2 kΩ (два по 1 kΩ последовательно)3,33 V667 ΩБольшинство задач, включая быстрые сигналы; потребляет 1,7 mA при HIGH
2,2 kΩ3,3 kΩ3,00 V1,3 kΩСамый безопасный запас; UART, HC-SR04 ECHO
10 kΩ20 kΩ3,33 V6,7 kΩМалый ток; UART до 115200 бод и медленные сигналы
4,7 kΩ10 kΩ3,40 V3,2 kΩНа грани; при росте шины 5 V до 5,25 V выдаёт 3,57 V, не рекомендуется

Пример: UART между Arduino Uno и ESP32

В проектах, где Uno считывает датчики, а ESP32 передаёт данные в интернет по Wi-Fi, платы обмениваются данными через UART. Поскольку линия TX платы Uno выдаёт 5 V, она подключается к пину RX платы ESP32 через делитель 1 kΩ + 2 kΩ. Линию TX 3,3 V платы ESP32 можно соединить напрямую с пином RX платы Uno, поскольку Uno воспринимает всё выше 3,0 V как HIGH. Чтобы оставить последовательный порт USB платы Uno (D0, D1) свободным для компьютера, на Uno используется SoftwareSerial на D10 и D11; на ESP32 второй аппаратный последовательный порт Serial2 работает на GPIO 16 (RX) и 17 (TX). GND обеих плат обязательно нужно соединить.

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}

Перед загрузкой измерь напряжение в средней точке делителя мультиметром: когда Uno включена, но ничего не передаёт, должно быть около 3,3 V, поскольку линия UART в состоянии покоя имеет уровень HIGH. Если в мониторе порта Uno каждую секунду появляется строка вроде «ESP32: OK 6», обмен работает в обоих направлениях. На скорости 9600 бод один бит длится 104 мкс, а задержка, вносимая делителем 1 kΩ + 2 kΩ, измеряется наносекундами, поэтому о скорости можно не беспокоиться.

Пример: подключение HC-SR04 к Raspberry Pi Pico

Ультразвуковой датчик расстояния HC-SR04
HC-SR04 работает от 5 V, и его пин ECHO выдаёт импульс 5 V; к платам на 3,3 V его нужно подключать через делитель.

HC-SR04 надёжно работает только от 5 V. Если Pico питается от USB, подключи VCC датчика к пину VBUS платы Pico (пин 40). Вход TRIG без проблем распознаёт импульс 3,3 V от Pico, поэтому его можно соединить напрямую с GP15. Однако ECHO возвращает импульс 5 V: резистор 1 kΩ ставится между ECHO и GP14, а резистор 2 kΩ — между GP14 и GND. Код измеряет длительность импульса ECHO в микросекундах с помощью time_pulse_us и переводит её в расстояние, используя скорость звука в воздухе (около 343 м/с).

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)

Двунаправленный преобразователь уровней BSS138

На большинстве небольших плат, продающихся как «4-канальные преобразователи логических уровней», каждый канал содержит один N-канальный MOSFET (МОП-транзистор) BSS138 и два подтягивающих резистора по 10 kΩ. Схема предельно проста: затвор MOSFET подключён к 3,3 V (LV), исток — к стороне низкого напряжения, а сток — к стороне высокого напряжения. Подтягивающий резистор каждой стороны подтягивает линию к её напряжению питания. Эта схема предназначена для линий с открытым стоком, таких как I2C, которые только притягивают линию к 0, а формирование уровня 1 оставляют подтягивающим резисторам. Она автоматически работает в обе стороны; пин направления, указывающий, какая сторона передаёт, не нужен.

  1. Обе стороны в покое: на затворе и истоке MOSFET по 3,3 V, напряжение между ними равно нулю, и MOSFET закрыт. Каждая сторона подтянута своим резистором к HIGH: сторона LV — к 3,3 V, сторона HV — к 5 V.
  2. Сторона 3,3 V притягивает линию к LOW: напряжение истока падает до 0 V; поскольку на затворе остаётся 3,3 V, напряжение затвор–исток становится равным 3,3 V, и MOSFET открывается. Через MOSFET сторона HV притягивается к LOW.
  3. Сторона 5 V притягивает линию к LOW: встроенный диод MOSFET открывается и снижает напряжение истока примерно до 0,7 V. Когда напряжение затвор–исток достигает примерно 2,6 V, MOSFET полностью открывается, и на стороне LV тоже устанавливается полноценный LOW.
Пин модуляКуда подключатьПримечание
LVПин 3V3 платы на 3,3 VПитание стороны низкого напряжения и напряжение затворов MOSFET
HVИсточник 5 V (5V платы Uno или VIN платы ESP32)Питание подтяжки стороны высокого напряжения
GND (два)GND обеих платОбщая земля обязательна
LV1–LV4Пины ESP32 или PicoСигналы стороны 3,3 V
HV1–HV4Пины модуля на 5 VКаждому соответствует пин LV с тем же номером
Скорость платы BSS138 определяется её подтягивающими резисторами 10 kΩ: она уверенно справляется с I2C на 100 и 400 kHz и UART на 115200 бод, но её фронты слишком медленные для данных WS2812B на 800 kHz или SPI на нескольких MHz. 8-канальные платы с автоматическим определением направления, например TXS0108E, быстрее работают с двухтактными сигналами; они также подходят для I2C, но могут стать нестабильными при сильной подтяжке линии и длинных проводах. TXB0108 из того же семейства вообще не подходит для I2C.

Пример: подключение ESP32 к I2C LCD на 5 V

Символьные LCD 16x2 не дают достаточной контрастности без питания 5 V, а расположенный сзади адаптер I2C на PCF8574 подтягивает SDA и SCL к 5 V резисторами 4,7 kΩ. Кроме того, порог VIH у PCF8574 равен 0,7 × VCC, то есть 3,5 V при питании 5 V; напряжение 3,3 V от ESP32 ниже этого порога. Поэтому преобразователь BSS138 между LCD с I2C и ESP32 одновременно защищает пины и обеспечивает надёжный обмен. Подключи так: пин 3V3 платы ESP32 к LV, её пин VIN (5 V от USB) к HV и VCC дисплея, все GND вместе; GPIO 21 к LV1, а HV1 к SDA дисплея; GPIO 22 к LV2, а HV2 к SCL дисплея. Если приведённый ниже код сканера находит LCD (обычно по адресу 0x27 или 0x3F), преобразователь работает.

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: быстрые однонаправленные сигналы

Когда делитель или BSS138 слишком медленны, профессиональное решение — буферная микросхема. Серия 74HCT работает от 5 V, но её входной порог совместим с TTL (VIH = 2,0 V), поэтому она легко распознаёт сигнал 3,3 V от ESP32 или Pico как HIGH и выдаёт полноценный сигнал 5 V с крутыми фронтами. Чаще всего её используют на линии данных лент WS2812B: пин ESP32 подключается ко входу 74AHCT125, а её выход через резистор 330 Ω — к DIN ленты; вывод OE (разрешение) микросхемы 74AHCT125 соединяется с GND. Для обратного направления, то есть понижения быстрого сигнала 5 V до 3,3 V, используют 74LVC125 или 74LVC245 с питанием 3,3 V; входы этих микросхем допускают до 5,5 V независимо от собственного питания.

РешениеПитаниеНаправлениеКаналыТипичное применение
74AHCT125 / 74HCT1255 V3,3 V → 5 V4Данные WS2812B, SPI, MAX7219
74HCT2455 V3,3 V → 5 V8Параллельная шина данных, много выходов
74LVC125 / 74LVC2453,3 V5 V → 3,3 V4 / 8Быстрые выходы датчиков 5 V, модули SD-карт
Модуль BSS1383,3 V и 5 VДвунаправленное4I2C, 1-Wire, медленный UART
Делитель напряженияНе требуется5 V → 3,3 V1UART RX, HC-SR04 ECHO, кнопки

Какие модули работают напрямую при 3,3 V?

В таблице ниже показано, можно ли подключать наиболее распространённые модули для проектов ESP32 и Pico к плате на 3,3 V без преобразователя. Модули с отметкой «Да» можно питать от пина 3V3 и подключать их сигнальные пины напрямую. Но под одним названием могут продаваться разные версии модуля; проверь, есть ли на плате стабилизатор или преобразователь уровней, а если остаются сомнения, измерь напряжение на сигнальном пине мультиметром при поданном VCC.

МодульНапрямую при 3,3 VПримечание
Модуль BME280 / BMP280ДаСама микросхема допускает максимум 3,6 V; питай её от 3V3
DHT11 / DHT22Да3,3–5,5 V; при 3,3 V используй короткий кабель
DS18B20Да3,0–5,5 V; подтяжка 4,7 kΩ к 3,3 V
OLED 0,96″ (SSD1306)ДаНа модуле есть стабилизатор; питание от 3V3 сохраняет на I2C тоже 3,3 V
MPU6050 (GY-521)ДаПодтягивающие резисторы модуля подключены к VCC; питай его от 3V3
RC522 RFIDДа, только 3,3 VПитание от 5 V разрушает модуль
nRF24L01Да, только 3,3 VДобавь конденсатор 10–100 µF по питанию
HC-SR04НетПитай от 5 V и понижай ECHO делителем; версия на 3,3 V — HC-SR04P
LCD 16x2 с I2C (PCF8574)ЧастичноLCD нужно 5 V; используй BSS138 для SDA и SCL
Светодиодная лента WS2812BЧастичноПитание 5 V; данные 3,3 V на грани, рекомендуется 74AHCT125
Модуль реле на 5 VЧастичноНа модулях с активным LOW уровень HIGH 3,3 V может не полностью отпускать реле; выбирай модуль с управлением от 3,3 V
Сервопривод SG90Сигнал — даПитай мотор от 5 V; сигнала ШИМ (PWM) 3,3 V обычно достаточно

Частые ошибки и их исправление

СимптомВероятная причинаИсправление
Преобразователь BSS138 совсем не работаетПитание LV и HV не подключено или перепутаноПодай 3,3 V на LV и 5 V на HV; соедини GND
Светодиод ESP32 тускло светится при отключённом USBСигнал 5 V питает плату через пинДобавь делитель или преобразователь на эту линию
После делителя сигнал искажён или его фронты скругленыСопротивления слишком велики для быстрой линииУменьши номиналы до 1 kΩ + 2 kΩ или используй буфер 74LVC
Первый светодиод ленты WS2812B мерцаетДанные 3,3 V ниже порога VIH 3,5 VПреобразуй сигнал в 5 V через 74AHCT125 и добавь 330 Ω на линию данных
I2C то работает, то зависаетПодтяжка к 5 V и высокий порог VIH устройстваИспользуй BSS138 и снизь частоту до 100 kHz
Реле не отпускаетМодуль реле с активным LOW не распознаёт 3,3 V как HIGHИспользуй модуль с управлением от 3,3 V или транзисторный драйвер
Символы UART искажаются при передаче через преобразовательНет общей GNDСоедини GND обеих плат
Перед первым включением схемы с разными напряжениями измерь мультиметром каждую сигнальную линию, идущую к плате на 3,3 V, пока плата ещё не подключена. Если ни на одной линии напряжение не превышает 3,6 V, плату можно безопасно подключать. Эта простая привычка — самый дешёвый способ сохранить ESP32.

Преобразование логических уровней может звучать сложно, но сводится к трём правилам: всегда защищай линию, идущую от 5 V к 3,3 V, проверяй порог VIH приёмника на линии от 3,3 V к 5 V и используй BSS138 на двунаправленных линиях, таких как I2C. С этими правилами ты можешь уверенно объединять Arduino, ESP32 и Pico в одном проекте. В приложении BlueGrays каждое соединение в проектах с ESP32 и Raspberry Pi Pico объясняется с указанием пинов, соответствующих логическому уровню платы, и пошаговой схемой подключения.

Частые вопросы

Допускает ли ESP32 напряжение 5 V на пинах?

Нет. Даташит ESP32 задаёт для пинов GPIO максимум, равный напряжению питания + 0,3 V, то есть около 3,6 V. При подаче 5 V защитные диоды пина открываются, ток течёт в шину 3,3 V, и пин может выйти из строя со временем или сразу. То, что он какое-то время работает, не делает такое подключение безопасным.

Можно ли соединить Arduino с ESP32 без преобразователя уровней?

Частично. Сигналы 3,3 V от ESP32 к Arduino обычно превышают порог Uno 3,0 V, поэтому их можно подключать напрямую. Но сигналы 5 V от Arduino к ESP32 обязательно должны проходить через делитель напряжения или преобразователь. В любом случае GND обеих плат нужно соединить.

Какой преобразователь логических уровней выбрать для I2C?

Поскольку линии I2C имеют открытый сток, лучший выбор — двунаправленный преобразователь на MOSFET BSS138; он без проблем работает на 100 и 400 kHz. Микросхемы для I2C, например PCA9306, решают ту же задачу. Делитель напряжения для I2C не подходит, потому что линия передаёт данные в обоих направлениях.

Работает ли WS2812B с данными 3,3 V от ESP32?

Часто да, но это не гарантировано. WS2812B с питанием 5 V ожидает на входе данных не менее 3,5 V, а 3,3 V ниже этого порога; первый светодиод может мерцать, особенно при длинном проводе или повышении питания выше 5 V. Надёжное решение — буфер вроде 74AHCT125 или 74HCT125 на линии данных.

Что использовать: делитель напряжения или модуль преобразователя уровней?

Если нужно понизить медленный однонаправленный сигнал с 5 V до 3,3 V, например UART RX или HC-SR04 ECHO, достаточно двух резисторов — это самое дешёвое решение. Если линия двунаправленная (I2C) или нужно повысить 3,3 V до 5 V, делитель не поможет; используй модуль BSS138 или буфер 74HCT. Для очень быстрых сигналов подходят буферные микросхемы.

Что означают HV и LV на преобразователе логических уровней?

HV (high voltage) — сторона высокого напряжения, обычно подключаемая к 5 V, а LV (low voltage) — сторона низкого напряжения, подключаемая к 3,3 V. Пины HV1–HV4 соединяются с сигналами устройства на 5 V, а соответствующие LV1–LV4 — с пинами платы на 3,3 V. Земля обеих сторон объединяется на пинах GND модуля.

Все проекты
Мигающий светодиод на ESP32
#103Новичок

Мигающий светодиод на ESP32

Учит базовой работе с выходами GPIO на ESP32. Эффект мигания получается включением и выключением светодиода с цифрового пина. Это ESP32-версия классического проекта мигания на Arduino UNO; базовые команды мигания в среде Arduino те же, но расположение пинов ESP32 и уровни GPIO 3,3 V отличаются от Arduino UNO.

4.7(37)
100
Управление светодиодом кнопкой на ESP32 (удержание)
#104Новичок

Управление светодиодом кнопкой на ESP32 (удержание)

Светодиод горит, когда кнопка нажата, и гаснет, когда её отпускают. Показывает, как используются цифровой входной пин ESP32 и встроенный подтягивающий резистор. Режим INPUT_PULLUP избавляет от внешнего резистора.

4.6(36)
55
Измерение освещённости модулем LDR на ESP32
#113Новичок

Измерение освещённости модулем LDR на ESP32

Наблюдение в мониторе порта в реальном времени за сырым значением ADC модуля LDR и относительным процентом освещённости, вычисленным по опорным значениям темноты и света. Этот процент — не измерение в люксах. Учит логике калибровки модуля. Идеально выполнить его перед проектом 10, потому что он нужен для определения порога.

4.6(36)
55
Мигание встроенным светодиодом Raspberry Pi Pico (Pico и Pico W)
#147Новичок

Мигание встроенным светодиодом Raspberry Pi Pico (Pico и Pico W)

Первый проект серии Raspberry Pi Pico! Мигаем зелёным встроенным светодиодом, чтобы проверить, что плата работает, — классический первый опыт «Hello World». НИКАКИХ внешних компонентов, только Pico и USB-кабель. Код написан на MicroPython (официальном языке, поддерживаемом Raspberry Pi Foundation). Изучи в Thonny IDE класс machine.Pin, режим Pin.OUT, методы led.on()/off() и time.sleep(). Каждое переключение видно в выводе (REPL).

5.0(1)
10
I2C LCD-дисплей (16x2) на ESP32
#119Средний
Premium

I2C LCD-дисплей (16x2) на ESP32

В этом проекте символьный LCD-экран 16x2 подключается к ESP32 по протоколу I2C и выводит текст. Благодаря I2C экраном можно управлять всего двумя пинами данных (SDA и SCL), не тратя 6+ пинов, как при классическом параллельном подключении. Код печатает постоянное сообщение в первой строке и счётчик, растущий каждую секунду, во второй. Кроме того, при запуске работает сканер I2C, который выводит адрес дисплея в монитор порта.

4.9(23)
40
Ультразвуковой датчик расстояния HC-SR04 на ESP32
#116Средний

Ультразвуковой датчик расстояния HC-SR04 на ESP32

Ультразвуковой датчик HC-SR04 вычисляет расстояние по времени, за которое испущенная им звуковая волна отражается от предмета и возвращается (Time of Flight). В этом проекте ESP32 подаёт импульс 10 микросекунд на пин TRIG датчика, а длительность эха читает с пина ECHO через pulseIn(). Вычисленное расстояние в сантиметрах выводится на I2C LCD 16x2. HC-SR04 работает от 5V, поэтому на пине ECHO нужен делитель напряжения.

4.9(28)
46
Управление лентой WS2812B NeoPixel на ESP32
#126Средний
Premium

Управление лентой WS2812B NeoPixel на ESP32

Адресуемые светодиоды WS2812B (NeoPixel) — умные RGB-светодиоды, которыми управляют цепочкой через один пин данных. В этом проекте лента WS2812B из 8 светодиодов управляется библиотекой Adafruit_NeoPixel и показывает плавную радужную анимацию. Логика 3,3V у ESP32 работает с большинством WS2812B, но на случай нестабильности показано решение с последовательным резистором 470Ω и конденсатором 1000µF. Анимация получается сдвигом значения оттенка.

4.9(19)
30
Raspberry Pi Pico: управление внешним светодиодом (макетная плата)
#148Новичок

Raspberry Pi Pico: управление внешним светодиодом (макетная плата)

Следующий шаг после встроенного светодиода Pico: подключить внешний светодиод на макетной плате и управлять им через пин GP14. В этом проекте ты узнаешь, как использовать любой пин GPIO общего назначения у Pico как выход, какая полярность у светодиода (длинная ножка = анод/+, короткая = катод/–) и зачем нужен токоограничивающий резистор (220Ω). Без резистора через светодиод пойдёт слишком большой ток, и он может сгореть. Схема очень простая: Pico GP14 → резистор 220Ω → светодиод → GND.

4.5(2)
7