آموزش مبتدیان در مورد بلوتوث ESP32 / یادگیری بلوتوث کلاسیک ESP32
در این آموزش، ما در مورد ویژگی بلوتوث ESP32 یاد خواهیم گرفت و همچنین راه اندازی بلوتوث esp32 را خواهیم آموخت. ESP32 از بلوتوث کلاسیک v4.2 هم پشتیبانی میکند. بیایید بر بلوتوث کلاسیک در این آموزش بلوتوث ESP32 تمرکز کنیم. ما کمی در مورد معماری بلوتوث در ESP32، نحوه پیکربندی، راهاندازی و شروع ارتباط بلوتوث و همچنین چند پروژه ساده شامل انتقال داده بین ESP32 و یک تلفن هوشمند در ارتباط بلوتوث یاد خواهیم گرفت.
یادداشت کوتاهی در مورد بلوتوث ESP32
بلوتوث یک تکنولوژی ارتباطی بیسیم عالی است که برای چند سال محبوب بودهاست. بلوتوث که در باند فرکانسISM 4/2 گیگاهرتز (صنعتی، علمی و پزشکی) بدون مجوز فعالیت میکند، یک تکنولوژی ارتباطی بیسیم کوتاهبرد با محدوده تا ۱۰۰ متر است.
ESP32 SoC کنترلکننده لینک بلوتوث (یا مدیریت لینک) و Baseband را در سیلیکون خود ادغام میکند. از نظر فیزیکی، تنها یک آنتن خارجی برای ارتباطات بلوتوث مناسب مورد نیاز است.
از آنجا که هر دو Wi-Fi و بلوتوث در فرکانس ISM 4/2 گیگاهرتز عمل میکنند، رادیو Wi-Fi و رادیو بلوتوث آنتن مشابهی را در ESP32 به اشتراک میگذارند. اگر نگاهی به پین ESP32 SoC بیندازید، تنها یک پین برای اتصال به آنتن وجود دارد (LNA _ IN).
ESP32 هم از بلوتوث کلاسیک (کلاسیک BT) و هم بلوتوث کمانرژی (BLE) پشتیبانی میکند که میتواند با استک بلوتوثBLUEDROID پیکربندی شود. ESP32 بلوتوث از سه نوع رابط کنترلکننده میزبان(HCI) پشتیبانی میکند: رابط های UART، SPI و VHCI ( HCI مجازی) (تنها یک مورد میتواند در یک زمان استفاده شود و UART پیشفرض است).
شروع کار با بلوتوث کلاسیک ESP32
بلوتوث کلاسیک که با نام Bluetooth Base Rate / Enhanced Data Rate نیز شناخته میشود، توپولوژی شبکه نقطه به نقطه اصلی است که برای ارتباطات بیسیم یک به یک بین master و slave طراحی شدهاست. با وجود این که ابزارهای متعدد slave میتوانند به یک master واحد متصل شوند، تنها یک slave میتواند به طور فعال با master ارتباط برقرار کند. صفحهکلید بلوتوث و ماوس ما با تکنولوژی بلوتوث کلاسیک کار میکنند. یک مثال ساده دیگر انتقال فایل بین دو دستگاه (مانند دو تلفن همراه یا یک لپتاپ و یک تلفن همراه) در بلوتوث براساس عملکرد بلوتوث کلاسیک است.
BLE یا بلوتوث کمانرژی از سوی دیگر، همانطور که از نام آن پیداست، برای عملیات کمقدرت طراحی شدهاست و با برنامههای IoT به عنوان هدف اصلی توسعه داده شدهاست. استاندارد بلوتوث 4.0 قابلیت BLE را اضافه کرد و عمدتا در دستگاههای باطری مانند ساعت ها، دستگاههای صوتی، ردیابهای بهداشتی، مانیتورهای تناسب اندام و چراغ اطلاعات استفاده میشود.
بیایید یک برنامه آموزشی دیگر در مورد ESP32 BLE تهیه کنیم و روی بلوتوث کلاسیک ESP32 تمرکز کنیم.
استک بلوتوث BLUEDROID با کنترلکننده بلوتوث بر روی VHCI (رابط کنترلکننده میزبان مجازی) ارتباط برقرار میکند و در عین حال API هایی را برای کاربرد کاربر فراهم میکند.
Profileهای بلوتوث، توابع هر لایه بلوتوث از PHY تا L2CAP را تعیین میکنند در حالی که پروتکلهای بلوتوث فرمتها و روشهای پیام را برای انتقال داده، کنترل لینک و غیره تعریف میکنند.
در زیر فهرستی از Profiles و پروتکلهای بلوتوث کلاسیک پشتیبانی شده توسط استک بلوتوث ESP32 ارائه شدهاست.
Profileهای بلوتوث کلاسیک
• GAP
• A2DP(SNX)
• AVRCP(CT)
پروتکلهای بلوتوث کلاسیک
• L2CAP
• SDP
• AVDTP
• AVCTP
ارتباط بین پردازنده ESP32 و کنترلکننده بلوتوث براساس رابط سریال است. بیایید با استفاده از کتابخانه ” BluetothSerial” برای بلوتوث کلاسیک، بیشتر در مورد بلوتوث ESP32 کاوش کنیم.
ارتباط سریال بلوتوث کلاسیک ESP32
اگر تا به 0حال با آردینو و هر وسیله بلوتوث مانند HC – 05 کار کردهاید، ممکن است به خاطر داشته باشید که آردینو UNO و HC – 05 بیشتر از ارتباط سریال، ارتباط برقرار میکنند. ESP32، که در حال حاضر یک کنترلر بلوتوث دارد، همچنین ارتباط مشابهی بین پردازنده Xtensa اصلی و کنترلکننده بلوتوث دارد.
این بدان معنی است که پس از دریافت دادهها از یک دستگاه بلوتوث به صورت بیسیم، کنترلکننده بلوتوث در ESP32 این دادهها را به پردازنده ESP32 بر روی ارتباطات سریال منتقل میکند. به طور مشابه، به منظور ارسال دادهها بر روی بلوتوث، پردازنده ESP32 دادهها را با استفاده از رابط سریال به کنترلر بلوتوث ارسال میکند.
ما از این اطلاعات همراه با یک کتابخانه اختصاصی””BluetoothSerial برای انتقال و دریافت دادهها استفاده خواهیم کرد.
کتابخانه BluetoothSerial مشابه کتابخانه سریال کار میکند اما فقط در ESP32 است. برخی از عملکردهای متداول که توسط کتابخانه BluetoothSerial ارایه میشوند عبارتند از:
• ()begin
• ()available
• ()write
• ()read
بیایید یک کد ساده بنویسیم که دادهها را بین ESP32 و تلفن همراه انتقال میدهد. برای مشاهده دادههای دریافتشده از ESP32، ما دادهها را بر روی پرت سریال چاپ خواهیم کرد. با آمدن تلفن همراه، به منظور ارسال و دریافت دادهها بیشتر از بلوتوث، ما باید از یک برنامه کاربردی استفاده کنیم.
من بسیاری از برنامههای کاربردی سریال بلوتوث را برای اندروید امتحان کردم اما در نهایت با “Serial Bluetooth Terminal” توسط Kai Morich به نتیجه رسیدم. شما در دوره های آموزش رباتیک صنایع آموزشی چالیک نیز میتوانید کار با انواع ماژول ها را فرا بگیرید.
رمز
اول، اجازه دهید کد را ببینیم و در این فرآیند، میتوانیم کار را درک کنیم. کد خیلی ساده است. یک شی از کلاس “BluetoothSerial” ایجاد کرده و ارتباط را با استفاده از تابع” ()begin ” آغاز کنید.
شما میتوانید نام دستگاه بلوتوث ESP32 را به عنوان یک آرگومان برای تابع “()begin” ارسال کنید. اگر آن را خالی بگذارید، نام پیشفرض یعنی ESP32 استفاده میشود. همچنین ارتباط سریال نرمال را با نرخ علامت در ثانیه ۱۱۵۲۰۰ راهاندازی کنید.
سپس، در تابع حلقه، دادههای BluetoothSerial را بخوانید و آن را بر روی نمایشگر سریال چاپ کنید و دادهها را از نمایشگر سریال بخوانید و آن را برای BluetoothSerial بنویسید.
هنگامی که ما دادهها را به BluetoothSerial مینویسیم، برنامه ترمینال بلوتوث بر روی تلفن، دادهها را دریافت میکند و آن را بر روی برنامه چاپ میکند. زمانی که شما دادهها را در برنامه تایپ میکنید و آن را به بلوتوث ارسال میکنید، BluetoothSerial این دادهها را خواهد خواند و بر روی نمایشگر سریال چاپ میشود.
#include "BluetoothSerial.h" /* Check if Bluetooth configurations are enabled in the SDK */ /* If not, then you have to recompile the SDK */ #if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED) #error Bluetooth is not enabled! Please run `make menuconfig` to and enable it #endif BluetoothSerial SerialBT; void setup() { Serial.begin(115200); /* If no name is given, default 'ESP32' is applied */ /* If you want to give your own name to ESP32 Bluetooth device, then */ /* specify the name as an argument SerialBT.begin("myESP32Bluetooth"); */ SerialBT.begin(); Serial.println("Bluetooth Started! Ready to pair..."); } void loop() { if (Serial.available()) { SerialBT.write(Serial.read()); } if (SerialBT.available()) { Serial.write(SerialBT.read()); } delay(20); }
آپلود کد و آزمایش راه اندازی بلوتوث esp32
پس از آپلود کد در ESP32، اگر نمایشگر سریال را در IDE آردوینو باز کنید، میتوانید ESP32 را ببینید که برخی اطلاعات را در مورد بلوتوث چاپ میکند. همچنین، پیام “ready” را نشان میدهد.
حالا در گوشی هوشمند خود بلوتوث را روشن کنید و برای دستگاههای بلوتوث اسکن کنید. شما باید فهرستی از “دستگاههای جفت شده” و “دستگاههای موجود” را ببینید و از میان دستگاههای موجود، ESP32 را انتخاب کنید.
موبایلتان از شما خواهد پرسید که آیا میخواهید با “ESP32” جفت شوید و بله (یا باشه) را انتخاب کنید.کلمه عبور وجود ندارد. حالا برنامه “Serial Bluetooth Terminal” را بر روی گوشی خود باز کرده و بر روی سه نوار افقی در گوشه بالای سمت چپ صفحه نمایش کلیک کنید.
تب “Devices” را انتخاب کرده و ESP32 را از لیست انتخاب کنید.
اکنون، بر روی آیکون “link” در بالا کلیک کنید تا به دستگاه بلوتوث ESP32 متصل شوید. این برنامه وضعیت را به عنوان “اتصال به ESP32 …” در حین ایجاد اتصال نمایش خواهد داد و اگر اتصال موفق باشد، “Connected” را نمایش خواهد داد.
در زیر فضایی برای ورود دادهها برای انتقال روی بلوتوث ارائه شدهاست. چیزی را تایپ کرده و روی دکمه ارسال کلیک کنید. دادههای ارسالشده در برنامه منعکس میشوند. این دادهها بر روی بلوتوث به ESP32 فرستاده میشود و توسط تابع ()BluetoothSerial read دریافت میشود.
از آنجا که ما این اطلاعات را به پرت سریال انتقال میدهیم، شما میتوانید دادههای چاپشده بر روی نمایشگر سریال را ببینید.
به طور مشابه، شما میتوانید دادهها را از ESP32 به تلفن همراه ارسال کنید. فقط برخی از دادهها را در نمایشگر سریال تایپ کرده و بر روی ارسال کلیک کنید. این دادهها از طریق تابع ()BluetoothSerial write به تلفن همراه فرستاده میشود.
برنامه کاربردی سریال ترمینال بلوتوث این دادهها را خواهد خواند و آن را بر روی برنامه چاپ خواهد کرد.
LED کنترلشده بلوتوث با استفاده از ESP32
با استفاده از برنامه بالا، ما میتوانیم کد را کمی اصلاح کنیم و یک LED کنترلشده بلوتوث را با استفاده ESP32 پیادهسازی کنیم. هدف این پروژه این است که ببیند کنترل پین های GPIO ESP32 با ارسال و تفسیر دادهها از بلوتوث چقدر آسان است.
برای ساده نگه داشتن چیزها، اجازه دهید “۱” و “۰” را با استفاده از کلیدهای ماکرو از برنامه تلفن همراه انتقال دهیم. من “۱” را برای M1 و “۰” را برای M2 اختصاص دادم. شما میتوانید دادههای دریافتی را با کاراکترهای “۱” و “۰” یا معادل دهدهی آنها در ASCII یعنی ۴۹ و ۴۸ مقایسه کنید.
هنگامی که “۱” دریافت میشود، LED متصل به GPIO 2 روشن میشود و اگر “۰” دریافت شود، LED خاموش میشود.
بدیهی است، LED فقط نمایشی از روشن و خاموش بودن پین GPIO است. شما میتوانید این برنامه را در یک رله کنترل شده بلوتوث با استفاده از ESP32 بهبود بخشید.
رمز
#include <BluetoothSerial.h> #define ledPIN 2 BluetoothSerial SerialBT; byte BTData; /* Check if Bluetooth configurations are enabled in the SDK */ #if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED) #error Bluetooth is not enabled! Please run `make menuconfig` to and enable it #endif void setup() { pinMode(ledPIN, OUTPUT); Serial.begin(115200); SerialBT.begin(); Serial.println("Bluetooth Started! Ready to pair..."); } void loop() { if(SerialBT.available()) { BTData = SerialBT.read(); Serial.write(BTData); } /* If received Character is 1, then turn ON the LED */ /* You can also compare the received data with decimal equivalent */ /* 48 for 0 and 49 for 1 */ /* if(BTData == 48) or if(BTData == 49) */ if(BTData == '1') { digitalWrite(ledPIN, HIGH); } /* If received Character is 0, then turn OFF the LED */ if(BTData == '0') { digitalWrite(ledPIN, LOW); } }
نتیجه گیری
یک راهنمای کامل مبتدی برای ارتباط بلوتوث ESP32. شما برخی از اصول مهم ارتباط بلوتوث در ESP32 SoC، چگونگی راهاندازی بلوتوث کلاسیک در ESP32، انتقال دادهها از یک تلفن هوشمند به ESP32 با استفاده از بلوتوث و یک پروژه اضافی به نام بلوتوث LED کنترلشده با استفاده از ESP32 را یاد گرفتید (که میتواند به راحتی برای کنترل یک رله اصلاح شود).