Tutorial na ESP32 34/55 - Canjin launi mai launi tare da LED RGB da Knob | Kayan koyon ESP32 IoT na SunFounder
A cikin wannan koyawa, za mu ƙirƙiri tasirin canjin launi ta amfani da LED RGB wanda ke daidaitawa bisa matsayin potentiometer (ƙulli). Aikin yana amfani da microcontroller ESP32, wanda ke ba da damar Wi-Fi da Bluetooth na ciki, yana mai da shi zaɓi mai amfani don ayyukan IoT. Ta hanyar juya potentiometer, za mu iya canzawa cikin sauƙi tsakanin launuka daban-daban, yana nuna duka aikin LED RGB da ikon karanta ƙimar analog daga potentiometer.

Wannan aikin ya dace don koyon PWM (Pulse Width Modulation) da yadda ake sarrafa na'urorin analog tare da microcontroller. A cikin wannan koyawa, za mu tattauna kayan aikin da ake buƙata, umarnin wayoyi, da kuma bayar da snippets na lamba don taimaka muku aiwatar da aikin. Don ƙarin bayani na gani, tabbatar da duba bidiyon da ke da alaƙa (a cikin bidiyo a 02:15).
Kayan Aikin Da Aka Yi Bayani
Babban kayan aikin da aka yi amfani da su a cikin wannan aikin sun haɗa da microcontroller ESP32, LED RGB, da potentiometer. ESP32 microcontroller ne mai ƙarfi wanda zai iya ɗaukar ayyuka daban-daban, gami da sadarwa mara waya, yana mai da shi dacewa don aikace-aikacen IoT. LED RGB ya ƙunshi LEDs guda uku (ja, kore, da shuɗi) waɗanda za a iya haɗa su don samar da launuka da yawa. Potentiometer yana aiki azaman resistor mai daidaitawa wanda ke ba da ƙarfin wutar lantarki mai canzawa dangane da matsayinsa.
LED RGB za a iya haɗa shi a cikin tsari biyu: anode gama gari ko cathode gama gari. A cikin wannan aikin, za mu yi amfani da tsarin anode gama gari, inda duk anodes suke haɗe tare zuwa ƙarfin lantarki mai kyau, yana ba mu damar sarrafa hasken kowane LED ɗaya ɗaya tare da PWM. Potentiometer za a haɗa shi zuwa shigar analog akan ESP32 don karanta matsayinsa da daidaita ƙimar RGB daidai.
Bayanan Datasheet
| Manufacturer | SunFounder |
|---|---|
| Part number | RGB LED |
| Logic/IO voltage | 3.3 V |
| Supply voltage | 5 V |
| Output current (per channel) | 20 mA |
| Peak current (per channel) | 30 mA |
| PWM frequency guidance | 5 kHz |
| Input logic thresholds | 0.3 V (low) / 2.7 V (high) |
| Voltage drop / RDS(on) / saturation | 1.8 V (typ.) |
| Thermal limits | Operating temperature: -40°C to +85°C |
| Package | Through-hole |
| Notes / variants | Common anode configuration |
- Yi amfani da resistor 220 Ohm don kowane tashar LED don iyakance wutar lantarki.
- Tabbatar da samar da wutar lantarki mai dacewa (5V) don LED RGB.
- Haɗa anode gama gari zuwa samar da wutar lantarki mai kyau.
- Yi amfani da PWM don sarrafa hasken kowane launi na LED.
- Yi hankali da haɗin potentiometer don guje wa shigar da ba ta da ƙarfi.
- Tabbatar da cewa ESP32 yana da wutar lantarki daidai kafin loda lambar.
Umarnin Wayoyi
Don haɗa LED RGB da potentiometer zuwa ESP32, fara da haɗa fil ɗin anode gama gari na LED RGB zuwa fil ɗin wutar lantarki 3.3V akan ESP32. Filayen ja, kore, da shuɗi na LED RGB za su haɗa zuwa filayen 27, 26, da 25 bi da bi. Tabbatar da sanya resistor 220 Ohm a jere tare da kowane fil ɗin launi na LED don iyakance wutar lantarki da kare LED.
Na gaba, haɗa potentiometer zuwa ESP32 ta hanyar haɗa fil ɗin hagu zuwa fil ɗin wutar lantarki 3.3V, fil ɗin dama zuwa ƙasa, da fil ɗin tsakiya zuwa 14 akan ESP32. Wannan tsarin yana ba ESP32 damar karanta ƙarfin lantarki na analog daga potentiometer, wanda za a yi amfani da shi don daidaita launin LED RGB dangane da matsayinsa.
Misalan Lamba & Bayani
A cikin aikin setup, muna bayyana filayen don LED RGB da potentiometer, da kuma fara saitunan PWM. Snippet ɗin lamba mai zuwa yana nuna yadda muke saita filayen LED 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);
}
A cikin wannan snippet, muna bayyana filayen don LEDs ja, kore, da shuɗi, kuma muna haɗa su zuwa tashoshin PWM tare da ƙayyadaddun mita da ƙuduri.
Aikin loop yana karanta ƙimar potentiometer kuma ya canza shi zuwa ƙimar hue, wanda za a yi amfani da shi don ƙayyade ƙimar RGB. Excerpt ɗin mai zuwa yana nuna wannan tsari:
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);
}Wannan lambar tana karanta ƙimar analog daga potentiometer, tana daidaita shi, sannan ta ƙididdige hue ɗin da ya dace. Sai ta kira aikin HUEtoRGB don canza hue zuwa ƙimar RGB, waɗanda ake aikawa zuwa aikin setColor don sabunta LED.
Nuni / Abin da za ka Yi Tsammani
Bayan kammala haɗin wayoyi da loda lambar, ya kamata ka iya juya potentiometer don canza launin RGB LED cikin sauƙi. Yayin da kake juya ƙullin, LED zai canza ta cikin launuka daban-daban bisa ga ƙimar hue da aka ƙididdige daga matsayin ƙullin. Idan LED bai haskaka ba ko kuma ya yi abin da ba a zata ba, duba haɗin wayoyi kuma ka tabbatar da cewa an haɗa potentiometer daidai (a cikin bidiyo a 10:45).
Lokutan Bidiyo
- 00:00 Farawa
- 2:11 Gabatarwa ga aikin
- 4:31 RGB LED
- 8:18 Launin RGB
- 12:18 Bayanin haɗin wayoyi
- 17:59 Bayanin lambar Arduino
- 24:12 Zaɓin Board ɗin ESP32 da tashar COM a cikin Arduino IDE
- 25:54 Nuni
// 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
Albarkatun da kuma shafukan da za a duba
-
TakarduESP32 Tutorial 34/55 - SunFounder doc page for color gradientdocs.sunfounder.com
Fayiloli📁
Babu fayiloli da ake da su.