ESP32 Урок 34/55 - Цветовой градиент с RGB-светодиодом и ручкой | Обучающий набор SunFounder для ESP32 IoT
В этом руководстве мы создадим эффект цветового градиента с помощью RGB-светодиода, который изменяется в зависимости от положения потенциометра (ручки). В проекте используется микроконтроллер ESP32, который имеет встроенные возможности Wi-Fi и Bluetooth, что делает его универсальным выбором для проектов Интернета вещей. Поворачивая потенциометр, мы можем плавно переходить между различными цветами, демонстрируя как функциональность RGB-светодиода, так и возможность считывания аналоговых значений с потенциометра.

Этот проект идеально подходит для изучения ШИМ (широтно-импульсной модуляции) и управления аналоговыми устройствами с помощью микроконтроллера. В ходе этого руководства мы обсудим необходимые аппаратные компоненты, инструкции по подключению и предоставим фрагменты кода, которые помогут вам реализовать проект. Для более наглядного объяснения обязательно посмотрите соответствующее видео (на видео в 02:15).
Аппаратное обеспечение
Основные компоненты, используемые в этом проекте, включают микроконтроллер ESP32, RGB-светодиод и потенциометр. ESP32 — это мощный микроконтроллер, который может выполнять различные задачи, включая беспроводную связь, что делает его подходящим для приложений Интернета вещей. RGB-светодиод состоит из трех отдельных светодиодов (красного, зеленого и синего), которые можно смешивать для получения широкого диапазона цветов. Потенциометр действует как регулируемый резистор, который обеспечивает переменное выходное напряжение в зависимости от его положения.
RGB-светодиод можно подключить в двух конфигурациях: с общим анодом или с общим катодом. В этом проекте мы будем использовать конфигурацию с общим анодом, где все аноды соединены вместе с положительным напряжением, что позволяет нам управлять яркостью каждого светодиода индивидуально с помощью ШИМ. Потенциометр будет подключен к аналоговому входу ESP32 для считывания его положения и соответствующей регулировки значений RGB.
Данные из технического описания
| Производитель | SunFounder |
|---|---|
| Номер детали | RGB LED |
| Логическое/IO напряжение | 3,3 В |
| Напряжение питания | 5 В |
| Выходной ток (на канал) | 20 мА |
| Пиковый ток (на канал) | 30 мА |
| Рекомендации по частоте ШИМ | 5 кГц |
| Пороговые значения входной логики | 0,3 В (низкий) / 2,7 В (высокий) |
| Падение напряжения / RDS(on) / насыщение | 1,8 В (тип.) |
| Тепловые пределы | Рабочая температура: от -40°C до +85°C |
| Корпус | Выводной (Through-hole) |
| Примечания / варианты | Конфигурация с общим анодом |
- Используйте резистор на 220 Ом для каждого канала светодиода, чтобы ограничить ток.
- Обеспечьте правильное напряжение питания (5 В) для RGB-светодиода.
- Подключите общий анод к положительному выводу источника питания.
- Используйте ШИМ для управления яркостью каждого цвета светодиода.
- Будьте осторожны с подключением потенциометра, чтобы избежать плавающих входов.
- Убедитесь, что ESP32 правильно запитан перед загрузкой кода.
Инструкции по подключению
Чтобы подключить RGB-светодиод и потенциометр к ESP32, начните с подключения вывода общего анода RGB-светодиода к контакту питания 3,3 В на ESP32. Красный, зеленый и синий выводы RGB-светодиода будут подключены к контактам 27, 26 и 25 соответственно. Обязательно установите резистор на 220 Ом последовательно с каждым цветным выводом светодиода, чтобы ограничить ток и защитить светодиод.
Затем подключите потенциометр к ESP32, соединив левый вывод с контактом питания 3,3 В, правый вывод с землей, а средний вывод с контактом 14 на ESP32. Эта конфигурация позволяет ESP32 считывать аналоговое напряжение с потенциометра, которое будет использоваться для изменения цвета RGB-светодиода в зависимости от его положения.
Примеры кода и пояснения
В функции setup мы определяем выводы для RGB-светодиода и потенциометра, а также инициализируем настройки ШИМ. Следующий фрагмент кода показывает, как мы настраиваем выводы RGB-светодиода:
const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;
void setup() {
ledcAttach(redPin, freq, resolution);
ledcAttach(greenPin, freq, resolution);
ledcAttach(bluePin, freq, resolution);
}
В этом фрагменте мы определяем выводы для красного, зеленого и синего светодиодов и подключаем их к каналам ШИМ с заданной частотой и разрешением.
Функция loop считывает значение потенциометра и преобразует его в значение оттенка, которое затем используется для определения значений RGB. Следующий отрывок демонстрирует этот процесс:
void loop() {
int knobValue = analogRead(KNOB_PIN);
float hueValue = (float)knobValue / 4095.0;
int hue = (int)(hueValue * 360);
int red, green, blue;
HUEtoRGB(hue, &red, &green, &blue);
setColor(red, green, blue);
}Этот код считывает аналоговое значение с потенциометра, нормализует его и вычисляет соответствующий оттенок. Затем он вызывает функцию HUEtoRGB для преобразования оттенка в значения RGB, которые передаются в функцию setColor для обновления светодиода.
Демонстрация / Что ожидать
После завершения подключения и загрузки кода вы сможете вращать потенциометр, чтобы плавно изменять цвет RGB-светодиода. При повороте ручки светодиод будет переходить через различные цвета в зависимости от значения оттенка, рассчитанного из положения ручки. Если светодиод не загорается или ведет себя неожиданно, проверьте подключение и убедитесь, что потенциометр подключен правильно (на видео на 10:45).
Временные метки видео
- 00:00 Начало
- 2:11 Введение в проект
- 4:31 RGB-светодиод
- 8:18 RGB-цвет
- 12:18 Объяснение подключения
- 17:59 Объяснение кода Arduino
- 24:12 Выбор платы ESP32 и COM-порта в Arduino IDE
- 25:54 Демонстрация
/*
* // Определите пины RGB-светодиода
*/
const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;
// Определите частоту и разрешение ШИМ.
const int freq = 5000;
const int resolution = 8;
// Определите штифт для ручки.
#define KNOB_PIN 14
void setup() {
Serial.begin(115200);
ledcAttach(redPin, freq, resolution);
ledcAttach(greenPin, freq, resolution);
ledcAttach(bluePin, freq, resolution);
}
void loop() {
// Прочитайте значение ручки.
int knobValue = analogRead(KNOB_PIN);
Serial.println(knobValue);
// Нормализуйте значение ручки в диапазоне от 0 до 1.
float hueValue = (float)knobValue / 4095.0;
// Преобразуйте нормализованное значение в значение HUE (0-360)
int hue = (int)(hueValue * 360);
// Преобразуйте значение HUE в значения RGB.
int red, green, blue;
HUEtoRGB(hue, &red, &green, &blue);
// Обновите RGB-светодиод с новыми значениями цветов.
setColor(red, green, blue);
}
void setColor(int red, int green, int blue) {
ledcWrite(redPin, red);
ledcWrite(greenPin, green);
ledcWrite(bluePin, blue);
}
// Преобразовать значение HUE в значения RGB
void HUEtoRGB(int hue, int* red, int* green, int* blue) {
float h = (float)hue / 60.0;
float c = 1.0;
float x = c * (1.0 - fabs(fmod(h, 2.0) - 1.0));
float r, g, b;
if (h < 1.0) {
r = c;
g = x;
b = 0;
} else if (h < 2.0) {
r = x;
g = c;
b = 0;
} else if (h < 3.0) {
r = 0;
g = c;
b = x;
} else if (h < 4.0) {
r = 0;
g = x;
b = c;
} else if (h < 5.0) {
r = x;
g = 0;
b = c;
} else {
r = c;
g = 0;
b = x;
}
float m = 1.0 - c;
*red = (int)((r + m) * 255);
*green = (int)((g + m) * 255);
*blue = (int)((b + m) * 255);
}
Common Course Links
Common Course Files
Ресурсы и ссылки
-
ДокументацияESP32 Учебник 34/55 - страница документа SunFounder для цветового градиентаdocs.sunfounder.com
Файлы📁
Нет доступных файлов.