কোড অনুসন্ধান

ESP32 টিউটোরিয়াল ৩৮/৫৫ - আপনার মোবাইল ফোন থেকে RGB LED নিয়ন্ত্রণ করা | SunFounder-এর ESP32 IoT লার্নিং কিট

ESP32 টিউটোরিয়াল ৩৮/৫৫ - আপনার মোবাইল ফোন থেকে RGB LED নিয়ন্ত্রণ করা | SunFounder-এর ESP32 IoT লার্নিং কিট

এই টিউটোরিয়ালে, আমরা SunFounder ESP32 লার্নিং কিট থেকে একটি ESP32 মডিউল ব্যবহার করে কীভাবে একটি RGB LED নিয়ন্ত্রণ করতে হয় তা অন্বেষণ করব। আপনার মোবাইল ডিভাইস থেকে কমান্ড পাঠানোর মাধ্যমে, আপনি LED এর রঙ পরিবর্তন করতে বা সম্পূর্ণরূপে বন্ধ করতে পারেন। এই প্রকল্পটি ESP32 এর ক্ষমতাগুলিকে কাজে লাগায়, নির্বিঘ্ন সংযোগ এবং নিয়ন্ত্রণের জন্য অন্তর্নির্মিত Wi-Fi এবং ব্লুটুথ বৈশিষ্ট্যগুলিকে ব্যবহার করে।

ESP32_RGB_led_wires
ESP32_rgb_pin

RGB LED তিনটি পৃথক LED নিয়ে গঠিত: লাল, সবুজ এবং নীল, যা বিভিন্ন রঙ তৈরি করতে মিশ্রিত করা যেতে পারে। এই প্রকল্পে, আপনি শিখবেন কীভাবে RGB LED সঠিকভাবে সংযোগ করতে হয় এবং ব্লুটুথ কমান্ডে সাড়া দেওয়ার জন্য ESP32 প্রোগ্রাম করতে হয়। টিউটোরিয়ালটি আপনাকে এই কার্যকারিতা অর্জনের জন্য প্রয়োজনীয় কোড উপাদানগুলির মাধ্যমেও গাইড করবে (ভিডিওতে 02:15 এ)।

হার্ডওয়্যার ব্যাখ্যা

এই প্রকল্পের প্রাথমিক উপাদানগুলির মধ্যে রয়েছে ESP32 মাইক্রোকন্ট্রোলার এবং RGB LED। ESP32 একটি শক্তিশালী মডিউল যার অন্তর্নির্মিত Wi-Fi এবং ব্লুটুথ রয়েছে, যা IoT অ্যাপ্লিকেশনের জন্য আদর্শ। এই প্রকল্পে, এটি একটি মোবাইল ডিভাইস থেকে কমান্ড গ্রহণ করতে এবং সেই অনুযায়ী RGB LED নিয়ন্ত্রণ করতে একটি সার্ভার হিসাবে কাজ করবে।

RGB LED এর চারটি পিন রয়েছে: একটি সাধারণ পিন (হয় অ্যানোড বা ক্যাথোড) এবং পৃথক রঙের জন্য তিনটি পিন। সাধারণ পিনটি পাওয়ার উৎস বা গ্রাউন্ডের সাথে সংযুক্ত থাকে, অন্যদিকে অন্য তিনটি পিন কারেন্ট সীমিত করতে এবং LED গুলিকে রক্ষা করতে প্রতিরোধকের মাধ্যমে ESP32 এর GPIO পিনের সাথে সংযুক্ত থাকে। এই সেটআপটি প্রতিটি রঙের উজ্জ্বলতার সুনির্দিষ্ট নিয়ন্ত্রণের অনুমতি দেয়, যা বিস্তৃত রঙ তৈরি করে।

ডেটাশিট বিবরণ

প্রস্তুতকারক SunFounder
পার্ট নম্বর RGB LED
সাধারণ পিনের ধরন সাধারণ অ্যানোড / সাধারণ ক্যাথোড
ফরোয়ার্ড ভোল্টেজ (V) 2.0 - 3.2 V
সর্বোচ্চ ফরোয়ার্ড কারেন্ট (A) 20 mA
সাধারণ কারেন্ট (A) 15 mA
রঙের রেজোলিউশন 8 বিট (0-255)
প্যাকেজ থ্রু-হোল / SMD

 

  • প্রতিটি LED চ্যানেলের মাধ্যমে কারেন্ট সীমিত করতে সঠিক প্রতিরোধকের মান (সাধারণত 220 ওহম) নিশ্চিত করুন।
  • ওয়্যারিং করার আগে সাধারণ পিনের কনফিগারেশন (অ্যানোড বা ক্যাথোড) পরীক্ষা করুন।
  • প্রতিটি LED এ পাঠানো সংকেত সামঞ্জস্য করে ডিমিং এবং রঙ মিশ্রণের জন্য PWM ব্যবহার করুন।
  • শর্ট সার্কিট এড়াতে ওয়্যারিংয়ে সতর্ক থাকুন; একবারে একটি পিন সংযোগ করুন।
  • সঠিক ওয়্যারিং নিশ্চিত করতে সেটআপের পরে প্রতিটি রঙ পৃথকভাবে পরীক্ষা করুন।

ওয়্যারিং নির্দেশাবলী

ES32-38_RGB_LED-wiring

ESP32 এর সাথে RGB LED সংযোগ করতে, প্রথমে একটি ব্রেডবোর্ডে RGB LED রাখুন। লম্বা পিনটি সাধারণ পিন, যা আপনি ইতিবাচক ভোল্টেজের (সাধারণ অ্যানোডের জন্য) বা গ্রাউন্ডের (সাধারণ ক্যাথোডের জন্য) সাথে সংযুক্ত করবেন। আপনি যদি সাধারণ অ্যানোড ব্যবহার করেন, তাহলে লম্বা পিনটি ESP32 এর 3.3V পিনের সাথে সংযুক্ত করুন। সাধারণ ক্যাথোডের জন্য, এটি GND পিনের সাথে সংযুক্ত করুন।

এরপর, তিনটি 220 ওহম প্রতিরোধক নিন এবং প্রতিটি প্রতিরোধকের এক প্রান্ত LED এর সংশ্লিষ্ট RGB পিনের সাথে সংযুক্ত করুন। প্রতিরোধকগুলির অন্য প্রান্তগুলি ESP32 GPIO পিনের সাথে সংযুক্ত করুন: LED এর লাল পিনটি GPIO 27 এর সাথে, সবুজ পিনটি GPIO 26 এর সাথে এবং নীল পিনটি GPIO 25 এর সাথে সংযুক্ত করুন। অবশেষে, নিশ্চিত করুন যে সাধারণ পিনটি আপনার কনফিগারেশন (অ্যানোড বা ক্যাথোড) অনুযায়ী যথাযথভাবে সংযুক্ত রয়েছে।

কোড উদাহরণ ও ওয়াকথ্রু

এই প্রকল্পের কোডটি RGB LED এর সাথে সংযুক্ত পিনগুলি সংজ্ঞায়িত করার মাধ্যমে শুরু হয়। নিম্নলিখিত অংশটি দেখায় যে পিনগুলি কীভাবে ঘোষণা করা হয়েছে:

const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;

এখানে, redPin, greenPin, এবং bluePin RGB LED এর প্রতিটি রঙের চ্যানেলের জন্য ESP32 এ নির্দিষ্ট GPIO নম্বর নির্ধারণ করা হয়েছে।

সেটআপ ফাংশনে, ব্লুটুথ প্রারম্ভিক করা হয় এবং PWM সেটিংস প্রয়োগ করা হয়। এই অংশটি এই প্রারম্ভিককরণ প্রদর্শন করে:

void setup() {
  Serial.begin(115200);      // সিরিয়াল পোর্ট প্রারম্ভিক করুন
  setupBLE();                // ব্লুটুথ BLE প্রারম্ভিক করুন

  ledcAttach(redPin, freq, resolution);
  ledcAttach(greenPin, freq, resolution);
  ledcAttach(bluePin, freq, resolution);
}

এই কোডটি সিরিয়াল যোগাযোগ প্রারম্ভিক করে এবং ব্লুটুথ কার্যকারিতা সেট আপ করে, নিয়ন্ত্রণের জন্য RGB LED পিনগুলিকে PWM চ্যানেলের সাথে সংযুক্ত করে।

অবশেষে, লুপ ফাংশনটি প্রাপ্ত ব্লুটুথ বার্তাগুলি পরীক্ষা করে এবং সেই অনুযায়ী LED রঙ সামঞ্জস্য করে:

if (value == "red") {
  setColor(255, 0, 0); // লাল
  Serial.println("red");
}

এই বিভাগে, যদি প্রাপ্ত মান "red" হয়, তাহলে setColor ফাংশন ব্যবহার করে LED সম্পূর্ণ লাল উজ্জ্বলতায় সেট করা হবে।

কোডের সম্পূর্ণ বোঝার জন্য, ভিডিও টিউটোরিয়ালটি দেখার পরামর্শ দেওয়া হয় যেখানে সম্পূর্ণ কোডটি নিবন্ধের নীচে লোড করা আছে।

প্রদর্শন / কী আশা করবেন

একবার সবকিছু সংযুক্ত এবং কোড আপলোড হয়ে গেলে, আপনি আপনার মোবাইল ডিভাইস থেকে ব্লুটুথের মাধ্যমে RGB LED নিয়ন্ত্রণ করতে সক্ষম হবেন। "red", "green", "blue" ইত্যাদির মতো কমান্ড পাঠানোর মাধ্যমে, আপনি LED কে সেই অনুযায়ী রঙ পরিবর্তন করতে দেখবেন। আপনি যদি "LED_off" পাঠান, তাহলে RGB LED বন্ধ হয়ে যাবে। কমান্ডগুলি সঠিকভাবে গ্রহণ করা হচ্ছে তা নিশ্চিত করতে সিরিয়াল মনিটরে যেকোনো ডিবাগিং বার্তা পরীক্ষা করতে ভুলবেন না (ভিডিওতে 10:45 এ)।

ভিডিও টাইমস্ট্যাম্প

  • 00:00 শুরু
  • 1:59 RGB LED কী?
  • 6:01 RGB রঙ ব্যাখ্যা করা হয়েছে
  • 10:01 ডকুমেন্টেশন পৃষ্ঠা
  • 11:19 ওয়্যারিং ব্যাখ্যা করা হয়েছে
  • 13:34 Arduino IDE-তে ESP32 বোর্ড এবং COM পোর্ট নির্বাচন
  • 15:15 Arduino কোড
  • 18:02 আপনার ফোন ব্যবহার করে RGB LED নিয়ন্ত্রণের প্রদর্শন

ছবি

ESP32_rgb_pin
ESP32_rgb_pin
ESP32_RGB_led_wires
ESP32_RGB_led_wires
ES32-38_RGB_LED-wiring
ES32-38_RGB_LED-wiring
839-ESP32 Tutorial 38/55- Arduino code for controlling RGB LED using bluetooth app
ভাষা: C++
#include "BLEDevice.h"
#include "BLEServer.h"
#include "BLEUtils.h"
#include "BLE2902.h"

// Define RGB LED pins
const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;

// Define PWM frequency and resolution
const int freq = 5000;
const int resolution = 8;

// Define the Bluetooth device name
const char *bleName = "ESP32_Bluetooth";

// Define the received text and the time of the last message
String receivedText = "";
unsigned long lastMessageTime = 0;

// Define the UUIDs of the service and characteristics
#define SERVICE_UUID "8785d8b3-9d23-473b-aee5-3fabe2ba9583"
#define CHARACTERISTIC_UUID_RX "b2bcd13b-aab6-4660-92ae-40abf6941fce"
#define CHARACTERISTIC_UUID_TX "4219d86a-d701-4fd2-bd84-04db50f70fe2"

// Define the Bluetooth characteristic
BLECharacteristic *pCharacteristic;

void setup() {
  Serial.begin(115200);      // Initialize the serial port
  setupBLE();                // Initialize the Bluetooth BLE

  ledcAttach(redPin, freq, resolution);
  ledcAttach(greenPin, freq, resolution);
  ledcAttach(bluePin, freq, resolution);
}

void loop() {
  // When the received text is not empty and the time since the last message is over 1 second
  // Send a notification and print the received text
  if (receivedText.length() > 0 && millis() - lastMessageTime > 1000) {
    Serial.print("Received message: ");
    Serial.println(receivedText);
    pCharacteristic->setValue(receivedText.c_str());
    pCharacteristic->notify();
    receivedText = "";
  }

  // Read data from the serial port and send it to BLE characteristic
  if (Serial.available() > 0) {
    String str = Serial.readStringUntil('\n');
    const char *newValue = str.c_str();
    pCharacteristic->setValue(newValue);
    pCharacteristic->notify();
  }
}

// Define the BLE server callbacks
class MyServerCallbacks : public BLEServerCallbacks {
  // Print the connection message when a client is connected
  void onConnect(BLEServer *pServer) {
    Serial.println("Connected");
  }
  // Print the disconnection message when a client is disconnected
  void onDisconnect(BLEServer *pServer) {
    Serial.println("Disconnected");
  }
};

// Define the BLE characteristic callbacks
class MyCharacteristicCallbacks : public BLECharacteristicCallbacks {
  void onWrite(BLECharacteristic *pCharacteristic) {
    std::string value = std::string(pCharacteristic->getValue().c_str());
    if (value == "led_off") {
      setColor(0, 0, 0); // turn the RGB LED off
      Serial.println("RGB LED turned off");
    } else if (value == "red") {
      setColor(255, 0, 0); // Red
      Serial.println("red");
    }
    else if (value == "green") {
      setColor(0, 255, 0); // green
      Serial.println("green");
    }
    else if (value == "blue") {
      setColor(0, 0, 255); // blue
      Serial.println("blue");
    }
    else if (value == "yellow") {
      setColor(255, 150, 0); // yellow
      Serial.println("yellow");
    }
    else if (value == "purple") {
      setColor(80, 0, 80); // purple
      Serial.println("purple");
    }
  }
};

// Initialize the Bluetooth BLE
void setupBLE() {
  BLEDevice::init(bleName);                        // Initialize the BLE device
  BLEServer *pServer = BLEDevice::createServer();  // Create the BLE server
  // Print the error message if the BLE server creation fails
  if (pServer == nullptr) {
    Serial.println("Error creating BLE server");
    return;
  }
  pServer->setCallbacks(new MyServerCallbacks());  // Set the BLE server callbacks

  // Create the BLE service
  BLEService *pService = pServer->createService(SERVICE_UUID);
  // Print the error message if the BLE service creation fails
  if (pService == nullptr) {
    Serial.println("Error creating BLE service");
    return;
  }
  // Create the BLE characteristic for sending notifications
  pCharacteristic = pService->createCharacteristic(CHARACTERISTIC_UUID_TX, BLECharacteristic::PROPERTY_NOTIFY);
  pCharacteristic->addDescriptor(new BLE2902());  // Add the descriptor
  // Create the BLE characteristic for receiving data
  BLECharacteristic *pCharacteristicRX = pService->createCharacteristic(CHARACTERISTIC_UUID_RX, BLECharacteristic::PROPERTY_WRITE);
  pCharacteristicRX->setCallbacks(new MyCharacteristicCallbacks());  // Set the BLE characteristic callbacks
  pService->start();                                                 // Start the BLE service
  pServer->getAdvertising()->start();                                // Start advertising
  Serial.println("Waiting for a client connection...");              // Wait for a client connection
}

void setColor(int red, int green, int blue) {
  // For common-anode RGB LEDs, use 255 minus the color value
  ledcWrite(redPin, red);
  ledcWrite(greenPin, green);
  ledcWrite(bluePin, blue);
}

সম্পদ ও রেফারেন্সসমূহ

ফাইলসমূহ📁

কোনো ফাইল উপলব্ধ নেই।