کوډ ولټوئ

د ESP32 ټیوټوریل 47/55 - WS2812 CheerLights د MQTT په کارولو سره د انټرنیټ له لارې | د SunFounder د ESP32 IoT کټ

د ESP32 ټیوټوریل 47/55 - WS2812 CheerLights د MQTT په کارولو سره د انټرنیټ له لارې | د SunFounder د ESP32 IoT کټ

په دې ټیوټوریل کې به موږ د ESP32 او WS2812 LEDs په کارولو سره یو همغږي شوی رڼا سیستم جوړ کړو چې د MQTT له لارې له لرې ځایه کنټرول کېدای شي. دا سیستم ډیرو کاروونکو ته اجازه ورکوي چې د رڼا رنګونه په یو وخت کې بدل کړي، پرته له دې چې موقعیت ته پام وکړي، یوه نښلول شوې تجربه رامنځته کوي. دا پروژه د SunFounder ESP32 IoT کټ کاروي، چې د Wi-Fi وړتیاوو سره یو پیاوړی مایکروکنټرولر لري، چې د IoT غوښتنلیکونو لپاره ډېر مناسب دی.

WS2812_strip.ON

د ویډیو په اوږدو کې به موږ د دې اغیزې د ترلاسه کولو لپاره اړین تنظیم، تارونه، او د کوډ پلي کول په تفصیل سره وګورو. که تاسو نورو روښانتیاوو ته اړتیا لرئ، ډاډ ترلاسه کړئ چې ویډیو په ځانګړو وختونو کې وګورئ (په ویډیو کې په 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 د پروګرام کولو پرمهال چالان شوی وي ترڅو اړیکه جوړه شي. یوځل چې تارونه ونښلول شي، تاسو کولی شئ کوډ اپلوډ کړئ او تنظیم ازموئ.

esp32-47-cheer-light-wiring

د کوډ مثالونه او تفصیل

کوډ د 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 ننداره

انځورونه

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();
}

سرچینې او حوالې

فایلونه📁

هیڅ فایل شتون نلري.