د ESP32 ټیوټوریل 47/55 - WS2812 CheerLights د MQTT په کارولو سره د انټرنیټ له لارې | د SunFounder د ESP32 IoT کټ
په دې ټیوټوریل کې به موږ د ESP32 او WS2812 LEDs په کارولو سره یو همغږي شوی رڼا سیستم جوړ کړو چې د MQTT له لارې له لرې ځایه کنټرول کېدای شي. دا سیستم ډیرو کاروونکو ته اجازه ورکوي چې د رڼا رنګونه په یو وخت کې بدل کړي، پرته له دې چې موقعیت ته پام وکړي، یوه نښلول شوې تجربه رامنځته کوي. دا پروژه د SunFounder ESP32 IoT کټ کاروي، چې د Wi-Fi وړتیاوو سره یو پیاوړی مایکروکنټرولر لري، چې د IoT غوښتنلیکونو لپاره ډېر مناسب دی.
د ویډیو په اوږدو کې به موږ د دې اغیزې د ترلاسه کولو لپاره اړین تنظیم، تارونه، او د کوډ پلي کول په تفصیل سره وګورو. که تاسو نورو روښانتیاوو ته اړتیا لرئ، ډاډ ترلاسه کړئ چې ویډیو په ځانګړو وختونو کې وګورئ (په ویډیو کې په mm:ss کې).
هارډویر تشریح شوی
د دې پروژې اصلي برخې د ESP32 مایکروکنټرولر، د WS2812 LED پټه، او د MQTT بروکر شامل دي. ESP32 یو څو اړخیز مایکروکنټرولر دی چې په جوړه شوې Wi-Fi او بلوتوث وړتیاوې لري، چې دا په اسانۍ سره انټرنیټ سره نښلوي. دا زموږ د پروژې دماغ دی، چې اړیکه اداره کوي او د LED پټه کنټرولوي.
د WS2812 LED پټه په انفرادي ډول د خطاب وړ RGB LEDs څخه جوړه شوې ده، چې د رنګونو پراخه لړۍ ښودلو لپاره کنټرول کېدای شي. هر LED د یو واحد ډیټا لاین په کارولو سره بند یا چالان کېدای شي او هر رنګ ته ټاکل کېدای شي، چې دا د متحرک رڼا اغیزو لپاره ډېر مناسب کوي. د MQTT بروکر د مختلفو کلاینټونو ترمنځ اړیکه اسانه کوي، چې کاروونکو ته اجازه ورکوي چې هغه موضوعات خپاره او ګډون وکړي چې د LED رنګونه کنټرولوي.
ډیټاشیټ تفصیلات
| جوړونکی | Adafruit |
|---|---|
| د برخې شمېره | WS2812B |
| منطق/IO ولتاژ | 3.5 - 5.5 V |
| د برېښنا ولتاژ | 5 V |
| د تولید جریان (په هر چینل) | 20 mA |
| د لوړ جریان (په هر چینل) | 60 mA |
| د PWM فریکونسي لارښود | 400 Hz |
| د انپټ منطق حدونه | 0.2Vcc (ټیټ)، 0.7Vcc (لوړ) |
| د ولتاژ کمښت / RDS(on) / سنتریشن | 0.5 V |
| حرارتي حدونه | د عملیاتو تودوخه: -25 تر 85 °C |
| بسته بندي | انفرادي 5050 SMD |
| یادښتونه / بڼې | په مختلفو اوږدوالیو او ترتیبونو کې شتون لري |
- د WS2812 پټې لپاره کافي برېښنا رسول ډاډمن کړئ ترڅو د ولتاژ کمښت مخه ونیول شي.
- د ESP32 او LED پټې ترمنځ یو ګډ ځمکنی (ground) وکاروئ.
- د ډیټا لاینونه لنډ وساتئ ترڅو د سیګنال خرابیدل مخه ونیول شي.
- د ولتاژ سپیکونو د نرموالي لپاره د برېښنا رسولو په اوږدو کې د کیپاسیټر (1000μF) کارولو په اړه فکر وکړئ.
- د سیګنال انعکاس مخنیوي لپاره د ډیټا لاین کې مناسب ریزسټرونه وکاروئ.
- د LED پټې د ټول جریان مصرف ته پام وکړئ؛ کله چې اړتیا وي بهرنۍ برېښنا وکاروئ.
د تارونو لارښوونې
د ESP32 د WS2812 LED پټې سره د نښلولو لپاره، لومړی د برېښنا رسولو سره نښلول پیل کړئ. د LED پټې سور تار د 5V برېښنا سرچینې سره او تور تار د ځمکې (ground) سره ونښلئ. بیا د WS2812 پټې ډیټا لاین (ژیړ تار) د ESP32 په پن 14 سره ونښلئ. ډاډ ترلاسه کړئ چې ESP32 هم د LED پټې په څیر ورته ځمکې سره نښلول شوی وي ترڅو یو ګډ حواله وساتل شي.
د برېښنا او ډیټا اړیکو له تنظیم وروسته، ESP32 د پروګرام کولو لپاره د مایکرو USB کیبل په کارولو سره خپل کمپیوټر سره ونښلئ. تاسو باید ډاډ ترلاسه کړئ چې ESP32 د پروګرام کولو پرمهال چالان شوی وي ترڅو اړیکه جوړه شي. یوځل چې تارونه ونښلول شي، تاسو کولی شئ کوډ اپلوډ کړئ او تنظیم ازموئ.

د کوډ مثالونه او تفصیل
کوډ د Wi-Fi او MQTT فعالیت لپاره د اړینو کتابتونونو په شاملولو سره پیل کیږي. پیژندونکي ssid او password ستاسو د Wi-Fi اسنادو ذخیره کولو لپاره کارول کیږي، پداسې حال کې چې mqtt_server د MQTT بروکر پته لري.
const char* ssid = "SSID";
const char* password = "PASSWORD";
const char* mqtt_server = "mqtt.cheerlights.com";
بیا، موږ د ملاتړ شوي CheerLights رنګونه او د دوی اړوند RGB ارزښتونه د ارې (arrays) په کارولو سره تعریف کوو. دا پروګرام ته اجازه ورکوي چې د کاروونکي انپټ پر بنسټ په اسانۍ سره د رنګ ترتیباتو ته لاسرسی ومومي.
String colorName[] = {"red", "pink", "green", "blue", "cyan", "white", "warmwhite", "oldlace", "purple", "magenta", "yellow", "orange"};
int colorRGB[][3] = { 255, 0, 0, // "red"
255, 192, 203, // "pink" ...};
د setup() فنکشن سیریل اړیکه پیلوي، د Wi-Fi اړیکه جوړوي، او د MQTT کلاینټ چمتو کوي. دا د LED پټه هم پیلوي.
void setup() {
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
pixels.begin();
pixels.show();
}
اصلي لوپ په دوامداره توګه د MQTT اړیکه ګوري او هغه راتلونکي پیغامونه پروسس کوي چې د LED رنګونه کنټرولوي. د callback() فنکشن هغه وخت رامینځته کیږي کله چې په ګډون شوې موضوع کې یو پیغام ترلاسه شي.
ډیمونسټریشن / څه تمه وکړو
یوځل چې هرڅه تنظیم شي او کوډ اپلوډ شي، تاسو باید وکولی شئ د MQTT موضوع ته د پیغامونو په لیږلو سره د WS2812 LEDs رنګ بدل کړئ. که بل کاروونکی رنګ بدل کړي، ټولې نښلول شوې وسیلې به په ورته وخت کې بدلون منعکس کړي. د احتمالي ستونزو لکه د قطبيت برعکس یا ناسمې اړیکې په اړه محتاط اوسئ، کوم چې کولی شي د LEDs د سم فعالیت مخه ونیسي (په ویډیو کې په mm:ss کې).
د ویډیو وختونه
- 00:00 پیل
- 2:00 پېژندنه
- 3:48 د اسنادو پاڼه
- 6:33 د تارونو اړیکه تشریح شوې
- 7:35 د Arduino کوډ تشریح شوی
- 15:03 د ESP32 بورډ او COMP پورټ په Arduino IDE کې غوره کول
- 16:46 د CheerLights ننداره
/*********
:ref: https://randomnerdtutorials.com/esp32-mqtt-publish-subscribe-arduino-ide/
https://docs.sunfounder.com/projects/kepler-kit/en/latest/iotproject/5.mqtt_pub.html
*********/
#include <WiFi.h>
#include <PubSubClient.h>
//#include <Wire.h>
#include <Adafruit_NeoPixel.h>
// Replace the next variables with your SSID/Password combination
const char* ssid = "SSID";
const char* password = "PASSWORD";
// Add your MQTT Broker address:
const char* mqtt_server = "mqtt.cheerlights.com";
const char* unique_identifier = "sunfounder-client-sdgvsasdda";
WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
int value = 0;
// Define the supported CheerLights colors and their RGB values
String colorName[] = {"red", "pink", "green", "blue", "cyan", "white", "warmwhite", "oldlace", "purple", "magenta", "yellow", "orange"};
int colorRGB[][3] = { 255, 0, 0, // "red"
255, 192, 203, // "pink"
0, 255, 0, // "green"
0, 0, 255, // "blue"
0, 255, 255, // "cyan"
255, 255, 255, // "white"
255, 223, 223, // "warmwhite"
255, 223, 223, // "oldlace"
128, 0, 128, // "purple"
255, 0, 255, // "magenta"
255, 255, 0, // "yellow"
255, 165, 0}; // "orange"
// init rgb strip
#define LED_PIN 13
#define NUM_LEDS 8
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);
void setup() {
Serial.begin(115200);
// wifi default settings
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
// rgb strip begin
pixels.begin();
pixels.show();
}
void setup_wifi() {
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void callback(char* topic, byte* message, unsigned int length) {
Serial.print("Message arrived on topic: ");
Serial.print(topic);
Serial.print(". Message: ");
String messageTemp;
for (int i = 0; i < length; i++) {
Serial.print((char)message[i]);
messageTemp += (char)message[i];
}
Serial.println();
// If a message is received on the topic, you will check this message.
// Changes the output state according to the message
if (String(topic) == "cheerlights") {
Serial.print("Changing color to ");
Serial.println(messageTemp);
setColor(messageTemp);
}
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (client.connect(unique_identifier)) {
Serial.println("connected");
// Subscribe
client.subscribe("cheerlights");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
void setColor(String color) {
// Loop through the list of colors to find the matching color
for (int colorIndex = 0; colorIndex < 12; colorIndex++) {
if (color == colorName[colorIndex]) {
// Set the color of each NeoPixel on the strip
for (int pixel = 0; pixel < NUM_LEDS; pixel++) {
pixels.setPixelColor(pixel, pixels.Color (colorRGB [colorIndex][0], colorRGB [colorIndex][1], colorRGB [colorIndex][2]));
}
pixels.show();
}
}
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
}
Common Course Links
Common Course Files
سرچینې او حوالې
-
اسنادESP32 Tutorial 47/55 - SunFounder doc page for cheer lightdocs.sunfounder.com
فایلونه📁
هیڅ فایل شتون نلري.