Fundamentos · 12 min de leitura

Conversor de nível lógico: conecte dispositivos de 3,3 V e 5 V com segurança

O que é um conversor de nível lógico? Por que os pinos do ESP32 e do Pico não toleram 5 V, limiares VIH/VIL, divisores de tensão, BSS138 para I2C, chips 74HCT e uma tabela de módulos.

Um conversor de nível lógico é um pequeno circuito que permite que uma placa que opera com 3,3 V (ESP32, Raspberry Pi Pico, ESP8266) se comunique com segurança com uma placa ou módulo que opera com 5 V (Arduino Uno, LCD I2C, HC-SR04, WS2812B). Conectar uma saída de 5 V diretamente a um pino de 3,3 V pode danificar o pino aos poucos ou instantaneamente; no sentido contrário, um sinal de 3,3 V às vezes nem é reconhecido como “1” por uma entrada de 5 V. Saber quando você precisa de um conversor e qual é suficiente elimina as falhas misteriosas de metade dos projetos que combinam tensões diferentes.

Neste artigo, você vai primeiro entender o que significam os limiares VIH e VIL e por que os pinos do ESP32 e do Pico não toleram 5 V. Depois, veremos três soluções com exemplos: conversão unidirecional com um divisor de tensão de dois resistores, um conversor bidirecional com MOSFET BSS138 para I2C e chips 74HCT para sinais rápidos, como WS2812B ou SPI. No final, há uma tabela com os módulos que funcionam diretamente com 3,3 V e uma lista de erros comuns.

Placa de desenvolvimento ESP32
Todos os pinos GPIO do ESP32 usam lógica de 3,3 V; um sinal de 5 V não é seguro para eles.

O que são níveis lógicos de 3,3 V e 5 V?

Um pino digital só conhece 0 e 1, mas, no mundo real, a tensão pode ter qualquer valor entre 0 e a tensão de alimentação. Por isso, o datasheet de cada chip apresenta quatro limiares. VIH (entrada em HIGH) é a menor tensão que a entrada garante reconhecer como 1. VIL (entrada em LOW) é a maior tensão que ela garante reconhecer como 0. A região entre esses valores é indefinida: o chip pode ler 0 ou 1 nela. No lado da saída, VOH é a menor tensão que o pino garante ao fornecer HIGH, e VOL é a maior tensão que ele garante ao fornecer LOW. Para que dois chips se comuniquem de forma confiável, o VOH do transmissor deve ficar com uma margem segura acima do VIH do receptor, e o VOL do transmissor com uma margem segura abaixo do VIL do receptor. Você pode ver como as portas tomam decisões com esses limiares no artigo sobre portas lógicas e experimentá-las na ferramenta Portas lógicas.

Chip (alimentação)VIL (máx.)VIH (mín.)VOL (máx.)VOH (mín.)Máximo absoluto do pino
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 VCerca de 2,6 V3,8 V
Série 74HC (5 V)1,5 V3,5 V0,1 V4,4 V5,5 V
Série 74HCT (5 V)0,8 V2,0 V0,1 V4,4 V5,5 V

A tabela permite tirar três conclusões importantes. Primeiro, a saída HIGH de um Uno de 5 V (4,2–5 V) ultrapassa claramente o limite de 3,6 V do ESP32 e de 3,8 V do Pico, então a conversão nesse sentido é obrigatória. Segundo, a saída HIGH de 3,3 V do ESP32 normalmente supera o limiar VIH de 3,0 V do Uno, mas o menor VOH garantido pelo datasheet é de 2,64 V; por isso, a conexão costuma funcionar, mas fica no limite à medida que o fio fica mais longo ou que a carga no pino aumenta. Terceiro, um chip 74HC alimentado com 5 V, um expansor I2C com limiar de 0,7 × VCC, como o PCF8574, ou um LED WS2812B não reconhece de forma confiável como HIGH um valor abaixo de 3,5 V; para esses chips, um sinal de 3,3 V realmente não basta. A série 74HCT tem VIH de 2,0 V, por isso é uma das formas mais simples e confiáveis de converter 3,3 V em 5 V.

Por que os pinos do ESP32 e do Pico não toleram 5 V?

Cada pino de entrada de um chip de 3,3 V tem pequenos diodos de proteção que conectam o pino à linha de 3,3 V e ao GND. Eles foram projetados para absorver pulsos muito curtos, como descargas estáticas, e não corrente contínua. Quando você aplica 5 V ao pino, o diodo superior conduz e a corrente flui da fonte de 5 V para a linha de 3,3 V. Se a resistência interna da fonte for baixa, essa corrente chega a dezenas de miliampères e destrói o diodo e os circuitos ao redor do pino por aquecimento. Se a corrente for menor, o pino não para de funcionar imediatamente, mas o chip se degrada com o tempo, e a tensão da linha de 3,3 V pode até subir, fazendo a placa começar a se alimentar pelo pino: você desconecta o cabo de alimentação e o LED do ESP32 continua aceso com brilho fraco. O datasheet do ESP32 especifica um limite para o pino de alimentação + 0,3 V (cerca de 3,6 V), e o do RP2040, de alimentação + 0,5 V (cerca de 3,8 V). “Testei uma vez e não queimou” não significa que o pino tolera 5 V.

Os pinos digitais do chip RP2350 do Raspberry Pi Pico 2 foram projetados para tolerar 5 V enquanto a placa está alimentada; as entradas analógicas (GP26–GP29) não estão incluídas, e os pinos continuam fornecendo apenas 3,3 V na saída. Aplicar 5 V aos pinos enquanto a placa está desligada é arriscado em qualquer caso. No Pico original (RP2040), no ESP32 e no ESP8266, nenhum pino tolera 5 V.

O que você precisa em cada caso?

CasoExemploSolução
Saída de 5 V → entrada de 3,3 VUno TX → ESP32 RX, HC-SR04 ECHO → PicoDivisor de tensão (sinais lentos) ou buffer 74LVC (sinais rápidos)
Saída de 3,3 V → entrada de 5 V (VIH em torno de 3 V)ESP32 TX → Uno RXGeralmente funciona diretamente; use um 74HCT para garantir as margens
Saída de 3,3 V → entrada de 5 V (VIH de 3,5 V)ESP32 → WS2812B, um chip 74HC de 5 VUm buffer como o 74HCT125 / 74AHCT125
Linha bidirecional de dreno abertoI2C (SDA, SCL), 1-WireConversor com MOSFET BSS138
Linha bidirecional rápida do tipo push-pullBarramento de dados paralelo74LVC245 com pino de direção ou TXS0108E

Conversão unidirecional com divisor de tensão (5 V → 3,3 V)

A forma mais simples de levar uma saída de 5 V a uma entrada de 3,3 V usa dois resistores. O sinal entra pelo resistor superior R1, o ponto intermediário vai ao pino de 3,3 V e o resistor inferior R2 vai ao GND. A saída é Vout = 5 V × R2 / (R1 + R2); usar R2 com o dobro do valor de R1 reduz 5 V para 3,33 V. Um divisor só funciona em um sentido: da tensão mais alta para a mais baixa, então não pode ser usado em linhas bidirecionais nas quais o lado de 3,3 V precisa responder. Sua velocidade também é limitada, porque a resistência de saída do divisor forma um pequeno filtro RC com a capacitância do pino e arredonda as bordas do sinal. Use a calculadora de divisor de tensão para escolher os valores e veja a explicação completa no artigo sobre divisor de tensão.

R1 (lado do sinal)R2 (lado do GND)Saída com 5 VResistência de saídaIndicado para
1 kΩ2 kΩ (dois de 1 kΩ em série)3,33 V667 ΩA maioria das aplicações, incluindo sinais rápidos; consome 1,7 mA em HIGH
2,2 kΩ3,3 kΩ3,00 V1,3 kΩMargem mais segura; UART, HC-SR04 ECHO
10 kΩ20 kΩ3,33 V6,7 kΩBaixa corrente; UART até 115200 baud e sinais lentos
4,7 kΩ10 kΩ3,40 V3,2 kΩNo limite; se a linha de 5 V subir para 5,25 V, a saída será de 3,57 V; não recomendado

Exemplo: UART entre um Arduino Uno e um ESP32

Em projetos nos quais o Uno lê os sensores e o ESP32 envia os dados à internet por Wi-Fi, as duas placas se comunicam por UART. Como a linha TX do Uno fornece 5 V, ela se conecta ao pino RX do ESP32 por um divisor de 1 kΩ + 2 kΩ. A linha TX de 3,3 V do ESP32 pode ir diretamente ao pino RX do Uno, pois o Uno reconhece qualquer valor acima de 3,0 V como HIGH. Para deixar a porta serial USB do Uno (D0, D1) livre para o computador, o lado do Uno usa SoftwareSerial em D10 e D11; no ESP32, a segunda porta serial de hardware, Serial2, usa GPIO 16 (RX) e 17 (TX). Os GNDs das duas placas devem ser conectados entre si.

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}

Antes de carregar o código, meça o ponto intermediário do divisor com um multímetro: com o Uno ligado e sem enviar nada, você deve medir cerca de 3,3 V, porque uma linha UART fica em HIGH quando está ociosa. Se o Monitor Serial do Uno mostrar uma linha como “ESP32: OK 6” a cada segundo, a comunicação está funcionando nos dois sentidos. A 9600 baud, um bit dura 104 µs, enquanto o atraso introduzido pelo divisor de 1 kΩ + 2 kΩ está na faixa dos nanossegundos, então a velocidade não é motivo de preocupação.

Exemplo: conectar um HC-SR04 a um Raspberry Pi Pico

Sensor ultrassônico de distância HC-SR04
O HC-SR04 opera com 5 V e seu pino ECHO fornece um pulso de 5 V; esse sinal deve chegar às placas de 3,3 V por um divisor.

O HC-SR04 só funciona de forma confiável com 5 V. Se você alimenta o Pico por USB, conecte o VCC do sensor ao pino VBUS do Pico (pino 40). A entrada TRIG reconhece o pulso de 3,3 V do Pico sem problemas, então vai diretamente ao GP15. ECHO, porém, retorna um pulso de 5 V; conecte um resistor de 1 kΩ entre ECHO e GP14 e um resistor de 2 kΩ entre GP14 e GND. O código mede a duração do pulso ECHO em microssegundos com time_pulse_us e a converte em distância usando a velocidade do som no ar (cerca de 343 m/s).

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)

O conversor de nível bidirecional BSS138

A maioria das pequenas placas vendidas como “conversores de nível lógico de 4 canais” tem um MOSFET de canal N BSS138 e dois resistores de pull-up de 10 kΩ por canal. O circuito é extremamente simples: o gate do MOSFET está ligado a 3,3 V (LV), seu terminal fonte vai ao lado de baixa tensão e seu dreno ao lado de alta tensão. O resistor de pull-up de cada lado eleva a linha até a tensão de alimentação daquele lado. Essa configuração foi projetada para linhas de dreno aberto, como I2C, que apenas levam a linha a 0 e deixam o nível 1 a cargo dos resistores de pull-up, e funciona nos dois sentidos automaticamente; não há um pino de direção indicando qual lado está transmitindo.

  1. Os dois lados ociosos: O gate e o terminal fonte do MOSFET estão ambos em 3,3 V, a tensão entre eles é zero e o MOSFET está desligado. Cada lado é levado a HIGH pelo próprio resistor: o lado LV a 3,3 V e o lado HV a 5 V.
  2. O lado de 3,3 V leva a linha a LOW: O terminal fonte cai para 0 V; como o gate permanece em 3,3 V, a tensão entre gate e fonte passa a ser de 3,3 V e o MOSFET liga. O lado HV é levado a LOW pelo MOSFET.
  3. O lado de 5 V leva a linha a LOW: O diodo de corpo dentro do MOSFET conduz e reduz a tensão do terminal fonte para cerca de 0,7 V. Quando a tensão entre gate e fonte chega a cerca de 2,6 V, o MOSFET liga completamente e o lado LV também vai totalmente a LOW.
Pino do móduloConectar aObservação
LVPino 3V3 da placa de 3,3 VAlimentação do lado de baixa tensão e tensão de gate dos MOSFETs
HVFonte de 5 V (5V do Uno ou VIN do ESP32)Alimentação dos resistores de pull-up do lado de alta tensão
GND (dois)GND das duas placasÉ necessário um GND comum
LV1–LV4Pinos do ESP32 ou do PicoSinais do lado de 3,3 V
HV1–HV4Pinos do módulo de 5 VCada um corresponde ao pino LV de mesmo número
A velocidade de uma placa BSS138 é determinada por seus resistores de pull-up de 10 kΩ: ela lida tranquilamente com I2C a 100 e 400 kHz e UART a 115200 baud, mas suas bordas são lentas demais para os dados do WS2812B a 800 kHz ou para SPI a vários MHz. Placas de 8 canais com direção automática, como a TXS0108E, são mais rápidas com sinais push-pull; também funcionam com I2C, mas podem ficar instáveis com resistores de pull-up fortes na linha e fios longos. O TXB0108, da mesma família, não é adequado para I2C.

Exemplo: conectar um ESP32 a um LCD I2C de 5 V

Os LCDs de 16x2 caracteres não oferecem contraste suficiente se não forem alimentados com 5 V, e o módulo adaptador I2C PCF8574 na parte traseira eleva SDA e SCL a 5 V com resistores de 4,7 kΩ. Além disso, o limiar VIH do PCF8574 é de 0,7 × VCC, ou seja, 3,5 V com alimentação de 5 V; os 3,3 V do ESP32 ficam abaixo desse valor. Por isso, usar um conversor BSS138 entre o LCD I2C e o ESP32 protege os pinos e torna a comunicação confiável. Faça as conexões assim: pino 3V3 do ESP32 em LV, pino VIN (5 V do USB) em HV e no VCC do LCD, todos os GNDs juntos; GPIO 21 em LV1 e HV1 no SDA do LCD; GPIO 22 em LV2 e HV2 no SCL do LCD. Se o código do scanner abaixo encontrar o LCD (normalmente em 0x27 ou 0x3F), o conversor está funcionando.

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}

Chips 74HCT: sinais rápidos em um só sentido

Quando um divisor ou um BSS138 é lento demais, a solução profissional é um chip buffer. A série 74HCT opera com 5 V, mas seu limiar de entrada é compatível com TTL (VIH = 2,0 V), então reconhece facilmente o sinal de 3,3 V de um ESP32 ou Pico como HIGH e fornece um sinal completo de 5 V com bordas bem definidas. O uso mais comum é a linha de dados de fitas WS2812B: o pino do ESP32 vai à entrada de um 74AHCT125, e sua saída passa por um resistor de 330 Ω até o DIN da fita; o pino OE (habilitação) do 74AHCT125 é ligado ao GND. Para o sentido contrário, reduzindo um sinal rápido de 5 V para 3,3 V, você usa um 74LVC125 ou 74LVC245 alimentado com 3,3 V; as entradas desses chips toleram até 5,5 V, independentemente da própria alimentação.

SoluçãoAlimentaçãoDireçãoCanaisAplicação típica
74AHCT125 / 74HCT1255 V3,3 V → 5 V4Dados do WS2812B, SPI, MAX7219
74HCT2455 V3,3 V → 5 V8Barramento de dados paralelo, muitas saídas
74LVC125 / 74LVC2453,3 V5 V → 3,3 V4 / 8Saídas rápidas de sensores de 5 V, módulos de cartão SD
Módulo BSS1383,3 V e 5 VBidirecional4I2C, 1-Wire, UART lenta
Divisor de tensãoNenhuma5 V → 3,3 V1UART RX, HC-SR04 ECHO, botões

Quais módulos funcionam diretamente com 3,3 V?

A tabela abaixo resume se os módulos mais usados em projetos com ESP32 e Pico podem ser conectados a uma placa de 3,3 V sem conversor. Você pode alimentar os módulos marcados com “Sim” pelo pino 3V3 e conectar seus pinos de sinal diretamente. Ainda assim, módulos vendidos com o mesmo nome podem ter versões diferentes; verifique se a placa tem regulador ou conversor de nível e, em caso de dúvida, meça a tensão no pino de sinal com um multímetro enquanto o VCC estiver alimentado.

MóduloDireto em 3,3 VObservação
Módulo BME280 / BMP280SimO chip em si aceita no máximo 3,6 V; alimente-o pelo 3V3
DHT11 / DHT22Sim3,3–5,5 V; mantenha o cabo curto com 3,3 V
DS18B20Sim3,0–5,5 V; pull-up de 4,7 kΩ para 3,3 V
OLED de 0,96 polegada (SSD1306)SimO módulo tem regulador; alimentá-lo pelo 3V3 mantém o I2C em 3,3 V também
MPU6050 (GY-521)SimOs resistores de pull-up do módulo vão ao VCC; alimente-o pelo 3V3
RC522 RFIDSim, apenas 3,3 VAlimentá-lo com 5 V destrói o módulo
nRF24L01Sim, apenas 3,3 VAdicione um capacitor de 10–100 µF à alimentação
HC-SR04NãoAlimente-o com 5 V e reduza ECHO com um divisor; a versão de 3,3 V é o HC-SR04P
LCD I2C 16x2 (PCF8574)ParcialmenteO LCD precisa de 5 V; use um BSS138 para SDA e SCL
Fita LED WS2812BParcialmenteAlimentada com 5 V; dados de 3,3 V ficam no limite, recomenda-se um 74AHCT125
Módulo relé de 5 VParcialmenteEm módulos ativos em LOW, um HIGH de 3,3 V pode não desativar completamente o relé; escolha um módulo com acionamento de 3,3 V
Servo SG90Sinal, simAlimente o motor com 5 V; um sinal PWM de 3,3 V costuma ser suficiente

Erros comuns e como corrigi-los

SintomaCausa provávelCorreção
O conversor BSS138 não funcionaAlimentações LV e HV desconectadas ou invertidasAlimente LV com 3,3 V e HV com 5 V; una os GNDs
O LED do ESP32 fica aceso com brilho fraco mesmo com o USB desconectadoUm sinal de 5 V está alimentando a placa por um pinoAdicione um divisor ou conversor nessa linha
O sinal fica distorcido ou arredondado após o divisorResistores com valores altos demais para uma linha rápidaReduza para 1 kΩ + 2 kΩ ou use um buffer 74LVC
O primeiro LED de uma fita WS2812B pisca irregularmenteOs dados de 3,3 V ficam abaixo do limiar VIH de 3,5 VConverta para 5 V com um 74AHCT125 e adicione 330 Ω à linha de dados
O I2C funciona às vezes e trava em outrasPull-ups para 5 V e limiar VIH alto no dispositivoUse um BSS138 e reduza a velocidade para 100 kHz
O relé nunca desativaO módulo relé ativo em LOW não reconhece 3,3 V como HIGHUse um módulo com acionamento de 3,3 V ou um driver com transistor
Os caracteres UART ficam ilegíveis ao passar pelo conversorFalta de GND comumConecte os GNDs das duas placas
Antes de alimentar pela primeira vez um circuito que combina tensões diferentes, meça com um multímetro cada linha de sinal que vai à placa de 3,3 V, enquanto a placa estiver desconectada. Se nenhuma linha ultrapassar 3,6 V, é seguro conectar a placa. Esse hábito simples é a forma mais barata de salvar um ESP32.

A conversão de nível lógico pode parecer técnica, mas se resume a três regras: sempre proteja uma linha que vai de 5 V para 3,3 V, verifique o limiar VIH do receptor em uma linha que vai de 3,3 V para 5 V e use um BSS138 em linhas bidirecionais, como I2C. Com essas regras, você pode combinar tranquilamente um Arduino, um ESP32 e um Pico no mesmo projeto. No app BlueGrays, cada conexão dos projetos com ESP32 e Raspberry Pi Pico é explicada com pinos compatíveis com o nível lógico da placa e um diagrama de fiação passo a passo.

Perguntas frequentes

O ESP32 tolera 5 V?

Não. O datasheet do ESP32 estabelece um máximo de alimentação + 0,3 V, cerca de 3,6 V, para os pinos GPIO. Ao aplicar 5 V, os diodos de proteção do pino conduzem, a corrente flui para a linha de 3,3 V e o pino pode falhar com o tempo ou imediatamente. O fato de parecer funcionar por um tempo não torna isso seguro.

Posso conectar um Arduino a um ESP32 sem conversor de nível?

Parcialmente. Os sinais de 3,3 V que vão do ESP32 para o Arduino normalmente superam o limiar de 3,0 V do Uno, então podem ser conectados diretamente. Os sinais de 5 V que vão do Arduino para o ESP32, porém, devem passar por um divisor de tensão ou conversor. Em todos os casos, os GNDs das duas placas devem ser unidos.

Qual conversor de nível lógico devo usar para I2C?

Como as linhas I2C são de dreno aberto, um conversor bidirecional com MOSFET BSS138 é a melhor escolha; ele funciona sem problemas a 100 e 400 kHz. Chips projetados para I2C, como o PCA9306, fazem o mesmo trabalho. Um divisor de tensão não pode ser usado no I2C, porque a linha transmite dados nos dois sentidos.

Um WS2812B funciona com os dados de 3,3 V do ESP32?

Muitas vezes sim, mas não é garantido. Um WS2812B alimentado com 5 V espera pelo menos 3,5 V na entrada de dados, e 3,3 V fica abaixo desse limiar; o primeiro LED pode piscar irregularmente, principalmente com um fio mais longo ou quando a alimentação ultrapassa 5 V. A solução confiável é um buffer como o 74AHCT125 ou 74HCT125 na linha de dados.

Devo usar um divisor de tensão ou um módulo conversor de nível?

Se você está reduzindo um sinal lento e unidirecional de 5 V para 3,3 V, como UART RX ou HC-SR04 ECHO, dois resistores bastam e são a solução mais barata. Se a linha for bidirecional (I2C) ou você precisar elevar 3,3 V para 5 V, um divisor não resolve; use um módulo BSS138 ou um buffer 74HCT. Para sinais muito rápidos, chips buffer são a escolha certa.

O que significam HV e LV em um conversor de nível lógico?

HV (high voltage, alta tensão) é o lado de alta tensão e normalmente se conecta a 5 V, enquanto LV (low voltage, baixa tensão) é o lado de baixa tensão e se conecta a 3,3 V. Os pinos HV1–HV4 vão aos sinais do dispositivo de 5 V, e os pinos LV1–LV4 correspondentes vão aos pinos da placa de 3,3 V. Os GNDs dos dois lados são unidos nos pinos GND do módulo.

Ver todos os projetos
LED piscando com ESP32
#103Iniciante

LED piscando com ESP32

Ensina o uso básico de uma saída GPIO no ESP32. Fazemos um LED piscar ligando e desligando um pino digital. É a versão para ESP32 do clássico projeto blink do Arduino UNO: os comandos básicos de blink no ambiente Arduino são os mesmos, mas a disposição dos pinos e os níveis de 3,3 V dos GPIOs do ESP32 diferem dos do Arduino UNO.

4.7(37)
100
Controle de LED com botão no ESP32 (momentâneo)
#104Iniciante

Controle de LED com botão no ESP32 (momentâneo)

O LED acende enquanto o botão está pressionado e apaga ao soltá-lo. Mostra como usar o pino de entrada digital e o resistor pull-up interno do ESP32. O modo INPUT_PULLUP dispensa um resistor externo.

4.6(36)
55
Leitura da intensidade da luz com módulo LDR e ESP32
#113Iniciante

Leitura da intensidade da luz com módulo LDR e ESP32

Acompanhe em tempo real no Monitor Serial o valor bruto do ADC do módulo LDR e a porcentagem relativa de luz calculada a partir de referências de escuridão e claridade. Essa porcentagem não é uma medida em lux. O projeto ensina a lógica de calibração do módulo. É ideal fazê-lo antes do projeto 10, pois ajuda a determinar o valor do limiar.

4.6(36)
55
Piscar o LED integrado do Raspberry Pi Pico (Pico e Pico W)
#147Iniciante

Piscar o LED integrado do Raspberry Pi Pico (Pico e Pico W)

O primeiro projeto da série Raspberry Pi Pico! Fazemos o LED verde integrado piscar para verificar se a placa funciona — um primeiro experimento no estilo clássico "Hello World". SEM componentes externos, apenas o Pico e um cabo USB. O código foi escrito em MicroPython (a linguagem com suporte oficial da Raspberry Pi Foundation). Aprenda a usar a classe machine.Pin, o modo Pin.OUT, os métodos led.on()/off() e time.sleep() no Thonny IDE.

5.0(1)
10
Display LCD I2C com ESP32 (16x2)
#119Intermediário
Premium

Display LCD I2C com ESP32 (16x2)

Neste projeto, exibimos texto conectando um display LCD de 16x2 caracteres ao ESP32 pelo protocolo I2C. Com o I2C, controlamos o display usando apenas dois pinos de dados (SDA e SCL), dispensando o uso de seis ou mais pinos da conexão paralela tradicional. O código mostra uma mensagem fixa na primeira linha e um contador que aumenta a cada segundo na segunda linha. Na inicialização, também executamos um scanner I2C para mostrar o endereço do display no Monitor Serial (geralmente 0x27 ou 0x3F).

4.9(23)
40
Medidor ultrassônico de distância HC-SR04 com ESP32
#116Intermediário

Medidor ultrassônico de distância HC-SR04 com ESP32

O sensor ultrassônico HC-SR04 calcula a distância medindo o tempo que a onda sonora emitida leva para atingir um objeto e retornar (tempo de voo). Neste projeto, enviaremos um pulso de 10 microssegundos do ESP32 ao pino TRIG do sensor e leremos a duração do eco no pino ECHO com pulseIn(). Exibiremos a distância calculada em centímetros em um LCD I2C 16x2. Como o HC-SR04 opera a 5V, é preciso usar um divisor de tensão no pino ECHO; caso contrário, o GPIO de 3,3V do ESP32 será danificado.

4.9(28)
46
Controle de fita WS2812B NeoPixel com ESP32
#126Intermediário
Premium

Controle de fita WS2812B NeoPixel com ESP32

Os LEDs endereçáveis WS2812B (NeoPixel) são LEDs RGB inteligentes que podem ser controlados em cadeia por um único pino de dados. Neste projeto, vamos controlar uma fita WS2812B de 8 LEDs com a biblioteca Adafruit_NeoPixel para criar uma animação suave de arco-íris. Embora o nível lógico de 3,3V do ESP32 funcione sem problemas na maioria dos lotes de WS2812B, vamos mostrar uma solução com um resistor de 470Ω em série e um capacitor de 1.000µF para casos de instabilidade.

4.9(19)
30
Raspberry Pi Pico: controle de LED externo (protoboard)
#148Iniciante

Raspberry Pi Pico: controle de LED externo (protoboard)

O próximo passo após o LED integrado do Pico: conectar um LED externo à protoboard e controlá-lo pelo pino GP14. Neste projeto, você aprende a usar qualquer pino GPIO de uso geral do Pico como saída, a polaridade do LED (terminal longo = ânodo/+, terminal curto = cátodo/–) e por que um resistor limitador de corrente (220Ω) é necessário. Sem o resistor, uma corrente excessiva passa pelo LED e pode queimá-lo. O circuito é muito simples: Pico GP14 → resistor de 220Ω → LE

4.5(2)
7