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.
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).
/* 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 |
|----------|---------|----------|
| 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
Brak komentarzy.