ESP32 টিউটোরিয়াল 47/55 - ইন্টারনেটের মাধ্যমে MQTT ব্যবহার করে WS2812 CheerLights | SunFounder-এর ESP32 IoT কিট
এই টিউটোরিয়ালে, আমরা ESP32 এবং WS2812 LED ব্যবহার করে একটি সিঙ্ক্রোনাইজড লাইটিং সিস্টেম তৈরি করব যা MQTT-এর মাধ্যমে দূর থেকে নিয়ন্ত্রণ করা যায়। এই সিস্টেমটি একাধিক ব্যবহারকারীকে একই সাথে আলোর রঙ পরিবর্তন করতে দেয়, অবস্থান নির্বিশেষে একটি সংযুক্ত অভিজ্ঞতা তৈরি করে। প্রকল্পটি SunFounder ESP32 IoT কিট ব্যবহার করে, যার মধ্যে Wi-Fi ক্ষমতাসম্পন্ন একটি শক্তিশালী মাইক্রোকন্ট্রোলার রয়েছে, যা IoT অ্যাপ্লিকেশনের জন্য আদর্শ।
ভিডিও জুড়ে, আমরা এই প্রভাব অর্জনের জন্য প্রয়োজনীয় সেটআপ, ওয়্যারিং এবং কোড বাস্তবায়নের মাধ্যমে এগিয়ে যাব। আরও স্পষ্টীকরণের প্রয়োজন হলে, নির্দিষ্ট টাইমস্ট্যাম্পে (ভিডিওতে mm:ss) ভিডিওটি দেখতে ভুলবেন না।
হার্ডওয়্যার ব্যাখ্যা
এই প্রকল্পের প্রাথমিক উপাদানগুলির মধ্যে রয়েছে ESP32 মাইক্রোকন্ট্রোলার, WS2812 LED স্ট্রিপ এবং একটি MQTT ব্রোকার। ESP32 একটি বহুমুখী মাইক্রোকন্ট্রোলার যার বিল্ট-ইন Wi-Fi এবং ব্লুটুথ ক্ষমতা রয়েছে, যা এটিকে সহজেই ইন্টারনেটের সাথে সংযোগ করতে দেয়। এটি আমাদের প্রকল্পের মস্তিষ্ক হিসেবে কাজ করে, যোগাযোগ পরিচালনা করে এবং LED স্ট্রিপ নিয়ন্ত্রণ করে।
WS2812 LED স্ট্রিপটি পৃথকভাবে ঠিকানাযোগ্য RGB LED নিয়ে গঠিত, যা বিস্তৃত রঙ প্রদর্শনের জন্য নিয়ন্ত্রণ করা যায়। প্রতিটি 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 স্ট্রিপের মতো একই গ্রাউন্ডের সাথে সংযুক্ত রয়েছে।
পাওয়ার এবং ডেটা সংযোগ সেট আপ করার পরে, প্রোগ্রামিংয়ের জন্য একটি মাইক্রো USB কেবল ব্যবহার করে ESP32-কে আপনার কম্পিউটারের সাথে সংযোগ করুন। একটি সংযোগ স্থাপন করতে প্রোগ্রামিংয়ের সময় 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 মান অ্যারে ব্যবহার করে সংজ্ঞায়িত করি। এটি প্রোগ্রামটিকে ব্যবহারকারীর ইনপুটের উপর ভিত্তি করে সহজেই রঙের সেটিংস অ্যাক্সেস করতে দেয়।
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 LED-এর রঙ পরিবর্তন করতে সক্ষম হওয়া উচিত। যদি অন্য ব্যবহারকারী রঙ পরিবর্তন করে, তবে সমস্ত সংযুক্ত ডিভাইস একই সাথে পরিবর্তনটি প্রতিফলিত করবে। বিপরীত পোলারিটি বা অনুপযুক্ত সংযোগের মতো সম্ভাব্য সমস্যাগুলি সম্পর্কে সতর্ক থাকুন, যা LED-গুলিকে সঠিকভাবে কাজ করা থেকে বাধা দিতে পারে (ভিডিওতে mm:ss)।
ভিডিও টাইমস্ট্যাম্প
- 00:00 শুরু
- 2:00 ভূমিকা
- 3:48 ডকুমেন্টেশন পৃষ্ঠা
- 6:33 ওয়্যারিং ব্যাখ্যা
- 7:35 আরডুইনো কোড ব্যাখ্যা
- 15:03 আরডুইনো আইডিইতে ESP32 বোর্ড এবং COMP পোর্ট নির্বাচন
- 16:46 চিয়ারলাইটস প্রদর্শন
/*********
: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
ফাইলসমূহ📁
কোনো ফাইল উপলব্ধ নেই।