ESP32 Упатство 34/55 - Градиент на бои со RGB LED и копче | SunFounder's ESP32 IoT комплет за учење
Во ова упатство, ќе создадеме ефект на градиент на бои користејќи RGB LED што се прилагодува врз основа на позицијата на потенциометар (копче). Проектот користи ESP32 микроконтролер, кој обезбедува вградени Wi-Fi и Bluetooth можности, што го прави разновиден избор за IoT проекти. Со вртење на потенциометарот, можеме непречено да преминуваме помеѓу различни бои, демонстрирајќи ја и функционалноста на RGB LED и способноста за читање аналогни вредности од потенциометарот.

Овој проект е идеален за учење за PWM (Pulse Width Modulation) и како да се контролираат аналогни уреди со микроконтролер. Низ ова упатство, ќе ги разгледаме потребните хардверски компоненти, инструкциите за поврзување и ќе обезбедиме код фрагменти за да ви помогнеме да го имплементирате проектот. За повизуелно објаснување, задолжително погледнете го придружното видео (во видео на 02:15).
Објаснување на хардверот
Главните компоненти користени во овој проект вклучуваат ESP32 микроконтролер, RGB LED и потенциометар. ESP32 е моќен микроконтролер кој може да се справи со различни задачи, вклучувајќи безжична комуникација, што го прави погоден за IoT апликации. RGB LED се состои од три поединечни LED диоди (црвена, зелена и сина) кои можат да се мешаат за да произведат широк опсег на бои. Потенциометарот дејствува како прилагодлив отпорник кој обезбедува променлив напонски излез врз основа на неговата позиција.
RGB LED може да се поврзе во две конфигурации: заедничка анода или заедничка катода. Во овој проект, ќе користиме конфигурација со заедничка анода, каде што сите аноди се поврзани заедно на позитивен напон, што ни овозможува да ја контролираме осветленоста на секоја LED поединечно со PWM. Потенциометарот ќе биде поврзан на аналоген влез на ESP32 за да ја чита неговата позиција и соодветно да ги прилагодува RGB вредностите.
Детали од податочната листа
| Производител | SunFounder |
|---|---|
| Број на дел | RGB LED |
| Логички/IO напон | 3.3 V |
| Напон на напојување | 5 V |
| Излезна струја (по канал) | 20 mA |
| Врвна струја (по канал) | 30 mA |
| Насоки за PWM фреквенција | 5 kHz |
| Прагови на влезна логика | 0.3 V (ниско) / 2.7 V (високо) |
| Пад на напон / RDS(on) / заситување | 1.8 V (тип.) |
| Термички граници | Работна температура: -40°C до +85°C |
| Пакет | Низ дупка (Through-hole) |
| Белешки / варијанти | Конфигурација со заедничка анода |
- Користете отпорник од 220 Ом за секој LED канал за да ја ограничите струјата.
- Осигурете соодветен напон на напојување (5V) за RGB LED.
- Поврзете ја заедничката анода на позитивниот напонски извор.
- Користете PWM за контролирање на осветленоста на секоја LED боја.
- Бидете внимателни со поврзувањето на потенциометарот за да избегнете лебдечки влезови.
- Проверете дека ESP32 е правилно напојуван пред да го испратите кодот.
Инструкции за поврзување
За да ги поврзете RGB LED и потенциометарот со ESP32, започнете со поврзување на пиног со заедничка анода на RGB LED со пиног за напојување од 3.3V на ESP32. Црвениот, зелениот и синиот пин на RGB LED ќе се поврзат со пиновите 27, 26 и 25 соодветно. Погрижете се да поставите отпорник од 220 Ом во серија со секој пин за боја на LED за да ја ограничите струјата и да ја заштитите LED.
Следно, поврзете го потенциометарот со ESP32 со поврзување на левиот пин со пиног за напојување од 3.3V, десниот пин со земја, и средниот пин со 14 на ESP32. Оваа конфигурација му овозможува на ESP32 да го чита аналогниот напон од потенциометарот, кој ќе се користи за прилагодување на бојата на RGB LED врз основа на неговата позиција.
Примери на код и објаснување
Во функцијата setup, ги дефинираме пиновите за RGB LED и потенциометарот, како и ги иницијализираме PWM поставките. Следниот код фрагмент покажува како ги поставуваме пиновите на RGB LED:
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);
}
Во овој фрагмент, ги дефинираме пиновите за црвената, зелената и сината LED, и ги прикачуваме на PWM канали со дефинирана фреквенција и резолуција.
Функцијата loop ја чита вредноста на потенциометарот и ја претвора во вредност на нијанса (hue), која потоа се користи за одредување на 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 за да се ажурира LED-от.
Демонстрација / Што да очекувате
По завршувањето на жиците и поставувањето на кодот, треба да можете да го вртите потенциометарот за непречено да ја менувате бојата на RGB LED-от. Како што го ротирате копчето, LED-от ќе преминува низ различни бои врз основа на вредноста на нијансата пресметана од позицијата на копчето. Ако LED-от не свети или се однесува неочекувано, проверете ги жиците и осигурете се дека потенциометарот е правилно поврзан (во видеото на 10:45).
Временски ознаки на видеото
- 00:00 Почеток
- 2:11 Вовед во проектот
- 4:31 RGB LED
- 8:18 RGB боја
- 12:18 Објаснување на жиците
- 17:59 Објаснување на Arduino кодот
- 24:12 Избор на ESP32 плоча и COM порт во Arduino IDE
- 25:54 Демонстрација
// Define RGB LED pins
const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;
// Define PWM frequency and resolution
const int freq = 5000;
const int resolution = 8;
// Define the pin for the knob
#define KNOB_PIN 14
void setup() {
Serial.begin(115200);
ledcAttach(redPin, freq, resolution);
ledcAttach(greenPin, freq, resolution);
ledcAttach(bluePin, freq, resolution);
}
void loop() {
// Read the value of the knob
int knobValue = analogRead(KNOB_PIN);
Serial.println(knobValue);
// Normalize the knob value to the range 0-1
float hueValue = (float)knobValue / 4095.0;
// Convert the normalized value to a HUE value (0-360)
int hue = (int)(hueValue * 360);
// Convert the HUE value to RGB values
int red, green, blue;
HUEtoRGB(hue, &red, &green, &blue);
// Update the RGB LED with the new color values
setColor(red, green, blue);
}
void setColor(int red, int green, int blue) {
ledcWrite(redPin, red);
ledcWrite(greenPin, green);
ledcWrite(bluePin, blue);
}
// Convert a HUE value to RGB values
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
Resources & references
-
DocumentationESP32 Tutorial 34/55- SunFounder doc page for Color Gradientdocs.sunfounder.com
Files📁
No files available.