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.

ESP32 DevKit realizando leitura analógica de potenciômetro e exibindo valores 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.

Explicação visual de como funciona um potenciômetro de 10k com saída variável usado em microcontroladores como ESP32
Diagrama mostrando como um potenciômetro de 10k funciona como divisor de tensão gerando uma saída analógica variável.

O ESP32 consegue ler essa variação usando uma porta analógica.

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ísticaADC1ADC2
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

Esses são os melhores pinos para sensores analógicos.

Portas analógicas do ESP32 DevKit destacando GPIO32, GPIO33, GPIO34 e GPIO35
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

No ESP32, o terminal central do potenciômetro pode ser conectado a uma porta analógica (ADC).

Por exemplo:

Pino 1 → 3.3V
Pino 2 (central) → GPIO34
Pino 3 → GND

O conversor analógico do ESP32 transforma essa tensão em um valor digital que varia de:

0 até 4095

Isso permite utilizar o potenciômetro para:
  • ajustar brilho de LEDs
  • controlar velocidade de motores
  • controlar volume
  • ler sensores analógicos
  • criar interfaces de ajuste em projetos
Ligação de potenciômetro no ESP32 DevKit usando 3.3V, GND e entrada analógica GPIO34
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
sensor LDR fotoresistor componente eletrônico sensível à luz
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


circuito ESP32 com sensor LDR no GPIO35 leitura ADC botão touch GPIO15 e display TFT exibindo valores de tensão

Projeto com ESP32 utilizando sensor LDR para leitura analógica (ADC no GPIO35), botão touch no GPIO15 e um display TFT para exibição dos valores em tempo real, ideal para aplicações em automação e robótica.

Ligação do potenciômetro

Potenciômetro  → ESP32

  • Pino 1 → 3.3V

  • Pino 2 (central) → GPIO34

  • Pino 3 → GND

Ligação do LDR

  1. Um lado do LDR      →     3.3V do ESP32
    • Este lado recebe a alimentação.
  2. Outro lado do LDR   →   pino GPIO 35 (ADC)
    • Esse ponto é onde o ESP32 faz a leitura analógica.
  3. 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

DisplayESP32
VCC3.3V
GNDGND
SCLGPIO18
SDAGPIO23
RSTGPIO4
DCGPIO2
CSGPIO5

👉 Caso você ainda não tenha configurado o display TFT ST7735 no ESP32, veja também o tutorial completo onde explico como fazer a ligação e inicialização do display utilizando a biblioteca Adafruit.

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

Postagens mais visitadas deste blog

ESP32 Botão Touch: Como Usar o Sensor Touch (Tutorial com LED e Relé)

1. Como Medir a Intensidade do Sinal Wi-Fi no ESP32 (RSSI em dBm) (Código e Projeto) - com Display OLED SSD1306