كود البحث

دليل ESP32 37/55 - استخدام تطبيق البلوتوث مع ESP32 BLE | مجموعة تعلم إنترنت الأشياء ESP32 من SunFounder

دليل ESP32 37/55 - استخدام تطبيق البلوتوث مع ESP32 BLE | مجموعة تعلم إنترنت الأشياء ESP32 من SunFounder

في هذا الدرس، سنستكشف كيفية استخدام ESP32 كخادم بلوتوث لإرسال واستقبال الرسائل من تطبيق الهاتف المحمول. يتيح ذلك التواصل التفاعلي بين لوحة ESP32 وجهازك المحمول، مما يجعله إضافة متعددة الاستخدامات لمشاريع إنترنت الأشياء الخاصة بك. بنهاية هذا الدرس، ستكون قادرًا على إرسال نص من جهازك المحمول إلى ESP32 ورؤيته معروضًا على شاشة السيريال.

بلوتوث أزرق فاتح

سوف نستخدم تطبيق LightBlue Explorer، المتاح على كل من iOS وAndroid، للتواصل مع ESP32. يهدف هذا الشرح إلى فهم التواصل عبر بلوتوث منخفض الطاقة (BLE) ويضع الأساس لمشاريع أكثر تقدمًا. للحصول على دليل بصري، يرجى الرجوع إلى الفيديو في (في الفيديو عند 02:00).

شرح الأجهزة

المكون الرئيسي في هذا المشروع هو المتحكم الدقيق ESP32، الذي يدمج كل من قدرات الواي فاي والبلوتوث. وهذا يسمح لـ ESP32 بالعمل كخادم، حيث يستقبل ويرسل البيانات لاسلكيًا. تدعم الوظيفة المدمجة للبلوتوث في ESP32 تقنية BLE، مما يجعلها فعالة للتطبيقات منخفضة الطاقة.

بالإضافة إلى ESP32، سنستخدم جهازًا محمولًا مثبتًا عليه تطبيق LightBlue. يتيح هذا التطبيق للمستخدمين الاتصال بـ ESP32 وإرسال البيانات عبر البلوتوث. يتيح دمج هذه المكونات التواصل السلس بين ESP32 والأجهزة المحمولة، مما يعزز تفاعل المستخدم.

تفاصيل ورقة البيانات

شركة مصنعة إسبريسيف سيستمز
رقم الجزء ESP32-WROOM-32
جهد المنطق/المدخلات والمخرجات ٣.٣ فولت
جهد الإمداد ٣.٠ - ٣.٦ ف
تيار الإخراج (لكل قناة) 40 مللي أمبير
ذروة التيار (لكل قناة) ١٦٠ مللي أمبير
توجيه تردد PWM 1 كيلوهرتز
عتبات منطق الإدخال 0.2 فولت (منخفض)، 0.8 فولت (مرتفع)
انخفاض الجهد / Rدي إس (أون)/ تشبع 0.1 فولت
حدود حرارية ١٢٥ °م
حزمة QFN48
ملاحظات / متغيرات ESP32-WROOM-32، ESP32-WROVER

  • تأكد من توفير مصدر طاقة مستقر (3.3 فولت) لتجنب الانقطاع المفاجئ للكهرباء.
  • استخدم المكثفات للفصل بالقرب من دبابيس الطاقة.
  • احرص على الحفاظ على تبديد الحرارة بشكل مناسب عند استخدام تيار عالي.
  • كن حذرًا مع مستويات جهد دبابيس GPIO؛ فهي تتحمل 3.3 فولت.
  • استخدم المقاومات السحب لأعلى أو السحب لأسفل حسب الحاجة لتكوينات GPIO.
  • راقب اتصالات BLE؛ تأكد من أن التطبيق متزاوج بشكل صحيح.
  • تحقق من أن UUIDs للخدمات والخصائص فريدة.
  • تحقق بانتظام من شاشة السلسلة للحصول على رسائل تصحيح الأخطاء.
  • فكر في استخدام محلل منطقي لتشخيص الإشارات المعقدة.

تعليمات التوصيل

توصيلات هذا المشروع بسيطة نظرًا لأن ESP32 يتصل بشكل أساسي عبر USB للتموين والبرمجة. قم بتوصيل ESP32 بجهاز الكمبيوتر الخاص بك باستخدام كابل USB مصغر. تأكد من أن منفذ USB يوفر طاقة كافية (عادةً 5 فولت). سيتم استخدام مراقب السلسلة لأغراض تصحيح الأخطاء، لذا لا حاجة إلى توصيلات أجهزة إضافية لهذا التطبيق.

عند استخدام ESP32 مع مكونات خارجية في المشاريع المستقبلية، تذكر توصيل دبابيس الأرض إلى أرضية مشتركة. هذا يضمن أن ESP32 وأي مجسات أو وحدات متصلة تشترك في نفس نقطة المرجع. بالإضافة إلى ذلك، إذا كنت تستخدم بطارية، قم بتوصيل القطب الموجب بدبوس 3.3 فولت والجهد السالب بدبوس أرضي على ESP32.

أمثلة شفرات ودليل عملي

يقوم الكود المقدم بتهيئة خادم البلوتوث، وإعداد الخدمات والخصائص اللازمة، ويعالج الرسائل الواردة. تشمل المعرفات الرئيسيةbleName، الذي يحدد اسم جهاز البلوتوث، وreceivedText، الذي يخزن الرسالة الواردة من تطبيق الهاتف المحمول.

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

الsetup()تقوم الدالة بتهيئة الاتصال التسلسلي وإعداد BLE. وهذا أمر حاسم لإقامة اتصال مع تطبيق LightBlue.

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

داخل الـloop()تتحقق الوظيفة، من الشيفرة، من الرسائل الواردة. إذا تم استلام رسالة جديدة، يتم طباعتها على شاشة السيريال، وترسل إشعار إلى جهاز BLE المتصل.

if (receivedText.length() > 0 && millis() - lastMessageTime > 1000) {
    Serial.print("Received message: ");
    Serial.println(receivedText);
    pCharacteristic->setValue(receivedText.c_str());
    pCharacteristic->notify();
    receivedText = "";
}

للحصول على فهم كامل، يرجى الرجوع إلى الكود الكامل الذي يتم تحميله أسفل المقال. هذا سيوفر لك جميع التفاصيل اللازمة لتنفيذ المشروع بنجاح.

عرض / ماذا تتوقع

عند التنفيذ الناجح، يجب أن تكون قادرًا على إرسال الرسائل من تطبيق LightBlue إلى ESP32. عند كتابة رسالة، مثل "مرحبًا"، ستظهر على شاشة المراقبة التسلسلية. بالإضافة إلى ذلك، يمكنك إرسال رسائل إلى التطبيق، مما يؤكد التواصل ثنائي الاتجاه. إذا واجهت مشكلات مثل عدم ظهور الرسائل، تأكد من أن ESP32 متزاوج بشكل صحيح مع التطبيق وأن UUIDs تتطابق.

توقيتات الفيديو

  • 00:00 ابدأ
  • :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"

 // حدد اسم جهاز البلوتوث
const char *bleName = "ESP32_Bluetooth";

 // حدد النص المستلم ووقت الرسالة الأخيرة
String receivedText = "";
unsigned long lastMessageTime = 0;

 // حدد UUIDs الخدمة والخصائص
#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"

 // حدد خاصية البلوتوث
BLECharacteristic *pCharacteristic;

void setup() {
  Serial.begin(115200); // تهيئة المنفذ التسلسلي
  setupBLE(); // تهيئة البلوتوث BLE
}

void loop() {
 // عندما لا يكون النص المستلم فارغاً ويكون الوقت منذ الرسالة الأخيرة أكثر من ثانية واحدة
 // أرسل إشعارًا واطبع النص المستلم
  if (receivedText.length() > 0 && millis() - lastMessageTime > 1000) {
    Serial.print("Received message: ");
    Serial.println(receivedText);
    pCharacteristic->setValue(receivedText.c_str());
    pCharacteristic->notify();
    receivedText = "";
  }

 // قراءة البيانات من المنفذ التسلسلي وإرسالها إلى خاصية BLE
  if (Serial.available() > 0) {
    String str = Serial.readStringUntil('\n');
    const char *newValue = str.c_str();
    pCharacteristic->setValue(newValue);
    pCharacteristic->notify();
  }
}

 // حدد ردود الاتصال لخادم BLE
class MyServerCallbacks : public BLEServerCallbacks {
 // اطبع رسالة الاتصال عندما يتصل عميل.
  void onConnect(BLEServer *pServer) {
    Serial.println("Connected");
  }
 // اطبع رسالة الانفصال عندما يتم فصل عميل
  void onDisconnect(BLEServer *pServer) {
    Serial.println("Disconnected");
  }
};

 // حدد معاملات الاستدعاء لخصائص BLE
class MyCharacteristicCallbacks : public BLECharacteristicCallbacks {
  void onWrite(BLECharacteristic *pCharacteristic) {
 // عند استلام البيانات، احصل على البيانات واحفظها في receivedText، وسجل الوقت
    std::string value = std::string(pCharacteristic->getValue().c_str());
    receivedText = String(value.c_str());
    lastMessageTime = millis();
    Serial.print("Received: ");
    Serial.println(receivedText);
  }
};

 // تهيئة البلوتوث BLE
void setupBLE() {
  BLEDevice::init(bleName); // تهيئة جهاز BLE
  BLEServer *pServer = BLEDevice::createServer(); // قم بإنشاء خادم BLE
 // اطبع رسالة الخطأ إذا فشل إنشاء خادم BLE
  if (pServer == nullptr) {
    Serial.println("Error creating BLE server");
    return;
  }
  pServer->setCallbacks(new MyServerCallbacks()); // قم بضبط استدعاءات خادم BLE

 // أنشئ خدمة BLE
  BLEService *pService = pServer->createService(SERVICE_UUID);
 // اطبع رسالة الخطأ إذا فشل إنشاء خدمة BLE
  if (pService == nullptr) {
    Serial.println("Error creating BLE service");
    return;
  }
 // إنشاء السمة BLE لإرسال الإشعارات
  pCharacteristic = pService->createCharacteristic(CHARACTERISTIC_UUID_TX, BLECharacteristic::PROPERTY_NOTIFY);
  pCharacteristic->addDescriptor(new BLE2902()); // أضف الوصف
 // قم بإنشاء خاصية BLE لاستقبال البيانات
  BLECharacteristic *pCharacteristicRX = pService->createCharacteristic(CHARACTERISTIC_UUID_RX, BLECharacteristic::PROPERTY_WRITE);
  pCharacteristicRX->setCallbacks(new MyCharacteristicCallbacks()); // قم بضبط ردود الفعل لخصائص BLE
  pService->start(); // ابدأ خدمة BLE
  pServer->getAdvertising()->start(); // ابدأ بالإعلانات
  Serial.println("Waiting for a client connection..."); // انتظر اتصال عميل
}

الموارد والمراجع

ملفات📁

لا توجد ملفات متاحة.