
BermejaSat #3: Midiendo la atmósfera — Sensor AM2302 (DHT22) y telemetría en pantalla OLED
Introducción
Tras encender la pantalla OLED en la primera entrada y domar las salidas digitales en la segunda, llegamos al corazón de cualquier proyecto aeroespacial: escuchar al entorno. La misión primaria oficial de CanSat exige medir parámetros ambientales durante el descenso de la sonda. Hoy damos el primer paso integrando nuestro primer sensor ambiental: el ASAIR AM2302 (la versión encapsulada de alta precisión del popular DHT22), capaz de medir temperatura y humedad relativa.
Siguiendo la filosofía de trabajo del taller de ingeniería —aislar componentes antes de integrarlos todos juntos—, hemos retirado temporalmente el módulo de semáforo de la entrada anterior. Probar los sensores de forma independiente nos permite verificar que la lectura de datos es limpia y que las librerías no entran en conflicto con la pantalla OLED ni con la radio LoRa.
🔬 El hardware: Sensor ASAIR AM2302 / DHT22
El AM2302 utiliza un protocolo digital One-Wire propietario sobre un único hilo de datos. A diferencia de los sensores analógicos simples, este módulo integra un pequeño chip en su interior que convierte las mediciones de capacitancia y resistencia térmica en una señal digital calibrada de 16 bits.
Selección de pines sin conflictos
Con el bus I2C asignado a la pantalla OLED (GPIO21 y GPIO22) y el bus SPI reservado para la radio LoRa, buscamos un pin digital puro que no interfiera con los pines de arranque (strapping pins) de la placa LILYGO LoRa V1.3:
| Componente | Línea | Pin en ESP32 / LILYGO LoRa V1.3 | Observaciones |
| Pantalla OLED | SDA / SCL | GPIO 21 / GPIO 22 | Bus I2C |
| Sensor AM2302 | VCC (Rojo) | 3V3 (o 5V) | Alimentación estable |
| DATA (Amarillo/Blanco) | GPIO 17 | Entrada/Salida Digital | |
| GND (Negro) | GND | Masa común |
💡 ¿Por qué dio más guerra con Heltec v3? (Un apunte de arquitectura)
Si intentas migrar este mismo montaje a una placa Heltec WiFi LoRa 32 (V3) y no lee a la primera, no te frustres: es un tropiezo habitual en el aula debido a dos diferencias de diseño fundamentales entre microcontroladores:
- El pin de alimentación
Vext(Power Control): Las placas Heltec V3 incluyen un transistor para cortar la energía a los componentes externos y ahorrar batería. Para alimentar sensores desde sus pines de 3.3V, es necesario activar explícitamente el pinVext(GPIO 36) en elsetup()poniendo ese pin enLOW. Sin esa línea de código, el sensor simplemente no recibe corriente. - Cambio de arquitectura (ESP32-D0WDQ6 vs ESP32-S3): La LILYGO V1.3 usa el ESP32 clásico, mientras que la Heltec V3 monta el chip ESP32-S3. Las temporizaciones a nivel de microsegundos que usa el protocolo One-Wire del AM2302 cambian entre ambas arquitecturas, lo que a veces requiere ajustar la tolerancia de la librería
DHT.ho utilizar librerías optimizadas para el S3 comoDHT_nonblocking.
Paso 1: Librerías necesarias
En el entorno Arduino IDE, instalamos a través del Gestor de Bibliotecas (Ctrl + Shift + I):
- DHT sensor library (de Adafruit).
- Adafruit SSD1306 y Adafruit GFX (ya instaladas en la Entrada #1).
Paso 2: El Código Firmware (C++)
Este sketch lee la humedad y temperatura cada 2 segundos (el tiempo mínimo de refresco térmico que exige el AM2302 para no auto-calentarse) y genera una interfaz de telemetría limpia en la pantalla OLED.
C++
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>
// --- Configuración OLED (LILYGO LoRa V1.3) ---
#define OLED_SDA 21
#define OLED_SCL 22
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// --- Configuración Sensor AM2302 / DHT22 ---
#define DHTPIN 17
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
Wire.begin(OLED_SDA, OLED_SCL);
// Inicializar Pantalla OLED
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("Error: No se encuentra la pantalla OLED.");
}
display.clearDisplay();
// Inicializar Sensor AM2302
dht.begin();
Serial.println("BermejaSat: Sensor AM2302 inicializado correctamente.");
}
void loop() {
// El AM2302 requiere 2 segundos entre lecturas estables
delay(2000);
float humedad = dht.readHumidity();
float temp = dht.readTemperature();
// Gestión de errores de lectura
if (isnan(humedad) || isnan(temp)) {
Serial.println("Error de lectura en el AM2302. Revisa el cableado.");
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("ERROR AM2302");
display.println("Sin senal en GPIO 17");
display.display();
return;
}
// --- Salida por Monitor Serie ---
Serial.print("Humedad: ");
Serial.print(humedad, 1);
Serial.print(" % | Temp: ");
Serial.print(temp, 1);
Serial.println(" °C");
// --- Salida Formateada por Pantalla OLED ---
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
// Encabezado con línea divisoria
display.setTextSize(1);
display.setCursor(0, 0);
display.println("BERMEJASAT - TELEMETRIA");
display.drawLine(0, 10, 128, 10, SSD1306_WHITE);
// Bloque Temperatura
display.setCursor(0, 20);
display.print("Temp: ");
display.setTextSize(2);
display.setCursor(48, 18);
display.print(temp, 1);
display.setTextSize(1);
display.print(" C");
// Bloque Humedad
display.setTextSize(1);
display.setCursor(0, 45);
display.print("Hum: ");
display.setTextSize(2);
display.setCursor(48, 43);
display.print(humedad, 1);
display.setTextSize(1);
display.print(" %");
display.display();
}
Conclusión pedagógica
Ver aparecer los primeros valores reales de temperatura y humedad en el cristal de la pantalla OLED produce un “efecto magia” inmediato en el alumnado. Sin embargo, el valor educativo fundamental de esta sesión ha sido entender que el software debe adaptarse al ritmo físico de la materia: no podemos pedirle datos al AM2302 a la velocidad de reloj del microcontrolador (80 MHz), sino respetando sus 2 segundos de latencia térmica.
En la próxima entrada: integraremos el barómetro BMP280 para medir presión atmosférica y calcular la altitud en tiempo real, completando la suite de sensores de nuestra misión primaria.
Ficha Metadatos para el Blog (MonteSteam)
- Slug:
bermejasat-3-sensor-am2302-dht22-telemetria-oled-esp32 - Extracto: Tercera entrada de BermejaSat: conectamos el sensor de temperatura y humedad ASAIR AM2302 al ESP32, mostramos la telemetría en la pantalla OLED y analizamos por qué varían las configuraciones entre las placas LILYGO y Heltec V3.
- Palabras clave: BermejaSat, CanSat, ESA, ESP32, AM2302, DHT22, Telemetría, OLED, Heltec V3, LILYGO, MonteSteam, IES Monterroso, AIDARAC.
Etiquetas: AIDARAC, BermejaSat, CanSat, ESA, ies monterroso, montesteam, Arduino, ESP32, AM2302, DHT22, Telemetría, Investigación Aeroespacial

Etiqueta:AIDARAC, AM2302, BermejaSat, cansat, DHT22, ESA, esp32, heltec v3, ies monterroso, LILYGO, montesteam, OLED, Telemetría



