El ESP32 es un microcontrolador con WiFi y Bluetooth integrado, muy potente y con entradas ADC (convertidor analógico-digital) que permiten leer voltajes y convertirlos en valores numéricos. El LM35 es un sensor de temperatura analógico cuya salida es directamente proporcional a la temperatura en grados Celsius: 10 mV/°C.
En este post aprenderemos a conectar el sensor LM35 a un puerto ADC del ESP32 para poder leer y mostrar la temperatura por la consola.
Prerequisitos
| Proyecto | Descripción |
|---|---|
| Conversor análogo a digital | Este post proporciona una breve panorámica del procesamiento digital de la señal, donde vamos a centrarnos principalmente en las características del sistema ideal y también mencionaremos algunos métodos de conversion A/D. |
| LM35 datasheet | En este post encontrara la hoja de datos del lm35, describimos el elementos, sus características y la forma de conexión |
| analogRead() | Contienen un convertidor de analógico a digital multicanal de 10 bits. Esto significa que mapeará voltajes de entrada entre 0 y el voltaje de operación (5V o 3.3V) en valores enteros entre 0 y 1023. |
Conversión análogo a digital
He creado un post completo en donde realizamos la explicación de Conversor análogo a digital, damos los conceptos básicos y el paso a paso teórico en donde mostramos como de una señal análoga creamos los valores digitales, recomiendo leer un poco de este tema antes de continuar.
🔹 ESP32
Puede revisar los pines y caracteristicas adicionales del ESP32 en si Hoja de dato esp32
🧠 ¿Qué son los pines analógicos en el ESP32?
El ESP32 cuenta con 18 entradas analógicas distribuidas en dos ADCs (ADC1 y ADC2). Puedes usar cualquiera de los siguientes pines para leer valores analógicos:
Pines ADC1 (recomendados):
- GPIO 32
- GPIO 33
- GPIO 34
- GPIO 35
- GPIO 36
- GPIO 39
LM35
- El LM35 mide la temperatura interna y genera una señal de salida analógica (tensión continua).
- La relación es 10 mV por cada °C.
- Ejemplo:
- 25 °C → 250 mV
- 100 °C → 1 000 mV (1 V)
Para mas detalles, tenemos la hoja de datos de este componente para que tambien le den un repaso antes de seguir con el circuito.
Componentes necesarios
| Componente | Cantidad | Descripción |
|---|---|---|
| ESP32 | 1 | Placa de desarrollo (DOIT DevKit V1, NodeMCU-32S, etc.) |
| Sensor LM35 | 1 | Sensor de temperatura analógico |
| Protoboard | 1 | Para montar el circuito sin soldar |
| Cables jumper | 3 | Macho-macho |
| Capacitor 100 nF (opcional) | 1 | Entre salida y GND para filtrar ruido |
Conexión LM35 con ESP32
El ESP32 funciona con 3.3V lógicos, pero su ADC puede leer hasta 3.3V en la entrada. Como el LM35 genera 10 mV/°C, incluso a 150°C serían solo 1.5V, así que no hay problema.
Conexión:
| LM35 | ESP32 |
|---|---|
| Vcc | 3V3 |
| GND | GND |
| Vout | GPIO34 (ADC1_CH6) |
⚠️ Usamos un pin ADC recomendado como GPIO34, 35, 36 o 39, ya que son solo de entrada y no generan conflictos.
Esquema básico:
LM35 ESP32
(1) Vcc → 3.3V
(2) Vout → GPIO34
(3) GND → GND
(Si quieres estabilidad, coloca un capacitor de 100 nF entre Vout y GND)
Código para ESP32 (Arduino IDE)
// Pin donde conectamos el LM35
const int pinLM35 = 34; // GPIO34 (entrada ADC)
// Resolución ADC del ESP32
const float VREF = 3.3; // Voltaje de referencia del ADC
const int ADC_RES = 4095; // Resolución de 12 bits (0-4095)
void setup() {
Serial.begin(115200);
}
void loop() {
// Leer valor ADC
int lecturaADC = analogRead(pinLM35);
// Convertir a voltaje
float voltaje = (lecturaADC * VREF) / ADC_RES;
// Convertir voltaje a temperatura
float temperaturaC = voltaje * 100.0; // LM35: 10mV = 0.01V por °C
// Mostrar resultados
Serial.print("ADC: ");
Serial.print(lecturaADC);
Serial.print(" | Voltaje: ");
Serial.print(voltaje, 3);
Serial.print(" V | Temp: ");
Serial.print(temperaturaC, 2);
Serial.println(" °C");
delay(1000); // Esperar 1 segundo
}
Explicación del código
- pinLM35 → define el pin GPIO34 como entrada ADC.
- VREF y ADC_RES → valores para calcular el voltaje real leído.
analogRead()→ obtiene un valor entre 0 y 4095 (resolución de 12 bits en ESP32).- Conversión:
lecturaADC → voltajeusando regla de tres: Voltaje = (lecturaADC×VREF) / ADC_RESVoltajevoltaje → temperaturamultiplicando por 100 (porque 1°C = 0.01 V).
- Se envían los valores por Serial Monitor para ver en tiempo real.
Resultado esperado
En el Serial Monitor (115200 baudios) deberías ver algo así:
ADC: 315 | Voltaje: 0.254 V | Temp: 25.40 °C
ADC: 317 | Voltaje: 0.256 V | Temp: 25.60 °C
ADC: 320 | Voltaje: 0.258 V | Temp: 25.80 °C
Si calientas el sensor con los dedos o acercas una fuente de calor, el voltaje y la temperatura subirán gradualmente.