Mafunzo ya ESP32 34/55 - Gradient ya rangi na LED ya RGB na Knob | Kifurushi cha Kujifunza cha IoT cha ESP32 cha SunFounder
Katika mafunzo haya, tutaunda athari ya upinde wa rangi kwa kutumia LED ya RGB inayobadilika kulingana na nafasi ya potentiometer (kifundo). Mradi huu unatumia microcontroller ya ESP32, ambayo hutoa uwezo wa Wi-Fi na Bluetooth uliojengewa ndani, na kuifanya kuwa chaguo bora kwa miradi ya IoT. Kwa kugeuza potentiometer, tunaweza kubadilisha rangi kwa urahisi, kuonyesha utendaji wa LED ya RGB na uwezo wa kusoma thamani za analog kutoka kwa potentiometer.

Mradi huu ni bora kwa kujifunza kuhusu PWM (Pulse Width Modulation) na jinsi ya kudhibiti vifaa vya analog kwa microcontroller. Katika mafunzo haya yote, tutajadili vipengele muhimu vya vifaa, maagizo ya wiring, na kutoa sehemu za msimbo ili kukusaidia kutekeleza mradi. Kwa maelezo ya kuona zaidi, hakikisha umeangalia video inayohusiana (katika video saa 02:15).
Vifaa Vinavyoelezwa
Vipengele vikuu vinavyotumika katika mradi huu ni pamoja na microcontroller ya ESP32, LED ya RGB, na potentiometer. ESP32 ni microcontroller yenye nguvu inayoweza kushughulikia kazi mbalimbali, ikiwa ni pamoja na mawasiliano ya wireless, na kuifanya kufaa kwa programu za IoT. LED ya RGB ina LED tatu za kibinafsi (nyekundu, kijani, na bluu) ambazo zinaweza kuchanganywa kutoa rangi nyingi. Potentiometer hufanya kama resistor inayoweza kubadilishwa ambayo hutoa voltage ya pato inayobadilika kulingana na nafasi yake.
LED ya RGB inaweza kuunganishwa kwa njia mbili: anode ya kawaida au cathode ya kawaida. Katika mradi huu, tutatumia usanidi wa anode ya kawaida, ambapo anode zote zinaunganishwa pamoja kwa voltage chanya, ikituruhusu kudhibiti mwangaza wa kila LED kibinafsi kwa PWM. Potentiometer itaunganishwa kwa pembejeo ya analog kwenye ESP32 ili kusoma nafasi yake na kurekebisha thamani za RGB ipasavyo.
Maelezo ya Datasheet
| Mtengenezaji | SunFounder |
|---|---|
| Nambari ya sehemu | LED ya RGB |
| Voltage ya Logic/IO | 3.3 V |
| Voltage ya usambazaji | 5 V |
| Pato la sasa (kwa kila channel) | 20 mA |
| Kilele cha sasa (kwa kila channel) | 30 mA |
| Mwongozo wa frequency ya PWM | 5 kHz |
| Vizingiti vya mantiki ya pembejeo | 0.3 V (chini) / 2.7 V (juu) |
| Kushuka kwa voltage / RDS(on) / kueneza | 1.8 V (typ.) |
| Mipaka ya joto | Joto la kufanya kazi: -40°C hadi +85°C |
| Kifurushi | Through-hole |
| Vidokezo / lahaja | Usanidi wa anode ya kawaida |
- Tumia resistor ya 220 Ohm kwa kila channel ya LED ili kupunguza sasa.
- Hakikisha voltage ya usambazaji inafaa (5V) kwa LED ya RGB.
- Unganisha anode ya kawaida kwa usambazaji wa voltage chanya.
- Tumia PWM kwa kudhibiti mwangaza wa kila rangi ya LED.
- Kuwa makini na uunganisho wa potentiometer ili kuepuka pembejeo zinazoelea.
- Thibitisha kwamba ESP32 imewashwa kwa usahihi kabla ya kupakia msimbo.
Maagizo ya Wiring
Ili kuunganisha LED ya RGB na potentiometer kwa ESP32, anza kwa kuunganisha pini ya anode ya kawaida ya LED ya RGB kwa pini ya nguvu ya 3.3V kwenye ESP32. Pini za nyekundu, kijani, na bluu za LED ya RGB zitaunganishwa kwa pini 27, 26, na 25 mtawalia. Hakikisha umeweka resistor ya 220 Ohm katika mfululizo na kila pini ya rangi ya LED ili kupunguza sasa na kulinda LED.
Ifuatayo, unganisha potentiometer kwa ESP32 kwa kuunganisha pini ya kushoto kwa pini ya nguvu ya 3.3V, pini ya kulia kwa ardhi, na pini ya kati kwa 14 kwenye ESP32. Usanidi huu unaruhusu ESP32 kusoma voltage ya analog kutoka kwa potentiometer, ambayo itatumika kurekebisha rangi ya LED ya RGB kulingana na nafasi yake.
Mifano ya Msimbo & Maelezo
Katika kazi ya setup, tunafafanua pini za LED ya RGB na potentiometer, pamoja na kuanzisha mipangilio ya PWM. Sehemu ifuatayo ya msimbo inaonyesha jinsi tunavyoweka pini za LED ya 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);
}
Katika sehemu hii, tunafafanua pini za LED nyekundu, kijani, na bluu, na kuziunganisha kwa channel za PWM na frequency na resolution zilizofafanuliwa.
Kazi ya loop inasoma thamani ya potentiometer na kuibadilisha kuwa thamani ya hue, ambayo hutumika kuamua thamani za RGB. Sehemu ifuatayo inaonyesha mchakato huu:
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);
}Msimbo huu unasoma thamani ya analogi kutoka kwenye potentiometer, huiweka katika hali ya kawaida, na kukokotoa hue inayolingana. Kisha unaita kazi ya HUEtoRGB kubadilisha hue kuwa thamani za RGB, ambazo hupitishwa kwa kazi ya setColor kusasisha LED.
Maonyesho / Nini cha Kutarajia
Baada ya kukamilisha wiring na kupakia msimbo, utaweza kugeuza potentiometer kubadilisha rangi ya LED ya RGB vizuri. Unapozungusha kifundo, LED itabadilika kupitia rangi mbalimbali kulingana na thamani ya hue iliyokokotolewa kutoka kwenye nafasi ya kifundo. Ikiwa LED haiwashi au inafanya isivyotarajiwa, angalia wiring na uhakikishe kwamba potentiometer imeunganishwa kwa usahihi (katika video saa 10:45).
Vidokezo vya Muda wa Video
- 00:00 Mwanzo
- 2:11 Utangulizi wa mradi
- 4:31 RGB LED
- 8:18 Rangi ya RGB
- 12:18 Wiring imeelezewa
- 17:59 Msimbo wa Arduino umeelezewa
- 24:12 Kuchagua Bodi ya ESP32 na bandari ya COM katika Arduino IDE
- 25:54 Maonyesho
// 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
Resurser och referenser
-
DokumentationESP32 Tutorial 34/55- SunFounder doc page for Color Gradientdocs.sunfounder.com
Filer📁
Inga filer tillgängliga.