ESP32 ٹیوٹوریل 52/55 - WS2812 CheerLights MQTT گلوبل سنک LCD کے ساتھ | سن فاؤنڈر ESP32 IoT کٹ
اس ٹیوٹوریل میں، ہم ESP32 استعمال کرتے ہوئے ایک CheerLights پروجیکٹ بنائیں گے، جو MQTT کے ذریعے عالمی سطح پر رنگوں کو ہم آہنگ کرے گا۔ یہ پروجیکٹ نہ صرف دوسرے صارفین کے ان پٹ کی بنیاد پر رنگ بدلے گا بلکہ LCD اسکرین پر موجودہ رنگ اور اس کے اپڈیٹ ہونے کی تعداد بھی دکھائے گا۔ نتیجہ IoT صلاحیتوں کا ایک تفریحی مظاہرہ ہے، جو ظاہر کرتا ہے کہ آلات کس طرح تعامل کر سکتے ہیں اور صارفین کو فاصلوں کے باوجود جڑے رکھ سکتے ہیں۔ مزید وضاحت کے لیے، ویڈیو دیکھیں (ویڈیو میں 00:00 پر)۔
ہارڈویئر کی وضاحت
اس پروجیکٹ کو بنانے کے لیے، آپ کو ایک ESP32 مائیکروکنٹرولر، ایک WS2812 LED سٹرپ، اور ایک LCD ڈسپلے کی ضرورت ہوگی۔ ESP32 آپریشن کے دماغ کے طور پر کام کرتا ہے، اپنی بلٹ ان Wi-Fi صلاحیتوں کو استعمال کرتے ہوئے انٹرنیٹ سے جڑتا ہے اور MQTT پیغامات وصول کرتا ہے۔ یہ دوسرے صارفین کے عالمی ان پٹ کی بنیاد پر LED رنگوں میں ریئل ٹائم اپڈیٹس کی اجازت دیتا ہے۔
WS2812 LED سٹرپ ان پروجیکٹس کے لیے ایک مقبول انتخاب ہے جنہیں ایڈریس ایبل RGB LEDs کی ضرورت ہوتی ہے۔ ہر LED کو آزادانہ طور پر کنٹرول کیا جا سکتا ہے، جس سے بھرپور رنگ ڈسپلے ممکن ہوتا ہے۔ LCD موجودہ رنگ اور اس کے تبدیل ہونے کی تعداد کی بصری تصدیق فراہم کرے گا، جس سے صارف کے تعامل میں اضافہ ہوگا۔
ڈیٹاشیٹ تفصیلات
| مینوفیکچرر | SunFounder |
|---|---|
| پارٹ نمبر | ESP32 |
| لاجک/آئی او وولٹیج | 3.3 V |
| سپلائی وولٹیج | 5 V |
| آؤٹ پٹ کرنٹ (فی چینل) | 20 mA |
| پیک کرنٹ (فی چینل) | 60 mA |
| PWM فریکوئنسی رہنمائی | 400 Hz |
| ان پٹ لاجک تھریشولڈز | 0.15 V (کم)، 0.8 V (زیادہ) |
| وولٹیج ڈراپ / RDS(on) / سیچوریشن | 0.2 V |
| تھرمل حدود | 85 °C |
| پیکیج | ESP32 ماجیول |
| نوٹس / ویریئنٹس | بلٹ ان Wi-Fi اور بلوٹوتھ شامل ہے |
- ESP32 (5 V) اور WS2812 سٹرپ (5 V) کو مناسب پاور سپلائی یقینی بنائیں۔
- ESP32 اور LED سٹرپ کے درمیان مشترکہ گراؤنڈ استعمال کریں۔
- رنگ ہم آہنگی کے لیے ایک مناسب MQTT بروکر نافذ کریں۔
- WS2812 کے ڈیٹا پن کنکشن پر توجہ دیں (کوڈ کے مطابق پن 14)۔
- LEDs کی تعداد سے محتاط رہیں؛ پاور حدود سے تجاوز کرنے پر اضافی پاور ذرائع کی ضرورت ہوتی ہے۔
وائرنگ ہدایات


اجزاء کو وائر کرنے کے لیے، WS2812 LED سٹرپ کو جوڑ کر شروع کریں۔ LED سٹرپ کے گراؤنڈ پن (عام طور پر سیاہ) کو ESP32 کے گراؤنڈ پن سے جوڑیں۔ اگلا، LED سٹرپ کے VCC پن (عام طور پر سرخ) کو ESP32 کے 5V آؤٹ پٹ سے جوڑیں۔ آخر میں، ڈیٹا پن (اکثر پیلا) کو ESP32 کے GPIO پن 14 سے جوڑیں۔
LCD کے لیے، گراؤنڈ پن (اکثر سیاہ) کو ESP32 کے گراؤنڈ سے جوڑیں۔ VCC پن (عام طور پر سرخ) کو 5V آؤٹ پٹ سے منسلک ہونا چاہیے۔ SDA پن (عام طور پر سرمئی) GPIO پن 21 سے جڑتا ہے، جبکہ SCL پن (عام طور پر سفید) GPIO پن 22 سے جڑتا ہے۔ یہ سیٹ اپ ESP32 کو LCD کے ساتھ بات چیت کرنے اور ضرورت کے مطابق معلومات دکھانے کی اجازت دیتا ہے۔
کوڈ مثالیں اور واک تھرو
سیٹ اپ فنکشن میں، ہم LCD کو ابتدائی بناتے ہیں اور Wi-Fi سے جڑتے ہیں۔ نیچے دیا گیا کوڈ ظاہر کرتا ہے کہ ضروری لائبریریز کی وضاحت اور LCD سیٹ اپ کیسے کریں:
#include
#include
LiquidCrystal_I2C lcd(0x27, 16,2); // LCD ایڈریس سیٹ کریں
void setup() {
Serial.begin(115200);
lcd.init(); // LCD کو ابتدائی بنائیں
lcd.backlight(); // LCD بیک لائٹ آن کریں۔
}
یہ LCD کو استعمال کے لیے ابتدائی بناتا ہے، جس سے پیغامات دکھائے جا سکتے ہیں۔ اگلا اقتباس ظاہر کرتا ہے کہ Wi-Fi کنکشن کیسے قائم کیا جاتا ہے:
void setup_wifi() {
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
lcdConnect(); //LCD کے لیے
delay(500);
}
Serial.println("WiFi منسلک");
}
یہ فنکشن مخصوص Wi-Fi نیٹ ورک سے کنکشن قائم کرتا ہے، کنکشن کے دوران LCD پر پیغام دکھاتا ہے۔ آخر میں، رنگ تبدیل کرنے کی منطق کال بیک فنکشن میں سنبھالی جاتی ہے:
void callback(char* topic, byte* message, unsigned int length) {
String messageTemp;
for (int i = 0; i < length; i++) {
messageTemp += (char)message[i];
}
if (String(topic) == "cheerlights") {
setColor(messageTemp);
}
}
یہ فنکشن "cheerlights" ٹاپک پر آنے والے پیغامات کو سنتا ہے اور اس کے مطابق رنگ اپڈیٹ کرتا ہے۔ مکمل کوڈ مضمون کے نیچے لوڈ ہوتا ہے، لہذا مکمل نفاذ کے لیے اس کا جائزہ لینا یقینی بنائیں۔
مظاہرہ / کیا توقع کریں
پروجیکٹ کی تکمیل پر، آپ توقع کر سکتے ہیں کہ LED سٹرپ عالمی MQTT فیڈ کے ان پٹ کی بنیاد پر رنگ بدلے گی۔ LCD موجودہ رنگ کا نام اور اس کے تبدیل ہونے کی تعداد دکھائے گا۔ اگر آپ انٹرنیٹ منقطع کرتے ہیں، تو LCD "کنیکٹ ہو رہا ہے..." ظاہر کرے گا جب تک کنکشن دوبارہ قائم نہ ہو (ویڈیو میں 12:30 پر)۔
عام مشکلات میں یہ یقینی بنانا شامل ہے کہ ڈیٹا کنکشنز کے لیے صحیح پن استعمال ہوں اور Wi-Fi اسناد درست ہوں۔ اگر SSID یا پاس ورڈ میں کوئی فرق ہو، تو ESP32 کنیکٹ ہونے میں ناکام ہو جائے گا، اور LCD کنیکٹنگ پیغام دکھاتا رہے گا۔
ویڈیو ٹائم اسٹیمپس
- 00:00 آغاز
- 1:59 پروجیکٹ کا تعارف
- 6:16 وائرنگ کی وضاحت
- 8:13 آرڈوینو کوڈ کی وضاحت
- 14:26 آرڈوینو آئی ڈی ای پر ESP32 بورڈ اور COM پورٹ کا انتخاب
- 16:07 LCD کے ساتھ چیرلائٹ کا مظاہرہ
/*********
This is the origianl code from Examples->iot_5_cheerlight of SunFounder
full video instrucions https://youtu.be/xEqmxMiF-E8
📚⬇️ Download and resource page https://robojax.com/RJT685
I have added LCD to display:
1-Color name
2-Count the number of times the color is updated
3-Showon LCD if wifi is connected
4-Show connecting if not connected or disconnected
Written by Ahmad Shamshiri
www.Robojax.com
Dec 29, 2023
: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 <Wire.h>
#include <LiquidCrystal_I2C.h>
//SDA->21,SCL->22
LiquidCrystal_I2C lcd(0x27, 16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
int colorCount = 0;
int lastColor=0;
byte connected[] = {
B00001,
B00001,
B00011,
B00111,
B00111,
B01111,
B01111,
B11111
};
#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 = "dars";
const char* password = "5152535455";
// 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);
lcd.init();// initialize the lcd
lcd.backlight(); // Turns on the LCD backlight.
// 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) {
lcdConnect();//for LCD
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()) {
lcdConnect();
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]) {
lastColor = colorIndex;//remeber the last color
colorCount++;//increment the count
// 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]));
delay(100);
}
pixels.show();
}
}
}
void lcdConnect()
{
lcd.clear();
lcd.setCursor(0, 0); //line 0
lcd.print("Connecting...");
lcd.setCursor(0, 1);
lcd.print("SSID:"); //line 1
lcd.print(ssid);
}
void loop() {
lcd.clear();
if (!client.connected()) {
reconnect();
}else{
lcd.createChar(0, connected);
lcd.setCursor(15, 0);
lcd.write(byte(0));
}
client.loop();
//first row
lcd.setCursor(0, 0);
lcd.print("Color: ");
lcd.print(colorName[lastColor]);
//second row
lcd.setCursor(0, 1);
lcd.print("Changed ");
lcd.print(colorCount);
lcd.print(" times");
delay(1000);//we must have delay to able to read the display
}
Common Course Links
Common Course Files
وسائل اور حوالہ جات
-
دستاویزاتESP32 Tutorial 52/55 - SunFounder doc page for CheerLightdocs.sunfounder.com
فائلیں📁
کوئی فائلیں دستیاب نہیں ہیں۔