
کنترل رله با ماژول بلوتوث HC-05 و موبایل
امروزه بلوتوث همهجا وجود دارد. واژهای است که دائماً میشنویم و در میلیونها محصولی که هر روز استفاده میکنیم وجود دارد — از هدستها و تلفنهای همراه گرفته تا لپتاپها، کنترلرهای بازی، دستبندهای سلامتی و بسیاری وسایل دیگر.
در دنیای الکترونیک ، بلوتوث یک روش عالی برای انتقال بیسیم مقادیر کمی داده در فواصل کوتاه (کمتر از ۱۰ متر) است. از آن میتوان برای ثبت دادههای لحظهای یا کنترل یک پروژه با تلفن هوشمند استفاده کرد.
یکی از ارزانترین و پرکاربردترین ماژولهای بلوتوث، ماژول HC-05 است. این ماژول را میتوانید بهراحتی در اینترنت پیدا کنید، که آن را به گزینهای مقرونبهصرفه برای افزودن قابلیت بلوتوث به پروژههای خود تبدیل میکند. دیگر خبری از سیمها و کابلهای درهمپیچیده نیست!
در پایان این مجموعه آموزشی، درک خوبی از نحوهی استفاده از ماژول بلوتوث HC-05 در پروژههای خود خواهید داشت. پس بیایید شروع کنیم!
مروری بر سختافزار HC-05
ماژول HC-05 یک پل ارتباطی بلوتوث به سریال (Bluetooth-to-Serial Bridge) است که ارتباط بیسیم بین دو میکروکنترلر یا بین میکروکنترلر و تلفن همراه، لپتاپ یا کامپیوتر دارای بلوتوث را فراهم میکند.
این ماژول جایگزین مستقیم و بدون دردسر برای ارتباط سریال سیمی (UART) محسوب میشود.
هر ماژول HC-05 شامل یک فرستنده و گیرنده بلوتوث (Bluetooth Transceiver) است، به این معنی که میتواند هم داده ارسال و هم دریافت کند.
بهعنوان یک دستگاه بلوتوث کلاس ۲ (Class 2)، ماژول HC-05 محدودهی اسمی حدود ۱۰ متر دارد — البته این مقدار در فضای باز بهدست میآید. در داخل خانه، بهویژه بهدلیل وجود دیوارها، برد مؤثر آن کمی کاهش مییابد.
از همه بهتر این است که این ماژولها بسیار ساده برای استفاده هستند. نیازی نیست با پروتکلها یا پشتهی بلوتوث (Bluetooth stack) سر و کله بزنید؛ فقط کافی است دادهها را از طریق رابط سریال (UART) ارسال کنید، و ماژول آن را مستقیماً به دستگاه بلوتوث متصلشده منتقل میکند.
حالتهای کاری (Modes of Operation)
کنترل ماژول HC-05 و ارسال داده از طریق آن، دو عملکرد متفاوت هستند، اما هر دو از طریق رابط سریال انجام میشوند.
برای تفکیک این دو نوع داده، ماژول HC-05 دو حالت ارتباطی مجزا دارد:
-
حالت AT (AT Mode)
در این حالت، میتوانید تنظیمات مختلف ماژول را پیکربندی کنید، مانند:-
نام دستگاه (Device Name)
-
نرخ انتقال داده یا Baud Rate
-
کد شناسایی یا PIN Code
-
نرخ داده (Data Rate)
این حالت مخصوص پیکربندی و تنظیم ماژول است.
-
-
حالت داده (Data Mode)
در این حالت، ماژول HC-05 مانند یک درگاه شفاف انتقال داده (Transparent Data Gateway) عمل میکند.-
وقتی دادهای از طریق بلوتوث دریافت میشود، سرآیند و انتهای بسته (Header و Trailer) بلوتوث را حذف کرده و دادهی خام را به پورت سریال (UART) ارسال میکند.
-
وقتی دادهای به پورت سریال ارسال شود، ماژول آن را در قالب یک بستهی بلوتوث (Bluetooth Packet) قرار داده و بهصورت بیسیم انتقال میدهد.
-
نقشهای ارتباطی (Connection Roles)
ماژول HC-05 میتواند در دو نقش اصلی کار کند: Master (فرستنده یا کنترلکننده) و Slave (گیرنده یا تحتکنترل).
-
در نقش Slave، ماژول HC-05 منتظر میماند تا دستگاههای دیگر (مانند تلفن همراه یا ماژول دیگر) اتصال را آغاز کنند.
این حالت پیشفرض ماژول است و معمولاً در پروژههایی استفاده میشود که قصد دارید دستگاهی را با تلفن هوشمند کنترل کنید.
در نقش Master (مستر)، ماژول HC-05 بهصورت فعال به جستجوی دستگاههای بلوتوث دیگر میپردازد و تلاش میکند تا اتصال را آغاز کند.
این حالت معمولاً در پروژههایی استفاده میشود که دو میکروکنترلر باید بهصورت بیسیم با یکدیگر ارتباط برقرار کنند.
برای تغییر بین نقشها (Master و Slave)، لازم است ماژول را به حالت AT ببرید و از طریق پورت UART، دستورات AT مربوطه را برای تنظیم نقش مورد نظر ارسال کنید.
تغذیه (Power)
حداکثر ولتاژ کاری تراشهی اصلی HC-05 برابر با ۳٫۳ ولت است.
به همین دلیل، روی برد ماژول یک رگولاتور خطی ۳٫۳ ولت تعبیه شده است که به شما اجازه میدهد ماژول را با ولتاژی بین ۳٫۶ تا ۶ ولت تغذیه کنید.
این رگولاتور داخلی باعث میشود بتوانید ماژول را مستقیماً با پین ۵ ولت آردوینو نیز تغذیه کنید، بدون آنکه به مدار اضافی تبدیل ولتاژ نیاز داشته باشید.
نکتهی بسیار مهم این است که ماژول HC-05 با منطق ۳٫۳ ولت (Logic Level 3.3V) کار میکند، بنابراین پین Rx این ماژول را نمیتوان مستقیماً به پایههای دیجیتال یک میکروکنترلر ۵ ولتی مانند Arduino UNO متصل کرد.
به بیان دیگر، پین Rx در HC-05 تحمل ولتاژ ۵ ولت را ندارد (5V-tolerant نیست).
بنابراین، پیش از اتصال پایه Tx میکروکنترلر به پایه Rx ماژول HC-05، باید ولتاژ سیگنال را از ۵ ولت به ۳٫۳ ولت کاهش دهید (مثلاً با استفاده از یک مقاومت تقسیم ولتاژ یا مبدل سطح منطقی – Logic Level Converter).
مصرف جریان (Current Consumption)
میزان جریان مصرفی ماژول HC-05 بسته به حالت کاری آن متفاوت است.
جدول زیر، مقادیر تقریبی را بر اساس دیتاشیت ماژول نشان میدهد:
حالت عملکرد | جریان مصرفی تقریبی |
---|---|
اتصال فعال همراه با انتقال داده | حدود ۴۵ میلیآمپر |
اتصال برقرار اما بدون انتقال داده (Idle) | حدود ۸ میلیآمپر |
نشانگر LED وضعیت (Status LED)
بسیاری از ماژولهای HC-05 دارای LED داخلی هستند که وضعیت فعلی ماژول را نشان میدهد (مثلاً در حالت جستجو، اتصال یا انتقال داده).
الایدی روی ماژول HC-05 با الگوهای مختلف چشمک میزند تا وضعیت فعلی ماژول را نشان دهد:
-
وقتی ماژول روشن میشود (بدون اتصال بلوتوث)، به حالت Pairing Mode یا جفتسازی وارد میشود و LED با سرعت زیاد حدود ۲ بار در ثانیه (۲Hz) چشمک میزند.
-
وقتی ماژول با دستگاهی جفت و متصل میشود، الگوی چشمکزدن تغییر میکند بهصورت دو چشمک سریع پشت سر هم، سپس یک مکث کوتاه و دوباره تکرار میشود.
-
وقتی ماژول در حالت AT قرار میگیرد، LED با سرعت کم و منظم چشمک میزند، که نشاندهنده ورود به حالت تنظیمات (Configuration Mode) است.
حالت AT (AT Mode)
حالت AT Mode حالتی است که در آن میتوانید دستورات AT (به سبک Hayes) را به ماژول ارسال کنید تا تنظیمات آن را تغییر دهید — مانند:
-
نام دستگاه (Name)
-
نرخ انتقال داده (Baud Rate)
-
رمز عبور (Password یا PIN)
-
نقش ارتباطی (Master/Slave) و سایر پارامترها
بهطور پیشفرض، ماژول HC-05 در حالت Data Mode کار میکند.
برای ورود به حالت AT Mode باید مراحل زیر را انجام دهید:
-
دکمهی روی ماژول (کلید کوچک کنار LED) را نگه دارید.
-
در حالی که دکمه را نگه داشتهاید، ماژول را تغذیه کنید (به برق وصل کنید).
-
پس از چند لحظه، LED شروع میکند به چشمکزدن آهسته و منظم.
این علامت نشان میدهد که ماژول با موفقیت وارد حالت AT شده است.
در این حالت میتوانید از طریق پورت سریال (UART)، دستورات تنظیمی را برای پیکربندی ماژول ارسال کنید.
وقتی ماژول در حالت AT قرار دارد، میتوانید دستورات AT را از طریق پورت UART برای آن ارسال کنید.
ماژول در پاسخ به هر دستور، بسته به نوع آن، یکی از حالتهای زیر را برمیگرداند:
-
تأیید اجرای دستور (OK)،
-
ارسال دادهی درخواستی (مثلاً نام یا Baud Rate فعلی)،
-
یا نمایش خطا (ERROR) در صورت نادرست بودن فرمان یا قالب آن.
قالب دستورات AT
دستورات معمولاً با عبارت AT+
شروع میشوند و سپس نام فرمان میآید. برای مثال:
-
دستور
AT+NAME?
→ برای پرسوجو از نام فعلی ماژول استفاده میشود. -
دستور
AT+NAME=MyHC05
→ نام ماژول را به MyHC05 تغییر میدهد.
نرخ انتقال داده در حالت AT
دستورات AT باید با نرخ انتقال داده (Baud Rate) خاص حالت AT ارسال شوند.
این نرخ معمولاً با نرخ انتقال در حالت داده (Data Mode) متفاوت است.
-
نرخ پیشفرض برای AT Mode برابر است با 38400 بیت بر ثانیه (bps)
-
در صورت نیاز، این مقدار نیز قابل تغییر است.
پینآوت ماژول HC-05 (HC-05 Pinout)
ماژول HC-05 دارای شش پایهی اصلی است که برای تغذیه و ارتباط سریال استفاده میشوند.
در ادامه، نام و توضیح هر پین آورده شده است:
پایه | نام پین | توضیح |
---|---|---|
1 | EN / KEY | برای فعالکردن حالت AT Mode استفاده میشود (با نگهداشتن دکمه یا اعمال ولتاژ بالا روی این پین در هنگام روشن شدن). |
2 | VCC | پایهی تغذیه – میتواند بین ۳٫۶ تا ۶ ولت تغذیه شود. |
3 | GND | زمین مدار. |
4 | TXD | پایهی ارسال داده (Transmit) – دادهها را از ماژول به میکروکنترلر میفرستد. |
5 | RXD | پایهی دریافت داده (Receive) – دادهها را از میکروکنترلر دریافت میکند (منطق ۳٫۳ ولت). |
6 | STATE | خروجی وضعیت اتصال – وقتی ماژول متصل است، سیگنال این پین فعال میشود (میتواند برای نمایش LED یا کنترل مدار دیگر استفاده شود). |
پین STATE برای مشخصکردن وضعیت فعلی ماژول HC-05 استفاده میشود.
وقتی ماژول اتصال بلوتوث ندارد (جفتسازی نشده است)، این پین در وضعیت LOW (صفر منطقی) قرار دارد،
و زمانی که ماژول با دستگاهی جفت و متصل میشود، پین STATE به HIGH (یک منطقی) تغییر میکند.
از این پین میتوان برای نمایش وضعیت اتصال با LED یا کنترل بخشهای دیگر مدار (مثلاً فعالکردن رله فقط در زمان اتصال بلوتوث) استفاده کرد.
پین RXD وظیفهی دریافت دادهی سریال از میکروکنترلر را دارد، بنابراین باید به پایهی TX (ارسال) میکروکنترلر متصل شود.
نکتهی بسیار مهم:
پین RXD ماژول تحمل ولتاژ ۵ ولت را ندارد (5V-tolerant نیست).
اگر از میکروکنترلر ۵ ولتی مانند Arduino UNO استفاده میکنید، باید سیگنال TX میکروکنترلر را به ۳٫۳ ولت کاهش دهید (مثلاً با استفاده از تقسیم مقاومتی یا ماژول مبدل سطح منطقی)، تا از آسیب به ماژول جلوگیری شود.
پین TXD وظیفهی ارسال دادههای سریال از ماژول به میکروکنترلر را دارد، بنابراین باید به پایهی RX (دریافت) میکروکنترلر متصل شود.
پین GND، پایهی زمین (Ground) ماژول است و باید با زمین سایر بخشهای مدار (مثل آردوینو یا تغذیه) مشترک باشد.
پین VCC محل اتصال ولتاژ تغذیهی مثبت است. این ولتاژ پس از عبور از یک رگولاتور داخلی ۳٫۳ ولت، به تراشهی اصلی HC-05 اعمال میشود.
ولتاژ مجاز برای پایهی VCC بین ۳٫۶ تا ۶ ولت است (بنابراین میتوان آن را مستقیماً به پایهی ۵V آردوینو متصل کرد).
پین EN (یا KEY) به ورودی فعالسازی رگولاتور داخلی متصل است و بهصورت پیشفرض توسط یک مقاومت ۲۲۰ کیلو اهمی در حالت HIGH قرار دارد.
اگر این پین را به سطح LOW بکشید، رگولاتور غیرفعال شده و کل ماژول خاموش میشود.
کنترل ماژول HC-05
برای کنترل ماژول بلوتوث HC-05 و ارسال داده از طریق آن، تنها چیزی که نیاز دارید یک رابط سریال (UART) است.
این ماژول مانند یک لولهی انتقال داده (Data Pipeline) عمل میکند:
- هر دادهای که از طرف میکروکنترلر وارد پین RXD ماژول شود، بهصورت بیسیم از طریق بلوتوث ارسال میشود.
- و هر دادهای که از سمت بلوتوث دریافت شود، از طریق پین TXD به میکروکنترلر فرستاده میشود.
مراحل راهاندازی ارتباط بلوتوث
برای راهاندازی این مسیر انتقال داده، تنها باید دو گام انجام دهید:
- اتصال ماژول HC-05 به میکروکنترلر یا آردوینو (دستگاهی که قابلیت ارسال و دریافت داده سریال دارد).
- برقراری ارتباط بیسیم بین ماژول HC-05 و یک دستگاه بلوتوث دیگر (مثل تلفن اندرویدی).
این فرآیند شامل جفتسازی (Pairing) است، درست مانند اتصال دو دستگاه بلوتوث معمولی.
برای ارسال و دریافت داده از طریق موبایل، باید از یک برنامهی ترمینال بلوتوثی (Bluetooth Terminal App) استفاده کنید.
یکی از گزینههای پیشنهادی، اپلیکیشن Serial Bluetooth Terminal در Google Play است، البته برنامههای رایگان مشابه دیگری نیز وجود دارند.
بهطور خلاصه، کافی است:
- ارتباط سریال بین HC-05 و آردوینو برقرار شود،
- سپس HC-05 را با گوشی یا دستگاه بلوتوثی دیگر جفت کنید،
تا بتوانید دادهها را بین آنها رد و بدل کنید.
اتصال ماژول HC-05 به آردوینو
اتصال ماژول HC-05 به Arduino بسیار ساده است — فقط کافی است تغذیه را وصل کنید و پایههای RX و TX را سیمکشی کنید.
با این حال، بهجای آنکه ماژول را مستقیماً به پورت UART سختافزاری (پینهای 0 و 1 آردوینو UNO) وصل کنیم، بهتر است از کتابخانهی SoftwareSerial استفاده کنیم.
با این روش میتوانیم پینهای RX و TX ماژول HC-05 را به هر پین دیجیتال آزاد آردوینو متصل کنیم.
این کار باعث میشود:
- تداخل داده (Bus Contention) پیش نیاید،
- و در هنگام آپلود برنامه روی آردوینو، ماژول HC-05 دادهی ناخواسته دریافت نکند.
بنابراین، در اتصال معمول ماژول HC-05 به آردوینو:
-
پایهی TXD ماژول به پایهی D3 آردوینو متصل میشود.
-
پایهی RXD ماژول به پایهی D2 آردوینو متصل میشود.
-
پایهی GND ماژول به GND آردوینو وصل میشود.
-
پایهی VCC ماژول نیز به ۵ ولت آردوینو (5V) متصل میگردد.
البته، پایههای TXD و RXD ماژول HC-05 را میتوان به هر پایهی دیجیتال آزاد آردوینو (بهجز پایههای 0 و 1) متصل کرد.
بنابراین اگر از پینهای ۲ و ۳ برای کار دیگری استفاده میکنید، میتوانید بهراحتی از پایههای دیگر استفاده کنید.
اما همانطور که قبلاً اشاره شد، پایهی RX در ماژول HC-05 تحمل ولتاژ ۵ ولت را ندارد (5V-tolerant نیست).
به همین دلیل، نمیتوان سیگنال Tx آردوینو (که ۵ ولتی است) را مستقیماً به Rx ماژول متصل کرد.
برای حل این مشکل، باید ولتاژ سیگنال را از ۵ ولت به حدود ۳٫۳ ولت کاهش دهید.
سادهترین و ارزانترین روش، استفاده از تقسیم مقاومتی (Voltage Divider) است:
🔹 یک مقاومت ۱ کیلو اهم بین پایهی RX ماژول HC-05 و پایهی D2 آردوینو قرار دهید.
🔹 و یک مقاومت ۲ کیلو اهم بین پایهی RX ماژول HC-05 و GND وصل کنید.
این تقسیم مقاومتی سیگنال ۵ ولتی آردوینو را به حدود ۳٫۳ ولت کاهش میدهد که برای ورودی ماژول HC-05 کاملاً ایمن است.
خلاصه اتصالات برای مثال بعدی:
پایه HC-05 | پایه آردوینو | توضیح |
---|---|---|
VCC | 5V | تغذیه ماژول (با رگولاتور داخلی ۳٫۳ ولت) |
GND | GND | زمین مشترک |
TXD | D3 | ارسال داده از ماژول به آردوینو |
RXD | D2 (با تقسیم مقاومتی) | دریافت داده از آردوینو |
EN (اختیاری) | — | برای ورود به حالت AT استفاده میشود |
نمونه برنامه (Sketch) برای انتقال سریال بلوتوث (Bluetooth Serial Passthrough)
با استفاده از این برنامه میتوانیم آردوینو را بهعنوان یک پل (Medium) بین کامپیوتر و ماژول HC-05 استفاده کنیم.
دادههایی که از Serial Monitor آردوینو ارسال میشوند، از طریق ماژول HC-05 به دستگاه بلوتوثی منتقل میشوند، و دادههای دریافتشده از بلوتوث نیز به Serial Monitor باز میگردند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#include <SoftwareSerial.h> //Create software serial object to communicate with HC-05 SoftwareSerial mySerial(3, 2); //HC-05 Tx & Rx is connected to Arduino #3 & #2 void setup() { //Begin serial communication with Arduino and Arduino IDE (Serial Monitor) Serial.begin(9600); //Begin serial communication with Arduino and HC-05 mySerial.begin(9600); Serial.println("Initializing..."); Serial.println("The device started, now you can pair it with bluetooth!"); } void loop() { if(Serial.available()) { mySerial.write(Serial.read());//Forward what Serial received to Software Serial Port } if(mySerial.available()) { Serial.write(mySerial.read());//Forward what Software Serial received to Serial Port } delay(20); } |
پس از آپلود کردن کد روی آردوینو، Serial Monitor را با نرخ انتقال داده ۹۶۰۰ بیت بر ثانیه (baud rate 9600) باز کنید.
در این مرحله باید پیامی مشابه زیر را مشاهده کنید:
این پیام نشان میدهد که دستگاه راهاندازی شده و اکنون میتوانید آن را از طریق بلوتوث با دستگاه دیگری جفت (Pair) کنید.
اتصال به گوشی اندروید
بیایید یک ارتباط بیسیم بین ماژول HC-05 و یک گوشی اندرویدی برقرار کنیم. ممکن است جزئیات بسته به مدل گوشی کمی متفاوت باشد، اما مراحل کلی تقریباً مشابهاند:
-
اطمینان حاصل کنید که ماژول HC-05 روشن است و آمادهی برقراری اتصال میباشد. چراغ LED روی ماژول باید با سرعت حدود ۲ بار در ثانیه (۲Hz) چشمک بزند؛ این یعنی ماژول در حالت قابل شناسایی (Discoverable) قرار دارد.
-
حالا از بالای صفحهی گوشی اندروید خود نوار اعلانها (Notification Bar) را پایین بکشید و مطمئن شوید که بلوتوث روشن است.