Search Code

ESP32 টিউটোরিয়াল ৩৭/৫৫ - ESP32 BLE এর সাথে ব্লুটুথ অ্যাপ ব্যবহার করা | SunFounder এর ESP32 IoT লার্নিং কিট

ESP32 টিউটোরিয়াল ৩৭/৫৫ - ESP32 BLE এর সাথে ব্লুটুথ অ্যাপ ব্যবহার করা | SunFounder এর ESP32 IoT লার্নিং কিট

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

ব্লুটুথ_লাইটব্লু

আমরা LightBlue Explorer অ্যাপ ব্যবহার করব, যা iOS এবং Android উভয়েই উপলব্ধ, ESP32-এর সাথে যোগাযোগ করতে। এই টিউটোরিয়ালটি ব্লুটুথ লো এনার্জি (BLE) যোগাযোগ বোঝার জন্য ভিত্তিগত এবং আরও উন্নত প্রকল্পগুলির জন্য মঞ্চ তৈরি করে। একটি ভিজ্যুয়াল গাইডের জন্য, অনুগ্রহ করে ভিডিওটি দেখুন (ভিডিওতে ০২:০০ মিনিটে)।

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

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

ESP32 ছাড়াও, আমরা LightBlue অ্যাপ ইনস্টল করা একটি মোবাইল ডিভাইস ব্যবহার করব। এই অ্যাপটি ব্যবহারকারীদের ESP32-এর সাথে সংযোগ করতে এবং ব্লুটুথের মাধ্যমে ডেটা পাঠাতে দেয়। এই উপাদানগুলির একীকরণ ESP32 এবং মোবাইল ডিভাইসগুলির মধ্যে নিরবচ্ছিন্ন যোগাযোগ সক্ষম করে, যা ব্যবহারকারীর মিথস্ক্রিয়া বাড়ায়।

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

প্রস্তুতকারক Espressif Systems
পার্ট নম্বর ESP32-WROOM-32
লজিক/আইও ভোল্টেজ ৩.৩ ভি
সাপ্লাই ভোল্টেজ ৩.০ – ৩.৬ ভি
আউটপুট কারেন্ট (প্রতি চ্যানেল) ৪০ এমএ
পিক কারেন্ট (প্রতি চ্যানেল) ১৬০ এমএ
PWM ফ্রিকোয়েন্সি নির্দেশিকা ১ কিলোহার্টজ
ইনপুট লজিক থ্রেশহোল্ড ০.২ ভিসিসি (নিম্ন), ০.৮ ভিসিসি (উচ্চ)
ভোল্টেজ ড্রপ / RDS(on) / স্যাচুরেশন ০.১ ভি
থার্মাল সীমা ১২৫ ডিগ্রি সেলসিয়াস
প্যাকেজ QFN48
নোট / ভেরিয়েন্ট ESP32-WROOM-32, ESP32-WROVER

 

  • ব্রাউনআউট প্রতিরোধ করতে স্থিতিশীল পাওয়ার সাপ্লাই (৩.৩ ভি) নিশ্চিত করুন।
  • পাওয়ার পিনের কাছে ডিকপলিংয়ের জন্য ক্যাপাসিটর ব্যবহার করুন।
  • উচ্চ কারেন্ট ব্যবহার করলে সঠিক তাপ অপচয় বজায় রাখুন।
  • GPIO পিন ভোল্টেজ স্তর সম্পর্কে সতর্ক থাকুন; এগুলি ৩.৩ ভি সহনশীল।
  • GPIO কনফিগারেশনের জন্য প্রয়োজন অনুযায়ী পুল-আপ বা পুল-ডাউন রেজিস্টর ব্যবহার করুন।
  • BLE সংযোগ পর্যবেক্ষণ করুন; নিশ্চিত করুন যে অ্যাপটি সঠিকভাবে পেয়ার করা হয়েছে।
  • সার্ভিস এবং ক্যারেক্টারিস্টিকের জন্য UUID গুলি অনন্য কিনা যাচাই করুন।
  • ডিবাগিং বার্তাগুলির জন্য নিয়মিত সিরিয়াল মনিটর পরীক্ষা করুন।
  • জটিল সিগন্যাল সমস্যা সমাধানের জন্য একটি লজিক অ্যানালাইজার ব্যবহার করার কথা বিবেচনা করুন।

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

এই প্রকল্পের জন্য ওয়্যারিং সহজবোধ্য কারণ ESP32 মূলত পাওয়ার এবং প্রোগ্রামিংয়ের জন্য USB-এর মাধ্যমে সংযুক্ত হয়। একটি মাইক্রো USB কেবল ব্যবহার করে ESP32-কে আপনার কম্পিউটারে সংযুক্ত করুন। নিশ্চিত করুন যে USB পোর্টটি পর্যাপ্ত পাওয়ার সরবরাহ করছে (সাধারণত ৫ ভি)। ডিবাগিংয়ের জন্য সিরিয়াল মনিটর ব্যবহার করা হবে, তাই এই অ্যাপ্লিকেশনের জন্য অতিরিক্ত হার্ডওয়্যার সংযোগের প্রয়োজন নেই।

ভবিষ্যতের প্রকল্পগুলিতে বাহ্যিক উপাদানগুলির সাথে ESP32 ব্যবহার করার সময়, গ্রাউন্ড পিনগুলিকে একটি সাধারণ গ্রাউন্ডে সংযুক্ত করতে মনে রাখবেন। এটি নিশ্চিত করে যে ESP32 এবং যেকোনো সংযুক্ত সেন্সর বা মডিউল একই রেফারেন্স পয়েন্ট ভাগ করে। অতিরিক্তভাবে, যদি আপনি একটি ব্যাটারি ব্যবহার করেন, তাহলে ধনাত্মক টার্মিনালটি ৩.৩ ভি পিনে এবং ঋণাত্মক টার্মিনালটি ESP32-এর একটি গ্রাউন্ড পিনে সংযুক্ত করুন।

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

প্রদত্ত কোডটি ব্লুটুথ সার্ভার শুরু করে, প্রয়োজনীয় সার্ভিস এবং ক্যারেক্টারিস্টিক সেট আপ করে এবং আগত বার্তাগুলি পরিচালনা করে। মূল শনাক্তকারীগুলির মধ্যে রয়েছে bleName, যা ব্লুটুথ ডিভাইসের নাম সংজ্ঞায়িত করে, এবং receivedText, যা মোবাইল অ্যাপ থেকে আগত বার্তা সংরক্ষণ করে।

const char *bleName = "ESP32_Bluetooth";
String receivedText = "";

setup() ফাংশনটি সিরিয়াল যোগাযোগ এবং BLE সেটআপ শুরু করে। এটি LightBlue অ্যাপের সাথে সংযোগ স্থাপনের জন্য গুরুত্বপূর্ণ।

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

loop() ফাংশনের মধ্যে, কোডটি আগত বার্তাগুলির জন্য পরীক্ষা করে। যদি একটি নতুন বার্তা গ্রহণ করা হয়, এটি সিরিয়াল মনিটরে প্রিন্ট হয় এবং সংযুক্ত BLE ডিভাইসে একটি নোটিফিকেশন পাঠানো হয়।

if (receivedText.length() > 0 && millis() - lastMessageTime > 1000) {
    Serial.print("প্রাপ্ত বার্তা: ");
    Serial.println(receivedText);
    pCharacteristic->setValue(receivedText.c_str());
    pCharacteristic->notify();
    receivedText = "";
}

সম্পূর্ণ বোঝার জন্য, নিবন্ধের নীচে লোড হওয়া সম্পূর্ণ কোডটি পড়ুন। এটি আপনাকে প্রকল্পটি সফলভাবে বাস্তবায়নের জন্য প্রয়োজনীয় সমস্ত বিবরণ সরবরাহ করবে।

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

সফল বাস্তবায়নের পরে, আপনি LightBlue অ্যাপ থেকে ESP32-এ বার্তা পাঠাতে সক্ষম হবেন। আপনি যখন "হ্যালো" এর মতো একটি বার্তা টাইপ করবেন, এটি সিরিয়াল মনিটরে প্রদর্শিত হবে। অতিরিক্তভাবে, আপনি অ্যাপে বার্তা ফেরত পাঠাতে পারেন, যা দ্বিমুখী যোগাযোগ নিশ্চিত করে। যদি আপনি বার্তা না আসার মতো সমস্যার সম্মুখীন হন, তাহলে নিশ্চিত করুন যে ESP32 অ্যাপের সাথে সঠিকভাবে পেয়ার করা হয়েছে এবং UUID গুলি মিলছে।

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

  • 00:00 শুরু
  • 2:10 প্রকল্পের পরিচিতি
  • 2:45 ডকুমেন্টেশন পৃষ্ঠা
  • 4:04 আরডুইনো কোড
  • 6:31 ব্লুটুথ অ্যাপ ইনস্টল করা
  • 7:12 ESP32 বোর্ড এবং COM পোর্ট নির্বাচন
  • 8:54 প্রকল্পের প্রদর্শন

ছবি

bluetooth_lightblue
bluetooth_lightblue
838-ESP32 Tutorial 37/55- Arduino code for Bluetooth app test
ভাষা: C++
#include "BLEDevice.h"
#include "BLEServer.h"
#include "BLEUtils.h"
#include "BLE2902.h"

// 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           "your_service_uuid_here"
#define CHARACTERISTIC_UUID_RX "your_rx_characteristic_uuid_here"
#define CHARACTERISTIC_UUID_TX "your_tx_characteristic_uuid_here"

// Define the Bluetooth characteristic
BLECharacteristic *pCharacteristic;

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

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) {
    // When data is received, get the data and save it to receivedText, and record the time
    std::string value = std::string(pCharacteristic->getValue().c_str());
    receivedText = String(value.c_str());
    lastMessageTime = millis();
    Serial.print("Received: ");
    Serial.println(receivedText);
  }
};

// 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
}

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

ফাইলসমূহ📁

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