ESP32 ٹیوٹوریل 37/55 - ESP32 BLE کے ساتھ بلوٹوتھ ایپ استعمال کرنا | سن فاؤنڈر کا ESP32 IoT لرننگ کٹ
اس ٹیوٹوریل میں، ہم دریافت کریں گے کہ ESP32 کو بطور بلوٹوتھ سرور کیسے استعمال کیا جائے تاکہ موبائل ایپ سے پیغامات بھیجے اور وصول کیے جا سکیں۔ یہ آپ کے ESP32 بورڈ اور آپ کے موبائل ڈیوائس کے درمیان انٹرایکٹو کمیونیکیشن کی اجازت دیتا ہے، جس سے یہ آپ کے IoT پروجیکٹس میں ایک ورسٹائل اضافہ بن جاتا ہے۔ اس سبق کے اختتام تک، آپ اپنے موبائل ڈیوائس سے ESP32 کو ٹیکسٹ بھیجنے اور اسے سیریل مانیٹر پر دیکھنے کے قابل ہو جائیں گے۔
ہم ESP32 کے ساتھ کمیونیکیشن کے لیے LightBlue Explorer ایپ استعمال کریں گے، جو iOS اور Android دونوں پر دستیاب ہے۔ یہ ٹیوٹوریل بلوٹوتھ لو انرجی (BLE) کمیونیکیشن کو سمجھنے کے لیے بنیادی ہے اور مزید جدید پروجیکٹس کے لیے مرحلہ طے کرتا ہے۔ بصری گائیڈ کے لیے، براہ کرم ویڈیو (ویڈیو میں 02:00 پر) دیکھیں۔
ہارڈویئر کی وضاحت
اس پروجیکٹ کا بنیادی جزو ESP32 مائیکروکنٹرولر ہے، جو وائی-فائی اور بلوٹوتھ دونوں صلاحیتوں کو یکجا کرتا ہے۔ یہ ESP32 کو بطور سرور کام کرنے کی اجازت دیتا ہے، ڈیٹا وائرلیس طریقے سے وصول اور بھیجتا ہے۔ ESP32 کی بلٹ ان بلوٹوتھ فعالیت BLE کو سپورٹ کرتی ہے، جو کم پاور ایپلیکیشنز کے لیے موثر بناتی ہے۔
ESP32 کے علاوہ، ہم LightBlue ایپ انسٹال شدہ موبائل ڈیوائس استعمال کریں گے۔ یہ ایپ صارفین کو ESP32 سے منسلک ہونے اور بلوٹوتھ کے ذریعے ڈیٹا بھیجنے کی اجازت دیتی ہے۔ ان اجزاء کا انضمام ESP32 اور موبائل ڈیوائسز کے درمیان ہموار کمیونیکیشن کو قابل بناتا ہے، جس سے صارف کے تعامل میں اضافہ ہوتا ہے۔
ڈیٹاشیٹ کی تفصیلات
| مینوفیکچرر | Espressif Systems |
|---|---|
| پارٹ نمبر | ESP32-WROOM-32 |
| لاجک/آئی او وولٹیج | 3.3 V |
| سپلائی وولٹیج | 3.0 – 3.6 V |
| آؤٹ پٹ کرنٹ (فی چینل) | 40 mA |
| پیک کرنٹ (فی چینل) | 160 mA |
| PWM فریکوئنسی رہنمائی | 1 kHz |
| ان پٹ لاجک تھریشولڈز | 0.2 VCC (کم)، 0.8 VCC (زیادہ) |
| وولٹیج ڈراپ / RDS(on) / سیچوریشن | 0.1 V |
| تھرمل حدود | 125 °C |
| پیکیج | QFN48 |
| نوٹس / ویریئنٹس | ESP32-WROOM-32، ESP32-WROVER |
- براؤن آؤٹ سے بچنے کے لیے مستحکم پاور سپلائی (3.3 V) یقینی بنائیں۔
- پاور پنوں کے قریب ڈیکپلنگ کے لیے کیپسیٹرز استعمال کریں۔
- اگر زیادہ کرنٹ استعمال کر رہے ہیں تو مناسب گرمی کی نکاسی برقرار رکھیں۔
- GPIO پن وولٹیج کی سطحوں سے محتاط رہیں؛ وہ 3.3 V برداشت کر سکتے ہیں۔
- GPIO کنفیگریشنز کے لیے ضرورت کے مطابق پل-اپ یا پل-ڈاؤن ریزسٹرز استعمال کریں۔
- BLE کنکشنز کی نگرانی کریں؛ یقینی بنائیں کہ ایپ صحیح طریقے سے پیئرڈ ہے۔
- سروسز اور کریکٹرسٹکس کے لیے UUIDs کی منفردیت کی تصدیق کریں۔
- ڈیبگنگ پیغامات کے لیے سیریل مانیٹر کو باقاعدگی سے چیک کریں۔
- پیچیدہ سگنل ٹربل شوٹنگ کے لیے لاجک اینالائزر استعمال کرنے پر غور کریں۔
وائرنگ ہدایات
اس پروجیکٹ کے لیے وائرنگ سیدھی ہے کیونکہ ESP32 بنیادی طور پر پاور اور پروگرامنگ کے لیے USB کے ذریعے منسلک ہوتا ہے۔ ESP32 کو مائیکرو USB کیبل کا استعمال کرتے ہوئے اپنے کمپیوٹر سے منسلک کریں۔ یقینی بنائیں کہ USB پورٹ کافی پاور فراہم کر رہا ہے (عام طور پر 5 V)۔ سیریل مانیٹر ڈیبگنگ کے لیے استعمال ہوگا، اس لیے اس ایپلیکیشن کے لیے اضافی ہارڈویئر کنکشنز کی ضرورت نہیں ہے۔
مستقبل کے پروجیکٹس میں بیرونی اجزاء کے ساتھ ESP32 استعمال کرتے وقت، گراؤنڈ پنوں کو مشترکہ گراؤنڈ سے منسلک کرنا یاد رکھیں۔ یہ یقینی بناتا ہے کہ ESP32 اور کوئی بھی منسلک سینسر یا ماجیول ایک ہی ریفرنس پوائنٹ شیئر کریں۔ مزید برآں، اگر آپ بیٹری استعمال کر رہے ہیں، تو مثبت ٹرمینل کو 3.3 V پن سے اور منفی ٹرمینل کو 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 ایپ کے ساتھ صحیح طریقے سے پیئرڈ ہے اور UUIDs مماثل ہیں۔
ویڈیو ٹائم اسٹیمپس
- 00:00 آغاز
- 2:10 پروجیکٹ کا تعارف
- 2:45 دستاویزات کا صفحہ
- 4:04 آرڈوینو کوڈ
- 6:31 بلوٹوتھ ایپ انسٹال کرنا
- 7:12 ESP32 بورڈ اور COM پورٹ منتخب کرنا
- 8:54 پروجیکٹ کا مظاہرہ
#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
}
Common Course Links
Common Course Files
وسائل اور حوالہ جات
-
دستاویزاتESP32 Tutorial 37/55 - SunFounder doc page for Bluetooth appdocs.sunfounder.com
فائلیں📁
کوئی فائلیں دستیاب نہیں ہیں۔