Volver al inicio

Semáforo en ESP8266 y CH32V003: Código y Esquema

Proyecto educativo de semáforo de sala en ESP8266 y CH32V003 demuestra el trabajo básico con GPIO y temporizaciones. Código completo para Arduino IDE y WCH SDK, esquemas de conexión de pines proporcionados. Adecuado para estudiar programación embebida.

Semáforo DIY: ESP8266 vs CH32V003 con código
Advertisement 728x90

# 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.

Google AdInline article slot
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).

Google AdInline article slot
/* 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_InitTypeDef para 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 |

Google AdInline article slot

|----------|---------|----------|

| 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, usa millis() 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

Advertisement 728x90

Leer después