RGB-светодиод: подключение к ESP32 и Arduino

Трёхцветный светодиод

Три кристалла в одном корпусе: смешивая красный, зелёный и синий по ШИМ, получаете любой цвет.

Как работает

У RGB-светодиода четыре вывода: три цвета и общий. Бывает общий катод (общий на землю, цвет горит от HIGH) и общий анод (общий на питание, цвет горит от LOW — управление инвертировано).

Яркость каждого цвета задают ШИМ: analogWrite(вывод, 0..255) на Arduino; на ESP32 — тоже analogWrite в ядре 2.x/3.x или ledcWrite. Смешение: красный + зелёный = жёлтый, все три — белый (обычно с оттенком).

Выводы

ВыводНазначение
Bсиний
COMобщий: катод (на GND) или анод (на питание)
Gзелёный
Rкрасный

Подключение к ESP32

RGB-светодиодESP32
BGPIO27
COMGND
GGPIO26
RGPIO25

Схема из примера «RGB: перебор цветов».

RGB: перебор цветов

Открыть пример целиком
Код скетча
const int R = 25, G = 26, B = 27;

void setColor(int r, int g, int b) {
  ledcWrite(0, r);
  ledcWrite(1, g);
  ledcWrite(2, b);
}

void setup() {
  ledcSetup(0, 5000, 8); ledcAttachPin(R, 0);
  ledcSetup(1, 5000, 8); ledcAttachPin(G, 1);
  ledcSetup(2, 5000, 8); ledcAttachPin(B, 2);
}

void loop() {
  setColor(255, 0, 0); delay(600);
  setColor(0, 255, 0); delay(600);
  setColor(0, 0, 255); delay(600);
  setColor(255, 255, 0); delay(600);
  setColor(0, 255, 255); delay(600);
  setColor(255, 0, 255); delay(600);
}

Подключение к Arduino Uno

RGB-светодиодArduino Uno
BD11
COMGND
GD10
RD9

Схема из примера «Arduino Uno: RGB-светодиод и три канала ШИМ».

Arduino Uno: RGB-светодиод и три канала ШИМ

Открыть пример целиком
Код скетча
// Плавный перебор цветов на трёх выводах с ШИМ.
//
// Выводы выбраны не случайно: 9, 10 и 11 — из шести, у которых на Uno
// есть аппаратный ШИМ. Всего их 3, 5, 6, 9, 10 и 11, и один
// RGB-светодиод забирает половину.
//
// Сборка с общим катодом: 255 — канал в полную силу. У сборки с общим
// анодом всё наоборот, и подключать её надо к питанию, а числа
// вычитать из 255.

const int RED = 9;
const int GREEN = 10;
const int BLUE = 11;

void setColor(int r, int g, int b) {
  analogWrite(RED, r);
  analogWrite(GREEN, g);
  analogWrite(BLUE, b);
}

void setup() {
  pinMode(RED, OUTPUT);
  pinMode(GREEN, OUTPUT);
  pinMode(BLUE, OUTPUT);
}

void loop() {
  // Круг по цветовому колесу: один канал растёт, другой падает,
  // третий выключен.
  for (int i = 0; i <= 255; i += 5) { setColor(255 - i, i, 0); delay(15); }
  for (int i = 0; i <= 255; i += 5) { setColor(0, 255 - i, i); delay(15); }
  for (int i = 0; i <= 255; i += 5) { setColor(i, 0, 255 - i); delay(15); }
}

В железе

Резистор нужен на каждый цвет отдельно — у кристаллов разное падение. Посчитайте их калькулятором резистора для светодиода: для красного номинал больше, чем для зелёного и синего.

Частые ошибки

Другие детали