Èkọ́ 34/55 ESP32 - Àwọ̀ tí ń yí padà pẹ̀lú RGB LED àti Knob | SunFounder's ESP32 IoT Learning kit
Nínú ẹ̀kọ́ yìí, a óò ṣẹ̀dá ipa àwọ̀ tí ń yípadà (color gradient) nípa lílo RGB LED tí ó máa ń yípadà ní ìbámu pẹ̀lú ipò potentiometer (kọ́bù). Iṣẹ́ yìí ń lo ESP32 microcontroller, èyí tí ó ní agbára Wi-Fi àti Bluetooth nínú ara rẹ̀, tí ó sì mú un di yíyan àìlówón fún àwọn iṣẹ́ IoT. Nípa yíyí potentiometer, a lè yípadà láàárín àwọn àwọ̀ ọ̀tọ̀ọ̀tọ̀, tí ó ń fi hàn bí RGB LED ṣe ń ṣiṣẹ́ àti agbára láti ka àwọn iye analog láti potentiometer.

Iṣẹ́ yìí dára fún kíkọ́ nípa PWM (Pulse Width Modulation) àti bí a ṣe ń ṣàkóso àwọn ẹ̀rọ analog pẹ̀lú microcontroller. Nínú gbogbo ẹ̀kọ́ yìí, a óò jíròrò àwọn ohun èlò tí a nílò, àwọn ìtọ́ni nípa bí a ṣe ń so wọ́n pọ̀, àti pípèsè àwọn ìpín kóòdù láti ràn ọ́ lọ́wọ́ láti ṣe iṣẹ́ yìí. Fún àlàyé tí ó túbọ̀ ṣe kedere, rí i pé o wo fídíò tí ó ní ìsopọ̀ pẹ̀lú rẹ̀ (nínú fídíò ní 02:15).
Àlàyé Àwọn Ohun Èlò
Àwọn ohun èlò pàtàkì tí a ń lò nínú iṣẹ́ yìí ni ESP32 microcontroller, RGB LED kan, àti potentiometer kan. ESP32 jẹ́ microcontroller alágbára tí ó lè ṣe ọ̀pọ̀lọpọ̀ iṣẹ́, pẹ̀lú ìbánisọ̀rọ̀ aláìlókùnrin, tí ó sì mú un dára fún àwọn ohun èlò IoT. RGB LED ní àwọn LED mẹ́ta ọ̀tọ̀ọ̀tọ̀ (pupa, aláwọ̀ ewé, àti búlúù) tí a lè dàpọ̀ láti ṣe ọ̀pọ̀lọpọ̀ àwọ̀. Potentiometer ń ṣiṣẹ́ gẹ́gẹ́ bí resistor tí a lè ṣàtúnṣe tí ó ń pèsè iye folti tí ń yípadà ní ìbámu pẹ̀lú ipò rẹ̀.
A lè so RGB LED pọ̀ ní ọ̀nà méjì: common anode tàbí common cathode. Nínú iṣẹ́ yìí, a óò lo ìtòlẹ́ common anode, níbi tí gbogbo àwọn anode ti ń so pọ̀ sí folti rere kan, tí ó ń jẹ́ kí a lè ṣàkóso ìmọ́lẹ̀ LED kọ̀ọ̀kan lọ́tọ̀ọ̀tọ̀ pẹ̀lú PWM. Potentiometer yóò so pọ̀ sí ẹnu-ìwọ̀n analog kan lórí ESP32 láti ka ipò rẹ̀ àti láti ṣàtúnṣe àwọn iye RGB ní ìbámu.
Àwọn Àlàyé Datasheet
| Olùṣe | SunFounder |
|---|---|
| Nọ́mbà apá | RGB LED |
| Folti Logic/IO | 3.3 V |
| Folti ìpèsè | 5 V |
| Ìwọ̀n ìjàde (fún ikanni kọ̀ọ̀kan) | 20 mA |
| Ìwọ̀n tí ó ga jùlọ (fún ikanni kọ̀ọ̀kan) | 30 mA |
| Ìtọ́sọ́nà ìgbohùnsáfẹ́fẹ́ PWM | 5 kHz |
| Àwọn ìpele ìwọ̀n ìrísí | 0.3 V (rẹ̀lẹ̀) / 2.7 V (ga) |
| Ìdìndì folti / RDS(on) / saturation | 1.8 V (typ.) |
| Àwọn ìwọ̀n ìgbóná | Ìwọ̀n ìṣiṣẹ́: -40°C sí +85°C |
| Àpótí | Through-hole |
| Àwọn àkíyèsí / àwọn oríṣi | Ìtòlẹ́ common anode |
- Lo resistor 220 Ohm kan fún ikanni LED kọ̀ọ̀kan láti dín ìwọ̀n kù.
- Rí i pé folti ìpèsè tí ó tọ́ (5V) wà fún RGB LED.
- So common anode pọ̀ sí ìpèsè folti rere.
- Lo PWM fún ṣíṣàkóso ìmọ́lẹ̀ àwọ̀ LED kọ̀ọ̀kan.
- Ṣọ́ra pẹ̀lú ìsopọ̀ potentiometer láti yẹra fún àwọn ìwọ̀n tí ń fòfò.
- Rí i pé ESP32 ti ní agbára dáradára kí o tó gbé kóòdù sí i.
Àwọn Ìtọ́ni Ìsopọ̀
Láti so RGB LED àti potentiometer pọ̀ sí ESP32, bẹ̀rẹ̀ nípa sísopọ̀ ẹ̀yìn common anode ti RGB LED sí ẹ̀yìn agbára 3.3V lórí ESP32. Àwọn ẹ̀yìn pupa, aláwọ̀ ewé, àti búlúù ti RGB LED yóò so pọ̀ sí àwọn ẹ̀yìn 27, 26, àti 25 ní ìtòlẹ́. Rí i pé o fi resistor 220 Ohm kan sí ọ̀nà pẹ̀lú ẹ̀yìn àwọ̀ LED kọ̀ọ̀kan láti dín ìwọ̀n kù àti láti dáàbò bo LED.
Lẹ́yìn náà, so potentiometer pọ̀ sí ESP32 nípa sísopọ̀ ẹ̀yìn òsì sí ẹ̀yìn agbára 3.3V, ẹ̀yìn ọ̀tún sí ilẹ̀, àti ẹ̀yìn àárín sí 14 lórí ESP32. Ìtòlẹ́ yìí jẹ́ kí ESP32 lè ka folti analog láti potentiometer, èyí tí a óò lò láti ṣàtúnṣe àwọ̀ RGB LED ní ìbámu pẹ̀lú ipò rẹ̀.
Àwọn Àpẹẹrẹ Kóòdù & Ìṣàlàyé
Nínú iṣẹ́ setup, a ń ṣàlàyé àwọn ẹ̀yìn fún RGB LED àti potentiometer, àti láti bẹ̀rẹ̀ àwọn ètò PWM. Ìpín kóòdù tí ó tẹ̀lé yìí fi hàn bí a ṣe ń ṣètò àwọn ẹ̀yìn 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);
}
Nínú ìpín yìí, a ń ṣàlàyé àwọn ẹ̀yìn fún àwọn LED pupa, aláwọ̀ ewé, àti búlúù, àti láti so wọ́n pọ̀ sí àwọn ikanni PWM pẹ̀lú ìgbohùnsáfẹ́fẹ́ àti ìpinnu tí a ti ṣàlàyé.
Iṣẹ́ loop ń ka iye potentiometer àti yíyí i padà sí iye hue, èyí tí a óò lò láti pinnu àwọn iye RGB. Ìpín tí ó tẹ̀lé yìí fi hàn ìlànà yìí:
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);
}Koodu yii ka iye analog lati inu potentiometer, ṣe iwọntunwọnsi rẹ, ati ṣe iṣiro hue ti o baamu. Lẹhinna o pe iṣẹ HUEtoRGB lati yi hue pada si awọn iye RGB, eyiti a fi ranṣẹ si iṣẹ setColor lati ṣe imudojuiwọn LED naa.
Ifihan / Ohun ti O Ṣe Reti
Nigbati o ba pari sisopọ ati gbigbe koodu naa soke, o yẹ ki o ni anfani lati yi potentiometer pada lati yi awọ ti RGB LED pada ni irọrun. Bi o ṣe n yi kọbọ naa, LED yoo kọja nipasẹ awọn awọ oriṣiriṣi ti o da lori iye hue ti a ṣe iṣiro lati ipo kọbọ naa. Ti LED ko ba tan imọlẹ tabi huwa laini airotẹlẹ, ṣayẹwo sisopọ naa ki o rii daju pe potentiometer ti sopọ ni deede (ninu fidio ni 10:45).
Awọn Akoko Fidio
- 00:00 Ibẹrẹ
- 2:11 Ifihan si iṣẹ akanṣe naa
- 4:31 RGB LED
- 8:18 Awọ RGB
- 12:18 Sisopọ ti ṣalaye
- 17:59 Koodu Arduino ti ṣalaye
- 24:12 Yiyan Bọọdi ESP32 ati ibudo COM ni Arduino IDE
- 25:54 Ifihan
// 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
Orisun & itọkasi
-
Iwe-ẹriESP32 Tutorial 34/55 - SunFounder doc page for color gradientdocs.sunfounder.com
Fáìlìs📁
Ko si awọn faili ti o wa.