د ESP32 ټیوټوریل 34/55 - د RGB LED او کنوب سره رنګ ګریډینټ | د SunFounder د 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 |
| یادښتونه / ډولونه | د عام انوډ ترتیب |
- د هر LED چینل لپاره د جریان محدودولو لپاره 220 اوم مقاومت وکاروئ.
- د RGB LED لپاره د مناسب بریښنا ولټاژ (5V) ډاډ ترلاسه کړئ.
- عام انوډ مثبت ولټاژ ته وصل کړئ.
- د هر LED رنګ د روښانتیا کنټرول لپاره PWM وکاروئ.
- د پوټینشیومیټر د اړیکې په اړه محتاط اوسئ ترڅو د فلوټینګ انپټونو څخه مخنیوی وشي.
- ډاډ ترلاسه کړئ چې ESP32 د کوډ اپلوډ کولو دمخه په سمه توګه بریښنا لري.
د تارونو لارښوونې
د RGB LED او پوټینشیومیټر د ESP32 سره د تارونو لپاره، د RGB LED د عام انوډ پن په ESP32 باندې د 3.3V بریښنا پن سره وصل کولو سره پیل وکړئ. د RGB LED سور، شین، او نیلي پنونه به په ترتیب سره د 27، 26، او 25 پنونو سره وصل شي. ډاډ ترلاسه کړئ چې د هر LED رنګ پن سره په لړۍ کې 220 اوم مقاومت ځای په ځای کړئ ترڅو جریان محدود کړئ او LED خوندي کړئ.
بیا، پوټینشیومیټر د ESP32 سره وصل کړئ د کیڼ پن په 3.3V بریښنا پن سره، ښی پن په ځمکه (ground) سره، او منځنی پن په ESP32 باندې 14 سره وصل کولو سره. دا ترتیب ESP32 ته اجازه ورکوي چې د پوټینشیومیټر څخه انلاګ ولټاژ ولولي، کوم چې به د هغې د موقعیت پر بنسټ د RGB LED رنګ تنظیمولو لپاره وکارول شي.
د کوډ مثالونه او واک ترو
د سیټ اپ فنکشن کې، موږ د 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 چینلونو سره نښلوو.
د لوپ فنکشن د پوټینشیومیټر ارزښت لولي او دا د هغه (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);
}دا کوډ د پوټینشیومیټر څخه انلاګ ارزښت لولي، یې نورمال کوي، او اړونده رنګ (hue) محاسبه کوي. بیا د HUEtoRGB فنکشن غږوي ترڅو رنګ په RGB ارزښتونو بدل کړي، کوم چې د LED تازه کولو لپاره setColor فنکشن ته لیږل کیږي.
ښودنه / څه تمه وکړو
د تارونو اړیکې بشپړولو او کوډ اپلوډ کولو وروسته، تاسو باید وکولی شئ پوټینشیومیټر وګرځوئ ترڅو د RGB LED رنګ په نرمۍ سره بدل کړئ. لکه څنګه چې تاسو دستګاه ګرځوئ، LED به د دستګاه موقعیت څخه محاسبه شوي رنګ ارزښت پر بنسټ په بیلابیلو رنګونو بدلیږي. که LED روښانه نشي یا غیر متوقع چلند وکړي، تارونه وګورئ او ډاډ ترلاسه کړئ چې پوټینشیومیټر په سمه توګه وصل دی (په ویډیو کې په 10:45 کې).
د ویډیو وخت نښې
- 00:00 پیل
- 2:11 د پروژې پیژندنه
- 4:31 RGB LED
- 8:18 RGB رنګ
- 12:18 د تارونو اړیکې تشریح شوې
- 17:59 د Arduino کوډ تشریح شوی
- 24:12 په Arduino IDE کې د ESP32 بورډ او COM پورټ غوره کول
- 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.