🛠 Première entrée analogique sur ADC1
Objetivos
Leer una tensión con el convertidor analógico-digital del ESP32. Utilizaremos deliberadamente un canal del ADC1 (GPIO32 a GPIO39): el ADC2, por su parte, es inutilizable en cuanto el Wi-Fi está activo — una trampa clásica que detallaremos en el tutorial avanzado correspondiente. También descubrirás la restricción de GPIO34-39: estos pines son entradas puras, nunca salidas.
Material
- 1 placa ESP32 DevKit v1
- 1 potenciómetro de 10 kΩ (pines conectados a 3,3 V, GPIO34, GND)
- Opcional: condensador de 100 nF entre GPIO34 y GND
Código completo
const uint8_t POT_PIN = 34; // ADC1_CH6, entree seule
void setup {
Serial.begin(115200);
analogReadResolution(12); // 0..4095
analogSetPinAttenuation(POT_PIN, ADC_11db); // plage ~0 a 3,3 V
analogRead(POT_PIN); // 1er echantillon ignore
}
void loop {
uint32_t brut = analogRead(POT_PIN);
float mv = brut * 3300.0f / 4095.0f;
Serial.printf("ADC1 GPIO34 : %u -> %.0f mV\n", brut, mv);
delay(100);
}
Verificación esperada
Al girar el potenciómetro, la consola muestra un valor continuo de 0 a 4095 y la tensión correspondiente de 0 a aproximadamente 3300 mV. En reposo (dedo cerca del cursor), el valor puede fluctuar algunas unidades: es el ruido normal de un ADC de 12 bits sin filtro.
Errores frecuentes
- Usar GPIO2, 4, 12 a 15 o 17 a 19: son pines del ADC2, que fallan o devuelven 0 en cuanto funciona el Wi-Fi. Sin Wi-Fi funciona, pero nunca repitas este cableado en un producto conectado.
- Intentar un digitalWrite en GPIO34-39: estos pines son solo de entrada (input-only), sin resistencia de pull interna ni salida.
- Olvidar analogSetPinAttenuation(ADC_11db): sin esto, el rango está limitado a ~1 V y el valor se satura.
- Medir más de 3,3 V: el ESP32 no es tolerante a 5 V en sus entradas analógicas, hay que prever un divisor de tensión.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinodht22.inoArduinooled-i2c.inoArduinoserveur-web.inoArduino