ESP32 ADC: Como Ler um Potenciômetro e Converter para Volts
Neste tutorial vamos aprender como usar as portas analógicas do ESP32 (ADC) para ler um potenciômetro e mostrar o valor no display TFT ST7735.
O ESP32 é um dos microcontroladores mais populares do mundo maker. Entre seus recursos mais úteis estão as portas analógicas, que permitem ler sensores que variam continuamente seus valores, como potenciômetros, sensores de luz e sensores de temperatura.
Neste tutorial vamos aprender:
-
O que é um potenciômetro
-
Como funcionam as portas analógicas do ESP32
-
Quantas entradas analógicas o ESP32 DevKit possui
-
Onde essas entradas são mais utilizadas
-
Como ler um potenciômetro
-
Como mostrar o valor no display ST7735
O que é um potenciômetro
O potenciômetro é um componente eletrônico que funciona como um resistor variável. Diferente de um resistor comum, ele possui três terminais.
Dois terminais ficam nas extremidades do resistor interno e o terceiro terminal, chamado de cursor, fica ligado a um contato móvel dentro do componente.
Quando giramos o eixo do potenciômetro, esse contato móvel se desloca ao longo do resistor interno, mudando o ponto de conexão entre as extremidades. Dessa forma, a resistência entre os terminais varia conforme a posição do cursor.
Para facilitar o entendimento, podemos considerar que o potenciômetro funciona como dois resistores ligados em série:
-
RA → resistência entre o terminal superior e o cursor
-
RB → resistência entre o cursor e o terminal inferior
A resistência total é:
R = RA + RB
Potenciômetro como divisor de tensão
Uma das aplicações mais comuns do potenciômetro é funcionar como um divisor de tensão.
Quando conectamos:
-
um terminal ao 3.3V
-
outro terminal ao GND
-
e o terminal central como saída
o potenciômetro passa a gerar uma tensão variável no terminal central.
Ao girar o eixo:
-
a tensão pode variar de 0V
-
até aproximadamente 3.3V
Esse tipo de sinal é chamado de sinal analógico.
![]() |
| Diagrama mostrando como um potenciômetro de 10k funciona como divisor de tensão gerando uma saída analógica variável. |
Como funcionam as portas analógicas
No ESP32 existem dois conversores analógico-digitais chamados:
-
ADC1
-
ADC2
Eles fazem a mesma função (converter tensão analógica em valor digital), mas possuem uma diferença muito importante no funcionamento, principalmente quando usamos Wi-Fi.
ADC1 vs ADC2 no ESP32
| Característica | ADC1 | ADC2 |
|---|---|---|
| Funciona com Wi-Fi ativo | ✅ Sim | ❌ Não |
| Estabilidade da leitura | ✅ Mais estável | ⚠️ Pode falhar |
| Recomendado para sensores | ✅ Sim | ⚠️ Evitar |
| Quantidade de pinos | 6 pino | 10 pinos |
Pinos do ADC1 (recomendado)
O ADC1 funciona mesmo quando o Wi-Fi está ativo, por isso é o mais usado.
Pinos:
-
GPIO36 (VP)
-
GPIO39 (VN)
-
GPIO34
-
GPIO35
-
GPIO32
-
GPIO33
![]() |
| Principais portas analógicas do ESP32 utilizadas para leitura de sensores. |
Portas analógicas usam um circuito chamado ADC (Conversor Analógico-Digital).
Esse circuito converte uma tensão analógica em um valor digital.
No ESP32 o ADC possui resolução de 12 bits.
Isso significa que a leitura pode variar de:
0 até 4095
Exemplo de conversão:
| Tensão | Valor lido |
|---|---|
| 0V | 0 |
| 1.65V | ~2048 |
| 3.3V | 4095 |
Uso do potenciômetro com ESP32
- ajustar brilho de LEDs
- controlar velocidade de motores
- controlar volume
- ler sensores analógicos
- criar interfaces de ajuste em projetos
![]() |
| Exemplo de ligação de um potenciômetro de 10k ao ESP32. O pino central está conectado ao GPIO34 para realizar a leitura analógica. |
O que é um LDR
O LDR (Light Dependent Resistor), ou resistor dependente de luz, é um componente eletrônico cuja resistência varia conforme a intensidade luminosa que incide sobre ele.
Como funciona (explicação simples)
- No escuro: resistência alta (dificulta a passagem de corrente)
- Na luz: resistência baixa (facilita a passagem de corrente
![]() |
| LDR (fotoresistor) utilizado para detectar intensidade luminosa em projetos eletrônicos |
👉 Ou seja, quanto mais luz, menor a resistência.
Exemplo de uso comum (dia a dia)
Um uso muito comum do LDR é em:
- Lâmpadas automáticas de rua
- Luzes de jardim
- Iluminação externa
Funcionamento:
- Quando anoitece (pouca luz), o LDR aumenta a resistência → o circuito liga a lâmpada
- Quando amanhece (muita luz), a resistência diminui → o circuito desliga a lâmpada
Exemplo na robótica e maker
Um projeto clássico com LDR é o robô seguidor de luz (light follower).
Ideia:
- O robô usa 2 LDRs (um de cada lado)
- Ele compara qual lado recebe mais luz
- Move os motores para o lado mais iluminado
Aplicações:
- Robôs que seguem uma fonte de luz
- Sistemas de economia de energia (liga/desliga LEDs automaticamente)
- Estações meteorológicas simples
- Projetos com ESP32 ou Arduino Uno para ler luz no pino analógico
Exemplo simples com microcontrolador
Você pode usar um LDR com um divisor de tensão:
- LDR + resistor fixo (ex: 10kΩ)
- Ligado ao pino analógico
📊 Resultado:
- O valor lido varia conforme a luz (ex: 0 a 4095 no ESP32)
Quantas portas analógicas o ESP32 DevKit possui
O ESP32 possui 18 canais analógicos, divididos em dois conversores:
Portas ADC1 do ESP32
Usadas para leitura analógica em projetos com sensores.
-
GPIO32
-
GPIO33
-
GPIO34
-
GPIO35
-
GPIO36
-
GPIO39
✔ Funcionam mesmo com Wi-Fi ativo.
Portas ADC2 do ESP32
-
GPIO0
-
GPIO2
-
GPIO4
-
GPIO12
-
GPIO13
-
GPIO14
-
GPIO15
-
GPIO25
-
GPIO26
-
GPIO27
⚠️ Importante:
Quando o WiFi está ativo, os pinos do ADC2 podem ter conflito.
Se tentar ler com analogRead() usando Wi-Fi, pode acontecer:
-
leitura travar
-
leitura errada
-
sempre retornar 0
Por que isso acontece?
O ADC2 é compartilhado com o hardware do Wi-Fi do ESP32.
Quando o Wi-Fi está ativo, o sistema usa o ADC2 internamente e bloqueia seu uso no código.
Recomendação para projetos
Sempre que possível use ADC1.
Principalmente em projetos com:
-
Wi-Fi
-
IoT
-
ESP32 conectado à internet
Por isso, normalmente usamos os pinos do ADC1.
Exemplo comum:
GPIO34 para ler sensores
Onde as portas analógicas são usadas
Entradas analógicas são muito utilizadas para ler sensores que variam gradualmente.
Exemplos:
-
Potenciômetro
-
Sensor de luz (LDR)
-
Sensor de temperatura analógico
-
Sensor de gás
-
Joystick analógico
-
Sensores industriais
-
Monitoramento de bateria
-
Ajuste de brilho ou volume
Exemplo simples de leitura analógica
Materiais utilizados
-
ESP32 DevKit
-
Display TFT ST7735
-
Potenciômetro 10k
-
Jumpers
-
Protoboard
Resitor 10K
LDR
Ligação do potenciômetro
Potenciômetro → ESP32
-
Pino 1 → 3.3V
-
Pino 2 (central) → GPIO34
-
Pino 3 → GND
Ligação do LDR
-
Um lado do LDR → 3.3V do ESP32
- Este lado recebe a alimentação.
-
Outro lado do LDR → pino GPIO 35 (ADC)
- Esse ponto é onde o ESP32 faz a leitura analógica.
-
Resistor de 10KΩ → entre o GPIO 35 e o GND
- Esse resistor “puxa” o sinal para o terra, completando o divisor de tensão.
Ligação do display ST7735 (SPI)
Display → ESP32
| Display | ESP32 |
|---|---|
| VCC | 3.3V |
| GND | GND |
| SCL | GPIO18 |
| SDA | GPIO23 |
| RST | GPIO4 |
| DC | GPIO2 |
| CS | GPIO5 |
Código para ler o potenciômetro e mostrar no display
Bibliotecas necessárias:
-
Adafruit GFX
-
Adafruit ST7735
Instale pela biblioteca da IDE Arduino.
#include <Adafruit_GFX.h> #include <Adafruit_ST7735.h> #include <SPI.h> #define TFT_CS 5 #define TFT_RST 4 #define TFT_DC 2 #define POT_PIN 34 #define LDR_PIN 35 #define TOUCH_PIN 15 Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST); int valorADC = 0; float tensao = 0; int modoSensor = 0; // 0 = POT | 1 = LDR bool podeTrocar = true; unsigned long ultimoTempo = 0; /* ======================================== CALIBRAÇÃO DO TOUCH (IMPORTANTE) ======================================== Valores medidos: - SEM tocar: ~1271 - TOCANDO: ~150 Se o clima mudar (umidade, calor, etc), esses valores podem mudar. 👉 ONDE AJUSTAR: - limiteToque → valor para detectar TOQUE - limiteSoltou → valor para detectar que SOLTOU REGRA: limiteToque deve ser MAIOR que valor de toque (150) limiteSoltou deve ser MENOR que valor sem toque (1271) Se começar a falhar: - aumentar limiteToque (ex: 400 → 500) - aumentar limiteSoltou (ex: 600 → 700) Se ficar sensível demais: - diminuir limiteToque (ex: 400 → 300) */ const int limiteToque = 400; // 👈 AJUSTE AQUI se necessário const int limiteSoltou = 600; // 👈 AJUSTE AQUI se necessário void setup() { Serial.begin(115200); // usar para monitorar valores tft.initR(INITR_BLACKTAB); tft.setRotation(3); tft.fillScreen(ST77XX_BLACK); tft.setTextColor(ST77XX_YELLOW); tft.setTextSize(2); tft.setCursor(30,5); tft.print("ESP32 ADC"); } void loop() { // ===== LEITURA DO TOUCH ===== int valorTouch = touchRead(TOUCH_PIN); // 👉 Veja os valores no Serial para recalibrar Serial.println(valorTouch); /* ======================================== LÓGICA DE TOQUE ESTÁVEL ======================================== */ if (valorTouch < limiteToque && podeTrocar && (millis() - ultimoTempo > 500)) { modoSensor = !modoSensor; podeTrocar = false; ultimoTempo = millis(); // efeito visual tft.fillScreen(ST77XX_RED); delay(120); tft.fillScreen(ST77XX_BLACK); } // só libera quando realmente soltar if (valorTouch > limiteSoltou) { podeTrocar = true; } // ===== LEITURA DOS SENSORES ===== int leitura1, leitura2; if (modoSensor == 0) { leitura1 = analogRead(POT_PIN); delay(5); leitura2 = analogRead(POT_PIN); } else { leitura1 = analogRead(LDR_PIN); delay(5); leitura2 = analogRead(LDR_PIN); } valorADC = (leitura1 + leitura2) / 2; // ===== CONVERSÃO ===== tensao = (valorADC * 3.3) / 4095.0; // ===== DISPLAY ===== tft.fillRect(0,30,160,95,ST77XX_BLACK); tft.setTextSize(1); tft.setCursor(5,28); if (modoSensor == 0) { tft.print("MODO: POTENCIOMETRO"); } else { tft.print("MODO: LDR (LUZ)"); } tft.setTextSize(4); tft.setCursor(5,43); tft.print(valorADC); tft.setTextSize(1); tft.setCursor(5,85); tft.print("VOLTS"); tft.setTextSize(3); tft.setCursor(5,100); tft.print(tensao,2); tft.print("V"); delay(150); }
Como o código funciona
1️⃣ O ESP32 lê o valor do potenciômetro com:
analogRead()
2️⃣ O valor varia de:
0 até 4095
3️⃣ O valor é mostrado no display ST7735.
4️⃣ A tela está configurada em modo horizontal:
tft.setRotation(1);
5️⃣ O número é exibido em amarelo e grande, facilitando a visualização.
Resultado do projeto
Ao girar o potenciômetro:
-
o valor analógico muda
-
o ESP32 lê a tensão
-
o número aparece no display em tempo real
Isso cria um visualizador analógico simples, ideal para testes de sensores.
Conclusão
As portas analógicas do ESP32 são extremamente úteis para projetos que envolvem sensores e controles variáveis.
Com apenas um potenciômetro e um display TFT é possível criar interfaces visuais interessantes para:
-
instrumentos digitais
-
medidores
-
sistemas de controle
-
projetos de automação
Esse é um dos primeiros passos para entender aquisição de sinais analógicos em microcontroladores.
🔧 Acompanhe o RodRobot
Projetos maker com ESP32, Arduino, eletrônica e programação.
RodRobot – Projetos maker, eletrônica e programação na prática.






Comentários
Postar um comentário