Tutorial ESP32 34/55 - Gradient de culoare cu LED RGB și Buton Rotativ | Kitul de învățare IoT ESP32 de la SunFounder
În acest tutorial, vom crea un efect de gradient de culoare folosind un LED RGB care se ajustează în funcție de poziția unui potențiometru (buton). Proiectul utilizează un microcontroler ESP32, care oferă capacități integrate Wi-Fi și Bluetooth, fiind o alegere versatilă pentru proiecte IoT. Prin rotirea potențiometrului, putem trece lin între diferite culori, demonstrând atât funcționalitatea LED-ului RGB, cât și capacitatea de a citi valori analogice de la potențiometru.

Acest proiect este ideal pentru învățarea despre PWM (Modulare pe Durată de Impuls) și despre cum să controlezi dispozitive analogice cu un microcontroler. Pe parcursul acestui tutorial, vom discuta despre componentele hardware necesare, instrucțiunile de cablare și vom oferi fragmente de cod pentru a te ajuta să implementezi proiectul. Pentru o explicație mai vizuală, asigură-te că urmărești videoclipul asociat (în videoclip la 02:15).
Hardware Explicat
Principalele componente utilizate în acest proiect includ microcontrolerul ESP32, un LED RGB și un potențiometru. ESP32 este un microcontroler puternic care poate gestiona diverse sarcini, inclusiv comunicarea wireless, fiind potrivit pentru aplicații IoT. LED-ul RGB constă din trei LED-uri individuale (roșu, verde și albastru) care pot fi amestecate pentru a produce o gamă largă de culori. Potențiometrul acționează ca un rezistor reglabil care oferă o tensiune de ieșire variabilă în funcție de poziția sa.
LED-ul RGB poate fi conectat în două configurații: anod comun sau catod comun. În acest proiect, vom folosi o configurație cu anod comun, unde toți anozii sunt conectați împreună la o tensiune pozitivă, permițându-ne să controlăm luminozitatea fiecărui LED individual cu PWM. Potențiometrul va fi conectat la o intrare analogică pe ESP32 pentru a citi poziția sa și a ajusta valorile RGB în consecință.
Detalii din Fișa Tehnică
| Producător | SunFounder |
|---|---|
| Număr de piesă | LED RGB |
| Tensiune logică/IO | 3,3 V |
| Tensiune de alimentare | 5 V |
| Curent de ieșire (pe canal) | 20 mA |
| Curent de vârf (pe canal) | 30 mA |
| Ghid de frecvență PWM | 5 kHz |
| Praguri logice de intrare | 0,3 V (scăzut) / 2,7 V (ridicat) |
| Cădere de tensiune / RDS(on) / saturație | 1,8 V (tip.) |
| Limite termice | Temperatură de operare: -40°C până la +85°C |
| Pachet | Prin gaură |
| Note / variante | Configurație cu anod comun |
- Folosește un rezistor de 220 Ohmi pentru fiecare canal LED pentru a limita curentul.
- Asigură o tensiune de alimentare adecvată (5V) pentru LED-ul RGB.
- Conectează anodul comun la sursa de tensiune pozitivă.
- Folosește PWM pentru a controla luminozitatea fiecărei culori a LED-ului.
- Fii atent la conexiunea potențiometrului pentru a evita intrările flotante.
- Verifică că ESP32 este alimentat corect înainte de a încărca codul.
Instrucțiuni de Cablare
Pentru a cabla LED-ul RGB și potențiometrul la ESP32, începe prin conectarea pinului cu anod comun al LED-ului RGB la pinul de alimentare de 3,3V de pe ESP32. Pinii roșu, verde și albastru ai LED-ului RGB se vor conecta la pinii 27, 26 și, respectiv, 25. Asigură-te că plasezi un rezistor de 220 Ohmi în serie cu fiecare pin de culoare al LED-ului pentru a limita curentul și a proteja LED-ul.
Apoi, conectează potențiometrul la ESP32 legând pinul din stânga la pinul de alimentare de 3,3V, pinul din dreapta la masă, iar pinul din mijloc la 14 pe ESP32. Această configurație permite ESP32 să citească tensiunea analogică de la potențiometru, care va fi folosită pentru a ajusta culoarea LED-ului RGB în funcție de poziția sa.
Exemple de Cod & Explicații
În funcția de configurare, definim pinii pentru LED-ul RGB și potențiometru, precum și inițializăm setările PWM. Următorul fragment de cod arată cum setăm pinii LED-ului 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);
}
În acest fragment, definim pinii pentru LED-urile roșu, verde și albastru și îi atașăm la canale PWM cu o frecvență și o rezoluție definite.
Funcția loop citește valoarea potențiometrului și o convertește într-o valoare de nuanță, care este apoi folosită pentru a determina valorile RGB. Următorul extras demonstrează acest proces:
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);
}Acest cod citește valoarea analogică de la potențiometru, o normalizează și calculează nuanța corespunzătoare. Apoi apelează funcția HUEtoRGB pentru a converti nuanța în valori RGB, care sunt transmise funcției setColor pentru a actualiza LED-ul.
Demonstrație / Ce să te aștepți
După finalizarea cablajului și încărcarea codului, ar trebui să poți roti potențiometrul pentru a schimba culoarea LED-ului RGB lin. Pe măsură ce rotești butonul, LED-ul va trece prin diverse culori pe baza valorii nuanței calculate din poziția butonului. Dacă LED-ul nu se aprinde sau se comportă neașteptat, verifică cablajul și asigură-te că potențiometrul este conectat corect (în video la 10:45).
Marcaje temporale video
- 00:00 Început
- 2:11 Introducere în proiect
- 4:31 LED RGB
- 8:18 Culoare RGB
- 12:18 Cablaj explicat
- 17:59 Cod Arduino explicat
- 24:12 Selectarea plăcii ESP32 și a portului COM în Arduino IDE
- 25:54 Demonstrație
// 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
Resurse și referințe
-
DocumentațieESP32 Tutorial 34/55- SunFounder doc page for Color Gradientdocs.sunfounder.com
Fișiere📁
Nu sunt disponibile fișiere.