استفاده از بلوتوث کلاسیک برد 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 باز کنید.
در خروجی باید پیامی مشابه زیر مشاهده کنید:
“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
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 و یک گوشی اندرویدی را بررسی میکنیم. ممکن است مراحل بسته به مدل گوشی کمی متفاوت باشد، اما روند کلی تقریباً در همهی دستگاهها مشابه است.
- ابتدا مطمئن شوید که برد ESP32 روشن و آماده اتصال است.
- در گوشی اندرویدی خود، از بالای صفحه به پایین بکشید تا منوی سریع باز شود و گزینه Bluetooth را فعال کنید.
- آیکون بلوتوث را چند ثانیه نگه دارید و سپس گزینه Pair new device (جفتسازی دستگاه جدید) را انتخاب کنید. چند ثانیه صبر کنید تا دستگاههای اطراف شناسایی شوند.
- از بین دستگاههای پیدا شده، نام ESP32test را انتخاب کنید (این همان نامی است که در کد مشخص کرده بودیم). در صورت نیاز، دستورالعملهای روی صفحه را دنبال کنید تا جفتسازی کامل شود.
- برای ادامه مراحل، لازم است یک اپلیکیشن ترمینال بلوتوث روی گوشی نصب داشته باشید. پیشنهاد میکنیم از برنامهی Serial Bluetooth Terminal استفاده کنید که در Google Play Store در دسترس است.
- پس از نصب، برنامه Serial Bluetooth Terminal را باز کنید. روی آیکون منوی بالا سمت چپ بزنید و گزینه Devices (دستگاهها) را انتخاب کنید.
- در این قسمت، فهرستی از دستگاههایی که قبلاً جفت شدهاند نمایش داده میشود. نام ESP32test را از این فهرست انتخاب کنید.
- در صورت موفقیت، پیغام Connected روی صفحه ظاهر میشود. حالا گوشی شما با ESP32 جفت شده و آماده تبادل داده است.
- در بخش ورودی پایین اپلیکیشن، عبارتی مانند Hi! تایپ کنید و ارسال کنید.
- بلافاصله باید همان پیام را در Serial Monitor آردوینو مشاهده کنید.
- همچنین میتوانید داده را از طریق Serial Monitor به گوشی ارسال کنید. در قسمت بالای مانیتور، متن دلخواه خود را تایپ کرده و دکمه Send را بزنید.
- حالا پیام شما در اپلیکیشن Serial Bluetooth Terminal نمایش داده خواهد شد.
به این ترتیب، توانستید یک ارتباط دوطرفه بلوتوثی بین ESP32 و گوشی اندروید برقرار کنید — گامی اساسی برای کنترل دستگاهها، تبادل داده یا توسعه پروژههای هوشمند مبتنی بر بلوتوث.
کد پروژه ESP32 کنترل رله با بلوتوث
در این بخش، یک پروژهی ساده و کاربردی ایجاد میکنیم که به شما امکان میدهد رلهها را بهصورت بیسیم از طریق بلوتوث کنترل کنید. این پروژه میتواند در زمینههای مختلفی مانند هوشمندسازی خانه، کنترل روشنایی، سیستمهای امنیتی و پروژههای مشابه مورد استفاده قرار گیرد.
رله را مطابق تصویر آموزشی به پایههای ESP32 متصل کنید. در این مثال از ماژول رله دوکاناله استفاده شده است، اما اگر تعداد کانالها بیشتر یا کمتر باشد، روش سیمکشی مشابه خواهد بود.
اتصال پایهها بهصورت زیر است (برای یک رله):
- VCC → به پایه 5V یا 3.3V برد ESP32
- GND → به زمین (GND)
- IN1 → به پایه دیجیتال شماره 5 در ESP32
کد ESP32 برای کنترل رله از طریق بلوتوث
پس از انجام سیمکشی، کد پروژه را در Arduino IDE کپی کرده و روی برد آپلود کنید. کد کامل این پروژه در فایل دانلودی انتهای صفحه قرار داده شده است.
پس از آپلود کد، Serial Monitor را با نرخ 115200 baud باز کرده و کلید EN روی برد را فشار دهید. باید پیغامی مشابه زیر مشاهده کنید:
“The device started, now you can pair it with bluetooth!”
سپس اپلیکیشن Serial Bluetooth Terminal را در گوشی خود باز کرده و به دستگاه ESP32test متصل شوید.
اکنون اگر در قسمت ورودی برنامه عبارت on را تایپ و ارسال کنید، رله فعال خواهد شد. با تایپ دستور off نیز رله غیرفعال میشود.
همچنین، تمامی پیامهای ارسال و دریافتشده در Serial Monitor آردوینو نمایش داده میشوند تا بتوانید وضعیت را بهصورت لحظهای مشاهده کنید.
استفاده از ماکروها برای کنترل سریعتر
در اپلیکیشن Serial Bluetooth Terminal، بخشی به نام Macros وجود دارد که به شما اجازه میدهد پیامهای دلخواه را برای ارسال سریع ذخیره کنید.
بهعنوان مثال:
- دکمه M1 → فرمان
on
- دکمه M2 → فرمان
off
به این ترتیب، تنها با لمس یک دکمه میتوانید رله را روشن یا خاموش کنید، بدون نیاز به تایپ مجدد دستورها. این قابلیت کنترل بلوتوثی را بسیار راحتتر و حرفهایتر میکند.
موارد موجود در فایل : سورس کامل
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود