#111Новичок

Управление RGB-светодиодом на ESP32

Бесконечное число цветов одним RGB-светодиодом вместо 3 отдельных. Как в Arduino, радужный переход получается заданием значений R/G/B через analogWrite(). Теория цвета (например, красный + зелёный = жёлтый) видна на практике.

4.6(29)
51 собрано
Управление RGB-светодиодом на ESP32
Один RGB-светодиод смешивает красный, зелёный и синий свет внутри себя и показывает семь цветов: красный, зелёный, синий, жёлтый, бирюзовый, пурпурный и белый. Каждый цвет горит почти секунду, затем последовательность начинается заново. Ты своими глазами видишь, что красный и зелёный вместе дают жёлтый, а все три — белый.

Видео

Схема

Управление RGB-светодиодом на ESP32 - Circuit

Исходный код

C++ (Arduino IDE)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   Управление RGB-светодиодом на ESP32
4// ─────────────────────────────────────────
5// PWM от analogWrite() управляет ножками R, G и B RGB-светодиода с общим
6// катодом и по очереди показывает 7 цветов, по 0,8 с каждый.
7//
8// Пины:
9//   GPIO 5  -> Ножка R
10//   GPIO 18 -> Ножка G
11//   GPIO 19 -> Ножка B
12//   GND     -> Общий катод (самая длинная ножка)
13//   Каждая из R, G, B с резистором 330 ohm
14
15const int RED = 5;
16const int GREEN = 18;
17const int BLUE = 19;
18
19void setup() {
20  pinMode(RED, OUTPUT);
21  pinMode(GREEN, OUTPUT);
22  pinMode(BLUE, OUTPUT);
23}
24
25// Задать цвет, каждый канал 0-255
26void setColor(int r, int g, int b) {
27  analogWrite(RED, r);
28  analogWrite(GREEN, g);
29  analogWrite(BLUE, b);
30}
31
32void loop() {
33  setColor(255, 0, 0);   delay(800); // Красный
34  setColor(0, 255, 0);   delay(800); // Зелёный
35  setColor(0, 0, 255);   delay(800); // Синий
36  setColor(255, 255, 0); delay(800); // Жёлтый
37  setColor(0, 255, 255); delay(800); // Голубой
38  setColor(255, 0, 255); delay(800); // Пурпурный
39  setColor(255, 255, 255); delay(800); // Белый
40}
41

Частые вопросы

Почему красный и зелёный вместе дают жёлтый?

Цвета света смешиваются аддитивно: красный + зелёный = жёлтый, зелёный + синий = голубой, красный + синий = пурпурный; все три вместе дают белый. Промежуточные цвета получаются подбором соотношений через PWM.

У меня RGB-светодиод с общим анодом — в чём разница?

Общий вывод подключается к 3,3 V, а значения инвертированы: 0 — полная яркость, 255 — выключено. В коде просто используй `analogWrite(pin, 255 - value)`.

Цвета выглядят неправильно — почему?

У каждого цвета своё прямое напряжение и яркость; при 3,3 V синий и зелёный могут казаться тусклее красного. Баланс можно подправить, немного увеличив сопротивление для красного или применив коэффициент в программе.

Можно ли выбирать цвет на телефоне?

Да, на ESP32 можно добавить на веб-страницу выбор цвета, перевести выбранное значение в R, G и B и применить к светодиоду. Это основа проектов умного света.