کوڈ تلاش کریں

ESP32 ٹیوٹوریل 38/55 - اپنے موبائل فون سے RGB LED کو کنٹرول کرنا | سن فاؤنڈر کا ESP32 IoT لرننگ کٹ

ESP32 ٹیوٹوریل 38/55 - اپنے موبائل فون سے RGB LED کو کنٹرول کرنا | سن فاؤنڈر کا ESP32 IoT لرننگ کٹ

اس ٹیوٹوریل میں، ہم سیکھیں گے کہ SunFounder ESP32 لرننگ کٹ کے ESP32 ماجیول کا استعمال کرتے ہوئے RGB LED کو کیسے کنٹرول کیا جائے۔ اپنے موبائل ڈیوائس سے کمانڈ بھیج کر، آپ LED کا رنگ تبدیل کر سکتے ہیں یا اسے مکمل طور پر بند کر سکتے ہیں۔ یہ پروجیکٹ ESP32 کی صلاحیتوں کو استعمال کرتا ہے، بلٹ ان Wi-Fi اور Bluetooth فیچرز کو ہموار کنیکٹیویٹی اور کنٹرول کے لیے فائدہ اٹھاتا ہے۔

ESP32_RGB_led_wires
ESP32_rgb_pin

RGB LED تین الگ الگ LEDs پر مشتمل ہے: سرخ، سبز، اور نیلا، جنہیں ملا کر مختلف رنگ بنائے جا سکتے ہیں۔ اس پروجیکٹ میں، آپ سیکھیں گے کہ RGB LED کو صحیح طریقے سے کیسے وائر کیا جائے اور ESP32 کو Bluetooth کمانڈز کا جواب دینے کے لیے کیسے پروگرام کیا جائے۔ ٹیوٹوریل آپ کو اس فعالیت کو حاصل کرنے کے لیے ضروری کوڈ اجزاء کی بھی رہنمائی کرے گا (ویڈیو میں 02:15 پر)۔

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

اس پروجیکٹ کے بنیادی اجزاء میں ESP32 مائیکروکنٹرولر اور RGB LED شامل ہیں۔ ESP32 ایک طاقتور ماجیول ہے جس میں بلٹ ان Wi-Fi اور Bluetooth ہے، جو اسے IoT ایپلیکیشنز کے لیے مثالی بناتا ہے۔ اس پروجیکٹ میں، یہ موبائل ڈیوائس سے کمانڈز حاصل کرنے اور RGB LED کو اس کے مطابق کنٹرول کرنے کے لیے سرور کے طور پر کام کرے گا۔

RGB LED میں چار پن ہوتے ہیں: ایک مشترکہ پن (یا تو anode یا cathode) اور تین پن انفرادی رنگوں کے لیے۔ مشترکہ پن یا تو پاور سورس یا گراؤنڈ سے جڑتا ہے، جبکہ دیگر تین پن مزاحموں کے ذریعے ESP32 کے GPIO پنوں سے جڑتے ہیں تاکہ کرنٹ کو محدود کیا جا سکے اور LEDs کی حفاظت کی جا سکے۔ یہ سیٹ اپ ہر رنگ کی چمک کے عین مطابق کنٹرول کی اجازت دیتا ہے، جس سے رنگوں کی وسیع رینج بنتی ہے۔

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

مینوفیکچرر SunFounder
پارٹ نمبر RGB LED
مشترکہ پن کی قسم کامن anode / کامن cathode
فارورڈ وولٹیج (V) 2.0 - 3.2 V
زیادہ سے زیادہ فارورڈ کرنٹ (A) 20 mA
عام کرنٹ (A) 15 mA
رنگ ریزولوشن 8 بٹ (0-255)
پیکیج تھرو-ہول / SMD

 

  • ہر LED چینل کے ذریعے کرنٹ کو محدود کرنے کے لیے مناسب مزاحم قدریں (عام طور پر 220 Ohm) یقینی بنائیں۔
  • وائرنگ سے پہلے مشترکہ پن کی کنفیگریشن (anode یا cathode) چیک کریں۔
  • ہر LED کو بھیجے گئے سگنل کو ایڈجسٹ کرکے مدھم کرنے اور رنگ ملانے کے لیے PWM استعمال کریں۔
  • شارٹ سرکٹ سے بچنے کے لیے وائرنگ میں احتیاط برتیں؛ ایک وقت میں ایک پن جوڑیں۔
  • سیٹ اپ کے بعد ہر رنگ کو انفرادی طور پر ٹیسٹ کریں تاکہ درست وائرنگ کی تصدیق ہو سکے۔

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

ES32-38_RGB_LED-wiring

RGB LED کو ESP32 سے وائر کرنے کے لیے، پہلے RGB LED کو بریڈ بورڈ پر رکھیں۔ لمبا پن مشترکہ پن ہے، جسے آپ یا تو مثبت وولٹیج (کامن anode کے لیے) یا گراؤنڈ (کامن cathode کے لیے) سے جوڑیں گے۔ اگر آپ کامن anode استعمال کر رہے ہیں، تو لمبے پن کو ESP32 کے 3.3V پن سے جوڑیں۔ کامن cathode کے لیے، اسے GND پن سے جوڑیں۔

اگلا، تین 220 Ohm مزاحم لیں اور ہر مزاحم کا ایک سرا LED کے متعلقہ RGB پنوں سے جوڑیں۔ مزاحموں کے دوسرے سروں کو ESP32 کے GPIO پنوں سے جوڑیں: LED کے سرخ پن کو GPIO 27 سے، سبز پن کو GPIO 26 سے، اور نیلے پن کو GPIO 25 سے جوڑیں۔ آخر میں، یقینی بنائیں کہ مشترکہ پن آپ کی کنفیگریشن (anode یا cathode) کی بنیاد پر مناسب طریقے سے جڑا ہوا ہے۔

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

اس پروجیکٹ کا کوڈ RGB LED سے جڑے پنوں کی وضاحت سے شروع ہوتا ہے۔ درج ذیل اقتباس دکھاتا ہے کہ پنوں کا اعلان کیسے کیا گیا ہے:

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

یہاں، redPin، greenPin، اور bluePin کو RGB LED کے ہر رنگ چینل کے لیے ESP32 پر مخصوص GPIO نمبر تفویض کیے گئے ہیں۔

سیٹ اپ فنکشن میں، Bluetooth کو انیشیالائز کیا جاتا ہے، اور PWM سیٹنگز لاگو کی جاتی ہیں۔ یہ اقتباس اس انیشیالائزیشن کو ظاہر کرتا ہے:

void setup() {
  Serial.begin(115200);      // سیریل پورٹ کو انیشیالائز کریں
  setupBLE();                // Bluetooth BLE کو انیشیالائز کریں

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

یہ کوڈ سیریل کمیونیکیشن کو انیشیالائز کرتا ہے اور Bluetooth فعالیت کو سیٹ اپ کرتا ہے جبکہ RGB LED پنوں کو کنٹرول کے لیے PWM چینلز سے منسلک کرتا ہے۔

آخر میں، لوپ فنکشن موصول شدہ Bluetooth پیغامات کو چیک کرتا ہے اور LED کا رنگ اس کے مطابق ایڈجسٹ کرتا ہے:

if (value == "red") {
  setColor(255, 0, 0); // سرخ
  Serial.println("red");
}

اس حصے میں، اگر موصول شدہ قدر "red" ہے، تو LED کو setColor فنکشن کا استعمال کرتے ہوئے مکمل سرخ چمک پر سیٹ کیا جائے گا۔

کوڈ کی مکمل سمجھ کے لیے، ویڈیو ٹیوٹوریل دیکھنے کی سفارش کی جاتی ہے جہاں مکمل کوڈ مضمون کے نیچے لوڈ کیا گیا ہے۔

ڈیمونسٹریشن / کیا توقع کریں

ایک بار جب سب کچھ وائر ہو جائے اور کوڈ اپ لوڈ ہو جائے، تو آپ اپنے موبائل ڈیوائس سے Bluetooth کے ذریعے RGB LED کو کنٹرول کرنے کے قابل ہو جائیں گے۔ "red"، "green"، "blue" وغیرہ جیسی کمانڈز بھیج کر، آپ دیکھیں گے کہ LED اس کے مطابق رنگ بدلتی ہے۔ اگر آپ "LED_off" بھیجتے ہیں، تو RGB LED بند ہو جائے گی۔ یہ یقینی بنانے کے لیے کہ کمانڈز صحیح طریقے سے موصول ہو رہی ہیں، سیریل مانیٹر کو کسی بھی ڈیبگنگ پیغامات کے لیے چیک کرنا یقینی بنائیں (ویڈیو میں 10:45 پر)۔

ویڈیو ٹائم اسٹیمپس

  • 00:00 شروع
  • 1:59 آر جی بی ایل ای ڈی کیا ہے؟
  • 6:01 آر جی بی رنگ کی وضاحت
  • 10:01 دستاویزات کا صفحہ
  • 11:19 وائرنگ کی وضاحت
  • 13:34 Arduino IDE میں ESP32 بورڈ اور COM پورٹ کا انتخاب
  • 15:15 آرڈوینو کوڈ
  • 18:02 اپنے فون سے آر جی بی ایل ای ڈی کو کنٹرول کرنے کا مظاہرہ

تصاویر

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

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

فائلیں📁

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