Search Code

ESP32 ٹیوٹوریل 47/55 - WS2812 CheerLights انٹرنیٹ پر MQTT کے ذریعے استعمال کرنا | سن فاؤنڈر کا ESP32 IoT کٹ

ESP32 ٹیوٹوریل 47/55 - WS2812 CheerLights انٹرنیٹ پر MQTT کے ذریعے استعمال کرنا | سن فاؤنڈر کا ESP32 IoT کٹ

اس ٹیوٹوریل میں، ہم ESP32 اور WS2812 LEDs کا استعمال کرتے ہوئے ایک ہم آہنگ لائٹنگ سسٹم بنائیں گے جسے MQTT کے ذریعے دور سے کنٹرول کیا جا سکتا ہے۔ یہ سسٹم متعدد صارفین کو بیک وقت روشنیوں کا رنگ تبدیل کرنے کی اجازت دیتا ہے، جس سے مقام سے قطع نظر ایک منسلک تجربہ پیدا ہوتا ہے۔ یہ پروجیکٹ SunFounder ESP32 IoT کٹ استعمال کرتا ہے، جس میں وائی فائی صلاحیتوں کے ساتھ ایک طاقتور مائیکرو کنٹرولر شامل ہے، جو اسے IoT ایپلیکیشنز کے لیے مثالی بناتا ہے۔

WS2812_strip.ON

پوری ویڈیو میں، ہم اس اثر کو حاصل کرنے کے لیے ضروری سیٹ اپ، وائرنگ، اور کوڈ کے نفاذ کا جائزہ لیں گے۔ اگر آپ کو مزید وضاحت کی ضرورت ہو تو، مخصوص ٹائم اسٹیمپس پر ویڈیو ضرور دیکھیں (ویڈیو میں mm:ss پر)۔

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

اس پروجیکٹ کے بنیادی اجزاء میں ESP32 مائیکرو کنٹرولر، WS2812 LED سٹرپ، اور ایک MQTT بروکر شامل ہیں۔ ESP32 ایک ورسٹائل مائیکرو کنٹرولر ہے جس میں بلٹ ان وائی فائی اور بلوٹوتھ صلاحیتیں ہیں، جو اسے آسانی سے انٹرنیٹ سے منسلک ہونے کی اجازت دیتی ہیں۔ یہ ہمارے پروجیکٹ کے دماغ کے طور پر کام کرتا ہے، مواصلات کو سنبھالتا ہے اور LED سٹرپ کو کنٹرول کرتا ہے۔

WS2812 LED سٹرپ انفرادی طور پر ایڈریس ایبل RGB LEDs پر مشتمل ہے، جنہیں رنگوں کی وسیع رینج ظاہر کرنے کے لیے کنٹرول کیا جا سکتا ہے۔ ہر LED کو ایک ہی ڈیٹا لائن کا استعمال کرتے ہوئے آن یا آف کیا جا سکتا ہے اور کسی بھی رنگ پر سیٹ کیا جا سکتا ہے، جو اسے متحرک لائٹنگ اثرات کے لیے بہترین بناتا ہے۔ MQTT بروکر مختلف کلائنٹس کے درمیان مواصلات کی سہولت فراہم کرتا ہے، جس سے صارفین LED رنگوں کو کنٹرول کرنے والے موضوعات پر اشاعت اور سبسکرائب کر سکتے ہیں۔

ڈیٹا شیٹ کی تفصیلات

کارخانہ دار Adafruit
پرزہ نمبر WS2812B
لاجک/آئی او وولٹیج 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 سٹرپ کے درمیان مشترکہ زمین استعمال کریں۔
  • سگنل کے انحطاط کو روکنے کے لیے ڈیٹا لائنوں کو چھوٹا رکھیں۔
  • وولٹیج کی بڑھوتری کو ہموار کرنے کے لیے بجلی کی فراہمی پر ایک کپیسیٹر (1000μF) استعمال کرنے پر غور کریں۔
  • سگنل کی عکاسی کو روکنے کے لیے ڈیٹا لائن پر مناسب ریزسٹر استعمال کریں۔
  • LED سٹرپ کے کل کرنٹ ڈرا کا خیال رکھیں؛ ضرورت پڑنے پر بیرونی بجلی استعمال کریں۔

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

ESP32 کو WS2812 LED سٹرپ کے ساتھ وائر کرنے کے لیے، بجلی کی فراہمی کو جوڑ کر شروع کریں۔ LED سٹرپ کی سرخ تار کو 5V بجلی کے منبع سے اور کالی تار کو زمین سے جوڑیں۔ اگلا، WS2812 سٹرپ کی ڈیٹا لائن (پیلی تار) کو ESP32 پر پن 14 سے جوڑیں۔ یقینی بنائیں کہ ESP32 بھی LED سٹرپ کی طرح زمین سے منسلک ہے تاکہ ایک مشترکہ حوالہ برقرار رہے۔

بجلی اور ڈیٹا کنکشن قائم کرنے کے بعد، پروگرامنگ کے لیے ESP32 کو مائیکرو USB کیبل کا استعمال کرتے ہوئے اپنے کمپیوٹر سے جوڑیں۔ آپ کو یہ یقینی بنانا ہوگا کہ پروگرامنگ کے دوران ESP32 آن ہے تاکہ کنکشن قائم ہو سکے۔ وائرنگ مکمل ہونے کے بعد، آپ کوڈ اپ لوڈ کرنے اور سیٹ اپ کی جانچ کرنے کے لیے آگے بڑھ سکتے ہیں۔

esp32-47-cheer-light-wiring

کوڈ مثالیں اور واک تھرو

کوڈ وائی فائی اور MQTT فعالیت کے لیے ضروری لائبریریوں کو شامل کرکے شروع ہوتا ہے۔ شناخت کنندگان ssid اور password آپ کی وائی فائی اسناد کو ذخیرہ کرنے کے لیے استعمال ہوتے ہیں، جبکہ 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() فنکشن سیریل مواصلات کو ابتدائی شکل دیتا ہے، وائی فائی کنکشن قائم کرتا ہے، اور 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 آرڈوینو کوڈ کی وضاحت
  • 15:03 آرڈوینو آئی ڈی ای میں ESP32 بورڈ اور COMP پورٹ کا انتخاب
  • 16:46 چیرلائٹس کا مظاہرہ

تصاویر

WS2812_strip.ON
WS2812_strip.ON
esp32-47-cheer-light-wiring
esp32-47-cheer-light-wiring
848-ESP32 Tutorial 47/55- Arduino code for cheer light
زبان: C++
/*********
  :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();
}

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

فائلیں📁

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