Powrót do strony głównej

Semafor na ESP8266 i CH32V003: kod i schemat

Projekt edukacyjny pokojowego semafora na ESP8266 i CH32V003 demonstruje podstawową pracę z GPIO i timingami. Podano pełny kod dla Arduino IDE i WCH SDK, schematy podłączenia pinów. Nadaje się do nauki programowania embedded.

DIY semafor: ESP8266 vs CH32V003 z kodem
Advertisement 728x90

Realizacja domowego sygnalizatora świetlnego na ESP8266 i CH32V003

Podłącz moduł sygnalizatora RYG do ESP8266 lub CH32V003 i zaimplementuj podstawowy cykl przełączania: czerwony 5 s, żółty 1 s, zielony 5 s z miganiem. Projekt demonstruje konfigurację GPIO, opóźnienia i cykle bez zewnętrznych bibliotek. Idealny dla pierwszych kroków w programowaniu systemów wbudowanych.

ESP8266 używa GPIO 13 (czerwony), 12 (żółty), 14 (zielony). CH32V003 — porty PC5, PC6, PC7. Kod jest zminimalizowany, logika odpowiada rzeczywistemu sygnalizatorowi świetlnemu z przygotowaniem do przejścia.

Konfiguracja GPIO na ESP8266

Zdefiniuj piny i skonfiguruj je jako wyjścia. Użyj połączeń z rezystorami do ochrony diod LED.

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);
}

W loop() zaimplementuj sekwencję:

  • Czerwony HIGH na 5000 ms.
  • Żółty HIGH na 1000 ms, następnie LOW dla obu.
  • Zielony HIGH na 5000 ms.
  • Trzy cykle migania: HIGH 500 ms, LOW 500 ms.
  • Żółty HIGH 1000 ms, LOW.
void loop() {
  // czerwony
  digitalWrite(redLedPin, HIGH);
  delay(5000);

  // żółty
  digitalWrite(yellowLedPin, HIGH);
  delay(1000);

  digitalWrite(redLedPin, LOW);
  digitalWrite(yellowLedPin, LOW);
  
  // zielony
  digitalWrite(greenLedPin, HIGH);
  delay(5000);

  for (byte i = 0; i < 3; i++) {
    digitalWrite(greenLedPin, HIGH);
    delay(500);
    
    digitalWrite(greenLedPin, LOW);
    delay(500);
  }

  // żółty
  digitalWrite(yellowLedPin, HIGH);
  delay(1000);
  digitalWrite(yellowLedPin, LOW);
}

Podłączenie przez USB, sterowniki CH340, Arduino IDE z płytką ESP8266. Programowanie standardowe.

Przejście na CH32V003

Bardziej kompaktowy kontroler RISC-V do zadań niskoprądowych. Wymaga programatora WCH LinkE: zasilanie przez USB płytki, SWD do wgrywania. Podłącz sygnalizator do PC5 (czerwony), PC6 (żółty), PC7 (zielony).

Google AdInline article slot
/* Global define */
#define RED_LED_PIN     GPIO_Pin_5 
#define YELLOW_LED_PIN  GPIO_Pin_6
#define GREEN_LED_PIN   GPIO_Pin_7

Logika identyczna: delay_ms zamiast delay, GPIO_WriteBit. Inicjalizacja:

  • RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  • GPIO_InitTypeDef dla OutputPushPull.

Cykl loop() dostosowany do SDK WCH: sekwencja stanów z timerami. Pełny kod używa standardowych funkcji CH32V003FUN dla minimalizacji zależności.

Porównanie platform

| Parametr | ESP8266 | CH32V003 |

Google AdInline article slot

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

| Jądro | Tensilica L106 | RISC-V2A |

| Piny | GPIO12-14 | PC5-7 |

| Zasilanie | USB | USB + programator |

| Programowanie | Arduino IDE | WCH LinkE + IDE |

| Cena | Średnia | Niska |

ESP8266 łatwiejszy dla początkujących dzięki USB i ekosystemowi Arduino. CH32V003 oszczędza zasoby, ale dodaje krok programatora.

Zalety podejścia:

  • Minimalny kod bez bibliotek.
  • Łatwo modyfikować timingi.
  • Skalowalne do przycisków/czujników.

Co ważne

  • Podłączenie GPIO: Zawsze używaj rezystorów 220–330 Ω do ograniczenia prądu.
  • Timingi: delay() blokuje; dla zaawansowanych zadań — millis() lub timery.
  • Debugowanie: Monitoruj Serial do logów stanów.
  • Porty: CH32V003 — PCx dla prostoty, bez PWM na początku.
  • Skala: Dodaj FSM dla stanów zamiast sekwencyjnego loop().

Projekt powtarzalny: zamów moduł RYG, powtórz na płytce stykowej. Idealny do demonstracji podstawowego kodu embedded.

— Editorial Team

Advertisement 728x90

Czytaj dalej