کوڈ تلاش کریں

ESP32 ٹیوٹوریل 52/55 - WS2812 CheerLights MQTT گلوبل سنک LCD کے ساتھ | سن فاؤنڈر ESP32 IoT کٹ

ESP32 ٹیوٹوریل 52/55 - WS2812 CheerLights MQTT گلوبل سنک LCD کے ساتھ | سن فاؤنڈر ESP32 IoT کٹ

اس ٹیوٹوریل میں، ہم ESP32 استعمال کرتے ہوئے ایک CheerLights پروجیکٹ بنائیں گے، جو MQTT کے ذریعے عالمی سطح پر رنگوں کو ہم آہنگ کرے گا۔ یہ پروجیکٹ نہ صرف دوسرے صارفین کے ان پٹ کی بنیاد پر رنگ بدلے گا بلکہ LCD اسکرین پر موجودہ رنگ اور اس کے اپڈیٹ ہونے کی تعداد بھی دکھائے گا۔ نتیجہ IoT صلاحیتوں کا ایک تفریحی مظاہرہ ہے، جو ظاہر کرتا ہے کہ آلات کس طرح تعامل کر سکتے ہیں اور صارفین کو فاصلوں کے باوجود جڑے رکھ سکتے ہیں۔ مزید وضاحت کے لیے، ویڈیو دیکھیں (ویڈیو میں 00:00 پر)۔

esp32-52-cheer-light-lcd-main

ہارڈویئر کی وضاحت

اس پروجیکٹ کو بنانے کے لیے، آپ کو ایک ESP32 مائیکروکنٹرولر، ایک WS2812 LED سٹرپ، اور ایک LCD ڈسپلے کی ضرورت ہوگی۔ ESP32 آپریشن کے دماغ کے طور پر کام کرتا ہے، اپنی بلٹ ان Wi-Fi صلاحیتوں کو استعمال کرتے ہوئے انٹرنیٹ سے جڑتا ہے اور MQTT پیغامات وصول کرتا ہے۔ یہ دوسرے صارفین کے عالمی ان پٹ کی بنیاد پر LED رنگوں میں ریئل ٹائم اپڈیٹس کی اجازت دیتا ہے۔

WS2812 LED سٹرپ ان پروجیکٹس کے لیے ایک مقبول انتخاب ہے جنہیں ایڈریس ایبل RGB LEDs کی ضرورت ہوتی ہے۔ ہر LED کو آزادانہ طور پر کنٹرول کیا جا سکتا ہے، جس سے بھرپور رنگ ڈسپلے ممکن ہوتا ہے۔ LCD موجودہ رنگ اور اس کے تبدیل ہونے کی تعداد کی بصری تصدیق فراہم کرے گا، جس سے صارف کے تعامل میں اضافہ ہوگا۔

cheeLights_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 کی تعداد سے محتاط رہیں؛ پاور حدود سے تجاوز کرنے پر اضافی پاور ذرائع کی ضرورت ہوتی ہے۔

وائرنگ ہدایات

ESP32-11_LCD-wiring
esp32-47-cheer-light-wiring

اجزاء کو وائر کرنے کے لیے، 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 کے ساتھ چیرلائٹ کا مظاہرہ

تصاویر

ESP32-11_LCD-wiring
ESP32-11_LCD-wiring
esp32-47-cheer-light-wiring
esp32-47-cheer-light-wiring
esp32-52-cheer-light-lcd-main
esp32-52-cheer-light-lcd-main
cheeLights_LCD
cheeLights_LCD
853-ESP32 Tutorial 52/55- CheerLight MQTT and LCD
زبان: C++
/*********
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
  






}

وسائل اور حوالہ جات

فائلیں📁

کوئی فائلیں دستیاب نہیں ہیں۔