# Construye un semáforo de sala con ESP8266 y CH32V003
Conecta un módulo de semáforo RYG a un ESP8266 o CH32V003 e implementa un ciclo básico: rojo por 5 segundos, amarillo por 1 segundo, verde por 5 segundos con parpadeo. Este proyecto muestra la configuración de GPIO, retardos y bucles sin bibliotecas externas. Perfecto para tus primeros pasos en desarrollo embebido.
ESP8266 usa GPIO 13 (rojo), 12 (amarillo), 14 (verde). CH32V003 usa puertos PC5, PC6, PC7. El código es directo, imitando un semáforo real con preparación de transiciones.
Configuración de GPIO en ESP8266
Define los pines y configúralos como salidas. Usa resistencias limitadoras de corriente para proteger los LEDs.
const byte redLedPin = 14;
const byte yellowLedPin = 12;
const byte greenLedPin = 13;
void setup() {
pinMode(redLedPin, OUTPUT);
pinMode(yellowLedPin, OUTPUT);
pinMode(greenLedPin, OUTPUT);
}
En loop(), ejecuta esta secuencia:
- Rojo ALTO por 5000 ms.
- Amarillo ALTO por 1000 ms, luego BAJO para ambos.
- Verde ALTO por 5000 ms.
- Tres ciclos de parpadeo: ALTO 500 ms, BAJO 500 ms.
- Amarillo ALTO 1000 ms, luego BAJO.
void loop() {
// rojo
digitalWrite(redLedPin, HIGH);
delay(5000);
// amarillo
digitalWrite(yellowLedPin, HIGH);
delay(1000);
digitalWrite(redLedPin, LOW);
digitalWrite(yellowLedPin, LOW);
// verde
digitalWrite(greenLedPin, HIGH);
delay(5000);
for (byte i = 0; i < 3; i++) {
digitalWrite(greenLedPin, HIGH);
delay(500);
digitalWrite(greenLedPin, LOW);
delay(500);
}
// amarillo
digitalWrite(yellowLedPin, HIGH);
delay(1000);
digitalWrite(yellowLedPin, LOW);
}
Conéctalo por USB con drivers CH340 y Arduino IDE con el paquete de placas ESP8266. Graba como siempre.
Cambio a CH32V003
Un microcontrolador RISC-V compacto para tareas de bajo consumo. Necesita un programador WCH LinkE: alimentación USB para la placa, SWD para grabar. Conecta el semáforo a PC5 (rojo), PC6 (amarillo), PC7 (verde).
/* Definiciones globales */
#define RED_LED_PIN GPIO_Pin_5
#define YELLOW_LED_PIN GPIO_Pin_6
#define GREEN_LED_PIN GPIO_Pin_7
La lógica es la misma: delay_ms en lugar de delay, GPIO_WriteBit. Inicialización:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);GPIO_InitTypeDefpara OutputPushPull.
El loop() se adapta al SDK de WCH: secuencia de estados con temporizadores. El código completo usa funciones estándar de CH32V003FUN para minimizar dependencias.
Comparación de plataformas
| Parámetro | ESP8266 | CH32V003 |
|----------|---------|----------|
| Núcleo | Tensilica L106 | RISC-V2A |
| Pines | GPIO12-14 | PC5-7 |
| Alimentación | USB | USB + programador |
| Grabación | Arduino IDE | WCH LinkE + IDE |
| Precio | Medio | Bajo |
ESP8266 es ideal para principiantes gracias al USB y el ecosistema Arduino. CH32V003 ahorra recursos, pero requiere programador.
Beneficios clave:
- Código mínimo, sin bibliotecas.
- Fácil ajustar tiempos.
- Escalable a botones o sensores.
Consejos clave
- Cableado GPIO: Siempre usa resistencias de 220–330 ohmios para limitar corriente.
- Tiempos:
delay()bloquea la CPU; para proyectos avanzados, usamillis()o temporizadores. - Depuración: Monitorea Serial para logs de estados.
- Puertos: Quédate con PCx en CH32V003 por simplicidad —sin PWM al inicio.
- Escalado: Agrega una máquina de estados finitos (FSM) para estados en lugar de bucle lineal.
Este proyecto es fácil de replicar: consigue un módulo RYG y móntalo en protoboard. Ideal para mostrar programación embebida básica.
— Editorial Team
Aún no hay comentarios.