
BermejaSat #2: Primeras salidas digitales — un semáforo de tres luces
Introducción
Tras domar la pantalla en la primera entrada, tocaba el siguiente escalón natural: controlar algo físico desde el código, no solo mostrar texto en un cristal. Para ello usamos un módulo de semáforo de 3 LEDs (rojo, ámbar, verde) de 4 pines — el ejercicio clásico de introducción a las salidas digitales, y una buena excusa para hablar con el alumnado de máquinas de estados, un concepto que reaparecerá cuando programemos las distintas fases de la misión del CanSat: preparación en la rampa, lanzamiento, descenso libre, apertura del paracaídas, aterrizaje.
🔬 Lo importante no es el semáforo, es elegir bien los pines
Con la pantalla OLED y el módulo LoRa ya ocupando parte de los pines de la placa, conectar tres cables más “a lo que sea” es la receta perfecta para que nada funcione — o peor, para que algo deje de funcionar sin que se entienda por qué. Antes de tocar el cableado, hicimos el inventario de qué estaba ya comprometido en nuestra LILYGO LoRa V1.3:
- GPIO21 y GPIO22 → pantalla OLED (bus I2C)
- GPIO5, 18, 19, 27, 14/23 y 26 → módulo de radio LoRa (bus SPI + líneas de control)
- GPIO1 y GPIO3 → puerto USB / Monitor Serie (TX0/RX0)
A eso hay que sumar una categoría de pines que conviene evitar aunque estén libres: los pines de arranque (GPIO 0, 2, 12 y 15). En el ESP32, estos pines tienen un papel especial en el momento exacto de encender la placa — si algo externo los fuerza a un nivel de voltaje concreto justo en ese instante, pueden hacer que la placa arranque en un modo incorrecto o directamente no arranque. No es que vayan a romper nada conectando un LED, pero sí pueden dar problemas intermitentes difíciles de diagnosticar, así que los descartamos por sistema.
Con todo eso descartado, elegimos tres pines de uso general, libres y sin ninguna función especial de arranque:
| Color | Pin |
|---|---|
| Rojo | GPIO4 |
| Ámbar | GPIO13 |
| Verde | GPIO25 |
| GND | cualquier pin GND de la placa |
Paso 1: El código
cpp
#define PIN_ROJO 4
#define PIN_AMARILLO 13
#define PIN_VERDE 25
void setup() {
Serial.begin(115200);
pinMode(PIN_ROJO, OUTPUT);
pinMode(PIN_AMARILLO, OUTPUT);
pinMode(PIN_VERDE, OUTPUT);
digitalWrite(PIN_ROJO, LOW);
digitalWrite(PIN_AMARILLO, LOW);
digitalWrite(PIN_VERDE, LOW);
Serial.println("Semaforo listo.");
}
void loop() {
// --- ROJO ---
Serial.println("ROJO");
digitalWrite(PIN_ROJO, HIGH);
delay(2000);
digitalWrite(PIN_ROJO, LOW);
// --- ROJO + AMARILLO (a punto de arrancar) ---
Serial.println("ROJO + AMARILLO");
digitalWrite(PIN_ROJO, HIGH);
digitalWrite(PIN_AMARILLO, HIGH);
delay(1000);
digitalWrite(PIN_ROJO, LOW);
digitalWrite(PIN_AMARILLO, LOW);
// --- VERDE ---
Serial.println("VERDE");
digitalWrite(PIN_VERDE, HIGH);
delay(2000);
digitalWrite(PIN_VERDE, LOW);
// --- AMARILLO (precaucion) ---
Serial.println("AMARILLO");
digitalWrite(PIN_AMARILLO, HIGH);
delay(1000);
digitalWrite(PIN_AMARILLO, LOW);
}
Paso 2: Conexión y resultado
Con el GND del módulo a cualquier pin GND de la placa, y R/Y/G a los pines 4, 13 y 25 respectivamente, el semáforo ejecuta la secuencia real de un cruce: rojo → rojo+ámbar → verde → ámbar → rojo… Funcionó a la primera, sin sorpresas — la recompensa de haber razonado los pines antes de conectar nada, en vez de conectar y cruzar los dedos.
Conclusión pedagógica
Este ejercicio, aunque sencillo, encierra una lección que se repetirá durante todo BermejaSat: en un proyecto con varios subsistemas compartiendo la misma placa (pantalla, radio, sensores, actuadores), la gestión de pines deja de ser un detalle técnico menor y pasa a ser una decisión de diseño. Un buen mapa de pines, hecho con criterio antes de conectar un solo cable, ahorra horas de depuración a ciegas más adelante — sobre todo cuando lleguemos a los sensores de la misión primaria (presión y temperatura) y compartan bus I2C con la pantalla.
En la próxima entrada: lectura del sensor de presión y temperatura (la misión primaria oficial de CanSat) y primer envío de datos reales por radio LoRa entre dos placas.
Etiqueta:AIDARAC, BermejaSat, cansat, ESA, esp32, GPIO, Heltec, ies monterroso, leds, LILYGO, máquina de estados, montesteam



