آموزش ESP32آموزش اینترنت اشیا

استفاده از بلوتوث کلاسیک برد ESP32 (آموزش جامع)

بیشتر افراد خانواده‌ی میکروکنترلرهای ESP را با قابلیت WiFi می‌شناسند، که منطقی است؛ زیرا این سری به یکی از محبوب‌ترین گزینه‌ها برای اتصال سریع و آسان پروژه‌ها به اینترنت تبدیل شده‌اند. با این حال، در حالی که WiFi معمولاً ویژگی اصلی این تراشه‌ها محسوب می‌شود، باید بدانید که ESP32 علاوه بر آن، به Bluetooth نیز مجهز است — قابلیتی که کمتر از WiFi مورد استفاده قرار می‌گیرد.

اگر علاقه‌مند به استفاده از بلوتوث در ESP32 هستید، این آموزش می‌تواند نقطه شروع بسیار خوبی برای شما باشد.

آشنایی با بلوتوث در ESP32

تراشه‌ی ESP32 از بلوتوث دوحالته (Dual-Mode) پشتیبانی می‌کند، یعنی هم Bluetooth Classic و هم Bluetooth Low Energy (BLE) را پوشش می‌دهد. هر دو پروتکل از نظر ساختار شباهت‌هایی دارند و هر دو در باند 2.4 گیگاهرتز ISM (صنعتی، علمی و پزشکی) کار می‌کنند، اما در جزئیات و عملکرد تفاوت‌های اساسی دارند.

بلوتوث کلاسیک

نسخه اصلی فناوری بلوتوث که در گوشی‌های هوشمند برای اتصال به هدفون‌های بی‌سیم استفاده می‌شود، Bluetooth Classic نام دارد. اگر تاکنون از ماژول‌های HC-05 یا HC-06 برای ارتباط سریال با آردوینو استفاده کرده باشید، در واقع از همین نوع بلوتوث بهره برده‌اید.

Bluetooth Classic برای انتقال مداوم داده‌های دوطرفه با نرخ بالا (تا 3 مگابیت بر ثانیه) طراحی شده است. این فناوری برای فواصل کوتاه بسیار کارآمد بوده و از 79 کانال در باند 2.4 گیگاهرتز استفاده می‌کند.

این نوع بلوتوث بیشتر در پروژه‌هایی کاربرد دارد که نیاز به ارسال مداوم داده دارند، مانند استریم صدا یا انتقال فایل.

در این آموزش یاد می‌گیرید چگونه از Bluetooth Classic در تراشه‌ی ESP32 استفاده کنید.

بلوتوث کم مصرف (BLE)

Bluetooth LE که در ابتدا با نام Bluetooth Smart شناخته می‌شد، برای مصرف انرژی بسیار پایین طراحی شده است، در حالی که محدوده ارتباطی مشابه Bluetooth Classic دارد. اما BLE صرفاً نسخه کم‌مصرف بلوتوث کلاسیک نیست؛ بلکه پروتکل و ساختار متفاوتی دارد. این فناوری نیز در همان باند 2.4 گیگاهرتز کار می‌کند، اما از 40 کانال با نرخ داده تا 1 مگابیت بر ثانیه بهره می‌برد.

BLE برای پروژه‌های اینترنت اشیا (IoT) که مصرف انرژی اهمیت بالایی دارد، بسیار مناسب است. برای مثال، در پروژه‌ای که دستگاه باید به‌صورت دوره‌ای بیدار شود، داده‌های حسگر را جمع‌آوری کند، از طریق بلوتوث ارسال کند و سپس به حالت خواب بازگردد.

از آنجا که کار با ESP32 BLE کمی پیچیده‌تر از Bluetooth Classic است، این موضوع در یک آموزش جداگانه توضیح داده شده است.

Bluetooth Classic در برابر BLE

اگرچه هدف اصلی BLE کاهش مصرف انرژی است، اما تفاوت‌های مهم دیگری نیز میان این دو وجود دارد:

  • مصرف انرژی: Bluetooth Classic معمولاً انرژی بیشتری (حدود 1 وات) مصرف می‌کند، در حالی که BLE برای مصرف پایین طراحی شده و بین 0.01 تا 0.5 وات مصرف دارد. این ویژگی BLE را برای دستگاه‌های باتری‌خور ایده‌آل می‌کند.
  • نرخ انتقال داده: Bluetooth Classic نرخ انتقال داده‌ی بالاتری دارد و برای پروژه‌هایی که نیاز به تبادل داده‌ی مداوم دارند مناسب‌تر است، در حالی که BLE برای ارسال داده‌های کوتاه و مقطعی بهینه‌سازی شده است.
  • برد ارتباطی: هر دو می‌توانند تا 100 متر را پوشش دهند، اما برد واقعی بسته به محیط و طراحی مدار متفاوت است.
  • تأخیر (Latency): در Bluetooth Classic تأخیر تا 100 میلی‌ثانیه است، در حالی که در BLE این مقدار به حدود 6 میلی‌ثانیه می‌رسد (هر چه کمتر، بهتر).
  • سازگاری: Bluetooth Classic در دستگاه‌های قدیمی‌تر رایج‌تر است، در حالی که BLE بیشتر در گوشی‌ها و گجت‌های مدرن استفاده می‌شود.

جدول مقایسه Bluetooth Classic و BLE

ویژگی Bluetooth Classic Bluetooth Low Energy (BLE)
نرخ داده 1 Mbps برای BR / تا 3 Mbps برای EDR 500 kbps تا 1 Mbps
باند فرکانسی 2.4 GHz ISM 2.4 GHz ISM
تعداد کانال‌ها 79 کانال با فاصله 1 MHz 40 کانال با فاصله 2 MHz
محدوده ارتباط 8 تا 100 متر 8 تا 100 متر
مصرف انرژی بالا (تا 1 W) پایین (0.01 تا 0.5 W)
نیاز به جفت‌سازی (Pairing) بله الزامی نیست
توپولوژی پشتیبانی‌شده نقطه به نقطه (1:1) نقطه به نقطه، Broadcast (1:چند)، Mesh (چند:چند)
روش مدولاسیون GFSK, π/4 DQPSK, 8 DPSK GFSK
تأخیر (Latency) حدود 35 ms بین 2 تا 16 ms (میانگین 9 ms)

برنامه‌ نویسی بلوتوث سریال در ESP32

حال بیایید ESP32 را طوری برنامه‌ریزی کنیم که بتواند با گوشی هوشمند ارتباط برقرار کرده و داده‌ها را تبادل کند.

در این آموزش از Arduino IDE برای برنامه‌نویسی استفاده می‌کنیم. قبل از ادامه، اطمینان حاصل کنید که افزونه ESP32 را در Arduino IDE نصب کرده‌اید.

پس از آماده‌سازی محیط، وارد مسیر زیر شوید:

File > Examples > BluetoothSerial > SerialtoSerialBT

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

کد زیر به‌صورت خودکار بارگذاری می‌شود:

#include "BluetoothSerial.h"

#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif

#if !defined(CONFIG_BT_SPP_ENABLED)
#error Serial Bluetooth not available or not enabled. It is only available for the ESP32 chip.
#endif

BluetoothSerial SerialBT;

void setup() {
  Serial.begin(115200);
  SerialBT.begin("ESP32test"); // Bluetooth device name
  Serial.println("The device started, now you can pair it with bluetooth!");
}

void loop() {
  if (Serial.available()) {
    SerialBT.write(Serial.read());
  }
  if (SerialBT.available()) {
    Serial.write(SerialBT.read());
  }
  delay(20);
}

پس از آپلود کد، Serial Monitor را با نرخ 115200 baud باز کنید.

در خروجی باید پیامی مشابه زیر مشاهده کنید:

برنامه‌ نویسی بلوتوث سریال در ESP32

“The device started, now you can pair it with bluetooth!”

در این مرحله، دستگاه ESP32 آماده‌ی اتصال و تبادل داده با بلوتوث گوشی شما است.

توضیح کد برنامه ESP32 بلوتوث

در این بخش، عملکرد هر قسمت از کد را به‌صورت کامل بررسی می‌کنیم تا بهتر درک کنید که ارتباط بلوتوثی چگونه در ESP32 برقرار می‌شود.

این برنامه یک ارتباط دوطرفه بلوتوث سریال بین دو دستگاه ایجاد می‌کند — به‌طوری که می‌توانید داده را هم از طریق Serial Monitor آردوینو و هم از طریق بلوتوث گوشی ارسال و دریافت کنید.

1. افزودن کتابخانه BluetoothSerial

در ابتدای کد، کتابخانه‌ی BluetoothSerial.h اضافه می‌شود که تمام توابع و قابلیت‌های مورد نیاز برای ارتباط سریال از طریق بلوتوث را در اختیار قرار می‌دهد.

#include "BluetoothSerial.h"

2. بررسی فعال بودن بلوتوث

پیش از استفاده از بلوتوث، باید اطمینان حاصل شود که این قابلیت در تنظیمات ESP32 فعال است.
این قسمت از کد، در زمان کامپایل بررسی می‌کند که تنظیمات مورد نیاز برای بلوتوث فعال شده باشند؛ در غیر این صورت خطای کامپایل نمایش داده می‌شود.

#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif

#if !defined(CONFIG_BT_SPP_ENABLED)
#error Serial Bluetooth not available or not enabled. It is only available for the ESP32 chip.
#endif

3. ایجاد شیء برای بلوتوث سریال

در این مرحله، شیئی از کلاس BluetoothSerial با نام SerialBT ساخته می‌شود.
این شیء مسئول راه‌اندازی پشته بلوتوث روی ESP32 و مدیریت ارسال و دریافت داده‌ها است.
این کلاس در واقع از API بلوتوث کلاسیک ESP-IDF استفاده می‌کند.

BluetoothSerial SerialBT;

4. تنظیم ارتباط سریال

در تابع setup()، ابتدا ارتباط سریال اصلی برای مانیتورینگ با نرخ 115200 baud فعال می‌شود تا بتوانیم داده‌ها را در Serial Monitor مشاهده کنیم.

Serial.begin(115200);

5. راه‌اندازی بلوتوث و تعیین نام دستگاه

سپس متد begin() از شیء SerialBT فراخوانی می‌شود تا پشته‌ی بلوتوث در ESP32 مقداردهی اولیه شود.
این متد یک رشته (String) به عنوان ورودی دریافت می‌کند که نام دستگاه بلوتوث را مشخص می‌کند. این نام هنگام جستجوی دستگاه‌ها توسط گوشی یا لپ‌تاپ نمایش داده می‌شود.

SerialBT.begin("ESP32test"); // Bluetooth device name
نکته: این متد مقدار Boolean بازمی‌گرداند که نشان می‌دهد مقداردهی اولیه موفق بوده است یا نه. در این مثال، بررسی نشده است، اما برای کدنویسی حرفه‌ای‌تر بهتر است مقدار بازگشتی را بررسی کنید تا در صورت خطا، سیستم واکنش مناسبی نشان دهد.

6. بخش loop — تبادل دوطرفه داده‌ها

در تابع loop()، عملیات انتقال داده بین بلوتوث و پورت سریال انجام می‌شود.

  • در بخش اول، بررسی می‌شود که آیا داده‌ای از سمت کامپیوتر (Serial Monitor) ارسال شده است یا نه.
    اگر داده‌ای وجود داشته باشد، با دستور Serial.read() خوانده شده و سپس از طریق بلوتوث با SerialBT.write() ارسال می‌شود.
    به این ترتیب، هر داده‌ای که از طریق پورت USB به ESP32 ارسال کنید، به دستگاه بلوتوث متصل نیز فرستاده می‌شود.
if (Serial.available()) {
  SerialBT.write(Serial.read());
}
  • در بخش دوم، برعکس عمل انجام می‌شود: اگر داده‌ای از سمت دستگاه بلوتوث دریافت شود، با دستور SerialBT.read() خوانده شده و سپس در Serial Monitor نمایش داده می‌شود.
if (SerialBT.available()) {
  Serial.write(SerialBT.read());
}

به این ترتیب، ارتباطی دوطرفه و بی‌درنگ بین ESP32 و دستگاه بلوتوث برقرار می‌شود. دقیقاً مشابه یک پل سریال بی‌سیم (Wireless Serial Bridge).

اتصال ESP32 به گوشی اندروید

در این بخش، نحوه برقراری ارتباط بی‌سیم بین ESP32 و یک گوشی اندرویدی را بررسی می‌کنیم. ممکن است مراحل بسته به مدل گوشی کمی متفاوت باشد، اما روند کلی تقریباً در همه‌ی دستگاه‌ها مشابه است.

  1. ابتدا مطمئن شوید که برد ESP32 روشن و آماده اتصال است.
  2. در گوشی اندرویدی خود، از بالای صفحه به پایین بکشید تا منوی سریع باز شود و گزینه Bluetooth را فعال کنید.اتصال ESP32 به گوشی اندروید
  3. آیکون بلوتوث را چند ثانیه نگه دارید و سپس گزینه Pair new device (جفت‌سازی دستگاه جدید) را انتخاب کنید. چند ثانیه صبر کنید تا دستگاه‌های اطراف شناسایی شوند.اتصال ESP32 به گوشی اندروید
  4. از بین دستگاه‌های پیدا شده، نام ESP32test را انتخاب کنید (این همان نامی است که در کد مشخص کرده بودیم). در صورت نیاز، دستورالعمل‌های روی صفحه را دنبال کنید تا جفت‌سازی کامل شود.اتصال ESP32 به گوشی اندروید
  5. برای ادامه مراحل، لازم است یک اپلیکیشن ترمینال بلوتوث روی گوشی نصب داشته باشید. پیشنهاد می‌کنیم از برنامه‌ی Serial Bluetooth Terminal استفاده کنید که در Google Play Store در دسترس است.آموزش راه اندازی بلوتوث برد ESP32
  6. پس از نصب، برنامه Serial Bluetooth Terminal را باز کنید. روی آیکون منوی بالا سمت چپ بزنید و گزینه Devices (دستگاه‌ها) را انتخاب کنید.آموزش راه اندازی بلوتوث برد ESP32
  7. در این قسمت، فهرستی از دستگاه‌هایی که قبلاً جفت شده‌اند نمایش داده می‌شود. نام ESP32test را از این فهرست انتخاب کنید.آموزش راه اندازی بلوتوث برد ESP32
  8. در صورت موفقیت، پیغام Connected روی صفحه ظاهر می‌شود. حالا گوشی شما با ESP32 جفت شده و آماده تبادل داده است.اتصال با بلوتوث برد ESP32
  9. در بخش ورودی پایین اپلیکیشن، عبارتی مانند Hi! تایپ کنید و ارسال کنید.اتصال با بلوتوث برد ESP32
  10. بلافاصله باید همان پیام را در Serial Monitor آردوینو مشاهده کنید.نمایش پیام های بلوتوث در سریال مانیتور
  11. همچنین می‌توانید داده را از طریق Serial Monitor به گوشی ارسال کنید. در قسمت بالای مانیتور، متن دلخواه خود را تایپ کرده و دکمه Send را بزنید.نمایش پیام های بلوتوث در سریال مانیتور
  12. حالا پیام شما در اپلیکیشن Serial Bluetooth Terminal نمایش داده خواهد شد.نمایش پیام های بلوتوث در سریال مانیتور

به این ترتیب، توانستید یک ارتباط دوطرفه بلوتوثی بین ESP32 و گوشی اندروید برقرار کنید — گامی اساسی برای کنترل دستگاه‌ها، تبادل داده یا توسعه پروژه‌های هوشمند مبتنی بر بلوتوث.

کد پروژه ESP32 کنترل رله با بلوتوث

در این بخش، یک پروژه‌ی ساده و کاربردی ایجاد می‌کنیم که به شما امکان می‌دهد رله‌ها را به‌صورت بی‌سیم از طریق بلوتوث کنترل کنید. این پروژه می‌تواند در زمینه‌های مختلفی مانند هوشمندسازی خانه، کنترل روشنایی، سیستم‌های امنیتی و پروژه‌های مشابه مورد استفاده قرار گیرد.

رله را مطابق تصویر آموزشی به پایه‌های ESP32 متصل کنید. در این مثال از ماژول رله دوکاناله استفاده شده است، اما اگر تعداد کانال‌ها بیشتر یا کمتر باشد، روش سیم‌کشی مشابه خواهد بود.

کد پروژه ESP32 کنترل رله با بلوتوث

اتصال پایه‌ها به‌صورت زیر است (برای یک رله):

  • VCC → به پایه 5V یا 3.3V برد ESP32
  • GND → به زمین (GND)
  • IN1 → به پایه دیجیتال شماره 5 در ESP32

کد ESP32 برای کنترل رله از طریق بلوتوث

پس از انجام سیم‌کشی، کد پروژه را در Arduino IDE کپی کرده و روی برد آپلود کنید. کد کامل این پروژه در فایل دانلودی انتهای صفحه قرار داده شده است.

پس از آپلود کد، Serial Monitor را با نرخ 115200 baud باز کرده و کلید EN روی برد را فشار دهید. باید پیغامی مشابه زیر مشاهده کنید:

کد ESP32 برای کنترل رله از طریق بلوتوث

“The device started, now you can pair it with bluetooth!”

سپس اپلیکیشن Serial Bluetooth Terminal را در گوشی خود باز کرده و به دستگاه ESP32test متصل شوید.

اکنون اگر در قسمت ورودی برنامه عبارت on را تایپ و ارسال کنید، رله فعال خواهد شد. با تایپ دستور off نیز رله غیرفعال می‌شود.

کد ESP32 برای کنترل رله از طریق بلوتوث

همچنین، تمامی پیام‌های ارسال و دریافت‌شده در Serial Monitor آردوینو نمایش داده می‌شوند تا بتوانید وضعیت را به‌صورت لحظه‌ای مشاهده کنید.

کد ESP32 برای کنترل رله از طریق بلوتوث

استفاده از ماکروها برای کنترل سریع‌تر

در اپلیکیشن Serial Bluetooth Terminal، بخشی به نام Macros وجود دارد که به شما اجازه می‌دهد پیام‌های دلخواه را برای ارسال سریع ذخیره کنید.

استفاده از ماکروها برای کنترل سریع‌تر

به‌عنوان مثال:

  • دکمه M1 → فرمان on
  • دکمه M2 → فرمان off

به این ترتیب، تنها با لمس یک دکمه می‌توانید رله را روشن یا خاموش کنید، بدون نیاز به تایپ مجدد دستورها. این قابلیت کنترل بلوتوثی را بسیار راحت‌تر و حرفه‌ای‌تر می‌کند.

استفاده از ماکروها برای کنترل سریع‌تر

موارد موجود در فایل : سورس کامل

5 (2 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *