Данная статья имеет шуточный характер. На самом деле я заказал случайно не тот модуль (хотел RGB модуль, а взял RYG модуль), потом решил, раз я его взял сделаю учебный проект.

ESP8266

Собственно это первая версия светофора на Arduino и ESP8266. Странно, конечно, получилось такой мощный микроконтроллер использовать для такой задачи, но проект учебный, так чтобы да?

Версия на ESP8266
Версия на ESP8266

Сам проект находится в общем доступе тут https://github.com/Levon24/esp8266-traffic-light/ и работает он не совсем верно по логике переключения, но для учебного проекта, наверное, подойдет.

Для начала определяем к каким контактам какой цвет подсоединяется. Удобнее всего было подсоединить модуль светофора к GPIO 13 (красный), GPIO 12 (желтый) и GPIO 14 (зеленый).

esp8266
esp8266
const byte redLedPin = 14;
const byte yelowLedPin = 12;
const byte greenLedPin = 13;

Собственно выше по коду и определены контакты к которым подсоединены светодиоды через отграничивающие резисторы. Далее пины настраиваем на выход кодом ниже.

void setup() {
  pinMode(redLedPin, OUTPUT);
  pinMode(yelowLedPin, OUTPUT);
  pinMode(greenLedPin, OUTPUT);
}

Основной алгоритм расположен в основном цикле, начиная с красного цвета.

  • Зажигаем красный цвет, ждем 5 секунд.

  • Зажигаем желтый цвет, ждем 1 секунду.

  • Гасим красный и желтый сигнал

  • Зажигаем зеленый цвет, ждем 5 секунд.

  • В цикле 3 раза мигаем зеленым цветом.

  • Зажигаем желтый цвет, ждем 1 секунду и гасим его.

void loop() {
  // red
  digitalWrite(redLedPin, HIGH);
  delay(5000);

  // yelow
  digitalWrite(yelowLedPin, HIGH);
  delay(1000);

  digitalWrite(redLedPin, LOW);
  digitalWrite(yelowLedPin, LOW);
  
  // green
  digitalWrite(greenLedPin, HIGH);
  delay(5000);

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

  // yelow
  digitalWrite(yelowLedPin, HIGH);
  delay(1000);
  digitalWrite(yelowLedPin, LOW);
}

Подключается ESP8266 к PC через обычный USB шнурок и для USB-COM ставится драйвер, потом ставится Arduino и подключается репозиторий esp8266, инструкцию можно найти в интернете, например, тут: https://wiki.iarduino.ru/page/wemos_start/.

CH32V003

Ниже представлен вариант на CH32V003 как более бюджетном варианте. Однако для его прошивки потребуется программатор WCH LinkE для подключения и прошивки. USB разъем на плате для питания. Собственно на фотографии ниже и показано подключение программатора с питанием.

ch32v003
ch32v003

В данном случае, удобнее было подсоединить сигналы светофора к линиям порта С.

  • Красный свет соединен порт С pin 5.

  • Желтый свет соединен порт С pin 6.

  • Зеленый свет соединен порт С pin 7.

/* Global define */
#define RED_LED_PIN     GPIO_Pin_5 
#define YELLOW_LED_PIN  GPIO_Pin_6
#define GREEN_LED_PIN   GPIO_Pin_7

Исходники проекта находятся тут https://github.com/Levon24/ch32v003-traffic-light и доступны для самостоятельного изучения. Код аналогичен коду на Arduino, но со своими особенностями.

Заключение

Собственно случайная покупка не того модуля дала дорогу 2 учебным проектам. Делались они скорее ради забавы, чтобы кто боится делать свои первые шаги в программировании мог бы заказать детали и повторить домашний светофор у себя дома. Всем мира и добра.