در این آموزش قصد داریم شما را با نحوه راه اندازی ماژول بلوتوث HC-05 با آردوینو آشنا کنیم و دو مثال کاربردی و پروژه محور را که شامل کنترل آردوینو با استفاده از یک تلفن همراه هوشمند و دیگری با استفاده از یک لپ تاپ میباشد برای شما بیان میکنیم. قبل شروع آموزش راه اندازی این ماژول بلوتوث، بیایید نگاه دقیقتری به HC-05 داشته باشیم.
فهرست مطالب
- معرفی ماژول HC-05
- سخت افزارهای موردنیاز برای پروژه راه اندازی
- نحوه سیم کشی و اتصال ماژول بلوتوث HC-05 به آردوینو
- برقراری ارتباط بین ماژول، گوشی و آردوینو (با کد نمونه جهت کنترل ال ای دی با بلوتوث)
- اتصال ماژول بلوتوث به گوشی همراه
- اتصال ماژول بلوتوث به کامپیوتر و لپ تاپ
- تنظیم مد At Command
- ارسال دستورات At Command
ماژول بلوتوث چیست؟
ماژول بلوتوث دستگاهی است که برای ارتباط بیسیم در فواصل کوتاه مورد استفاده قرار میگیرد. این ماژول از پروتکل ارتباطی سریال برای ارتباط بیسیم استفاده میکند و میتوان آن را در دو مد فرستنده و گیرنده تنظیم کرد. در مد فرستنده، چندین دستگاه میتوانند به ماژول بلوتوث متصل شوند وسپس این ماژول میتواند داده را با همه آنها به اشتراک بگذارد. در حالی که در مد گیرنده، خود به دستگاه فرستنده متصل میشود و فقط میتواند داده را با فرستنده به اشتراک بگذارد. به طور خلاصه در مد فرستنده، ماژول سایر دستگاهها را کنترل میکند و در مد گیرنده، ماژول توسط دستگاه دیگری کنترل خواهد شد و برای تغییر تنظیمات فرستنده و گیرنده تنها کافیست از دستورات AT ماژول بلوتوث استفاده کنید که لازم به ذکر است، برای استفاده از مد AT باید بادریت برابر 38400 و برای ارتباط سریال برابر 9600 تنظیم شود.
مشخصات ماژول بلوتوث HC-05
- نوع ارتباط: سریال
- دامنه ولتاژ تغذیه: 3.6 الی 6 ولت
- دارای آنتن داخلی
- قابلیت اتصال خودکار به آخرین دستگاه جفت شده
- قابلیت جابهجایی بین مد فرستنده و گیرنده
ماژول بلوتوث HC05 در باند فرکانسی 2.4 گیگاهرتز کار میکند و میتواند به دستگاههایی که در فاصله 10 متری از آن واقع شدهاند، متصل شود. دامنه ولتاژ کاری ماژول بلوتوث از 3.3 ولت تا 5 میباشد و در کل دارای 6 پایه است که در ادامه هر یک توضیح داده شدهاند:
عملکرد | پین |
به طور پیش فرض ماژول در مد داده و این پین در وضعیت LOW قرار دارد. از این پین برای فعال یا غیرفعالسازی ماژول استفاده می شود | 1-EN |
ولتاژ تغذیه اعمالی به ماژول بلوتوث برابر 3.3 یا 5 ولت میباشد. | 2-VCC |
این پین برای اتصال ماژول بلوتوث به زمین مورد استفاده قرار میگیرد. | 3-GND |
ارسال داده از طریق ارتباط سریال با مانیتور سریال IDE آردوینو انجام میشود. | 4-TXD |
با این پین دادهها از طریق ارتباط سریال دریافت میشوند. | 5-RXD |
بررسی اینکه آیا ماژول متصل شده است یا خیر، با این پین انجام می شود. | 6-STATE |
در مقایسه با ماژول HC-06، که تنها میتواند به عنوان یک گیرنده عمل کند، ماژول بلوتوث HC-05 علاوه بر گیرنده، میتواند به عنوان فرستنده هم تنظیم شود؛ برای مثال از این طریق میتوان بین دو برد آردوینو مجزا ارتباط برقرار کرد. چندین ورژن مختلف از این ماژول وجود دارد اما برای راحتی اتصال ماژول توصیه میکنیم از نمونهای که بر روی یک برد برک اوت قرار گرفته استفاده کنید. ماژول HC-05 یک ماژول بلوتوث مبتنی بر پروتکل سریال (Bluetooth Serial Port Protocol) میباشد، به این معنا که از طریق ارتباط سریال با آردوینو ارتباط برقرار میکند. راهاندازی ماژول بلوتوث HC-05 با انواع میکروکنترلرها از جمله ماژولهای آردوینو، ESP8266، STM32 و … امکانپذیر است. در این آموزش از آردوینو mega استفاده شدهاست.
سخت افزار موردنیاز جهت راه اندازی ماژول بلوتوث HC-05 با آردوینو
اکنون زمان آن است که راه اندازی ماژول بلوتوث HC-05 با آردوینو را آغاز کنیم و توسط اینکار با موبایل یا لپ تاپ خود ارتباط بیسیم برقرار کنیم! شما برای شروع به قطعات زیر نیاز خواهید داشت که میتوانید آنها را از فروشگاه روبوایکیو تهیه کنید:
- ماژول بلوتوث HC05 همراه با برد کمکی
- ماژول آردوینو UNO R3
- مقاومت 1 کیلواهم و مقاومت 2 کیلواهم و مقاومت 220 اهم
- ال ای دی
- برد برد و سیم جامپر
نحوه سیمکشی و اتصال ماژول بلوتوث به آردوینو:
ماژول بلوتوثی که در اینجا استفاده شده به خاطر اینکه بر روی یک برد برک اوت قرار دارد که متشکل از یک رگولاتور ولتاژ است، میتواند با ولتاژ 3.6 ولت الی 6 ولت تغذیه شود. با این وجود سطح ولتاژ منطقی پینهای داده 3.3 ولت است. بنابراین خط ارتباطی بین پین TX آردوینو (که خروجی 5 ولت دارد) و پین RX ماژول بلوتوث (که تنها قابلیت تحمل ولتاژ 3.3 ولت را دارد) باید به یک مقسم ولتاژ متصل شود تا مانع از آسیب دیدن ماژول شود. از طرف دیگر، پین TX ماژول بلوتوث و پین RX آردوینو میتوانند به طور مستقیم به یکدیگر متصل شوند، چون سیگنال 3.3 ولت از ماژول بلوتوث برای پذیرش به عنوان یک سطح منطقی High در برد آردوینو کافی است. ال ای دی را نیز با یک مقاومت 220 اهم به پایه 7 آردوینو متصل کنید.
برقراری ارتباط بین آردوینو و تلفن همراه از طریق ماژول بلوتوث HC-05
اکنون آمادهایم تا کد آردوینو زیر را برای برقراری ارتباط بین آردوینو و تلفن همراه بررسی کنیم. این یک مثال ساده برای کنترل ال ای دی با بلوتوث است که تنها یک ال ای دی را روشن و خاموش میکند.
#include <SoftwareSerial.h>
SoftwareSerial BTserial(2,3); // RX,TX
#define ledPin 7
int state = 0;
void setup() {
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
Serial.begin(9600);
BTserial.begin(9600); // Default communication rate of the Bluetooth module
}
void loop() {
if(BTserial.available() > 0){ // Checks whether data is comming from the serial port
state = BTserial.read(); // Reads the data from the serial port
}
if (state == '0') {
digitalWrite(ledPin, LOW); // Turn LED OFF
Serial.println("LED: OFF"); // Send back, to the phone, the String "LED: ON"
state = 0;
}
else if (state == '1') {
digitalWrite(ledPin, HIGH);
Serial.println("LED: ON");
state = 0;
}
}
توضیحات کد
ابتدا لازم است پایههایی که ال ای دی به آن متصل شده و سپس متغیری که دادههای دریافتی از تلفن همراه را در آن ذخیره میکنیم، تعریف شود. در تابع setup، پین LED را به عنوان خروجی تعریف کرده و آن را در وضعیت LOW قرار میدهیم.
همانطورکه قبلاً اشاره شد، از ارتباط سریال استفاده خواهیم کرد. در تابع loop، با کمک تابع ()Serial.available بررسی میکنیم که آیا دادهای از پورت سریال برای خواندن وجود دارد. یعنی زمانی که دادهای برای ماژول بلوتوث ارسال میکنیم این عبارت صحیح خواهد بود، سپس از تابع ()Serial.read برای خواندن این داده استفاده کرده و آن را در متغیر “state” ذخیره میکنیم. به این ترتیب اگر آردوینو کاراکتر ‘0’ را دریافت کند، ال ای دی را خاموش خواهد کرد و از طریق پورت سریال و با کمک تابع ()Serial.println رشتهی “LED: OFF” به تلفن همراه ارسال خواهد شد.
علاوهبراین، مقدار متغیر state را به ‘0’ ریست میکنیم تا دو خط بالا تنها یک بار اجرا شوند. توجه داشته باشید که متغیر state از نوع عدد صحیح است، بنابراین زمانی که کاراکتر ‘0’ از تلفن همراه دریافت میشود، مقدار واقعی عدد صحیح state بر اساس جدول اسکی برابر 48 است. به همین دلیل است که در عبارت شرطی if متغیر state را با کارکتر ‘0’ مقایسه میکنیم. از طرف دیگر، چنانچه کاراکتر ‘1’ دریافت شود، ال ای دی روشن و رشته “LED: ON” ارسال خواهد شد.
اکنون برنامه آمادهی آپلود بر روی آردوینو است، توجه داشته باشید چنانچه از پینهای RX و TX آردوینو استفاده میکنید، لازم است هنگام آپلود برنامه آنها را جدا کنید، زیرا که آردوینو از ارتباط سریال استفاده میکند که در این بخش برای اجتناب از این امر، پایههای 2 و 3 آردوینو را مورد استفاده قرار دادهایم. همچنین برای ایجاد این ارتباط سریال، کتابخانه SoftwareSerial.h را بهکار بردهایم.
اتصال ماژول بلوتوث HC-05 به گوشی و آردوینو
در این مرحله آمادهایم تا ماژول بلوتوث را به گوشی و آردوینو متصل کنیم. بدین منظور بلوتوث تلفن همراه خود را روشن کنید تا تلفن شما ماژول بلوتوث HC-05 را پیدا کند.
معمولاً رمز پیش فرض اتصال ماژول HC-05 برابر ‘1234’ یا ‘0000’ است. پس از جفت شدن دو دستگاه به یک اپلیکیشن برای کنترل آردوینو نیاز خواهیمداشت. نرمافزارهای زیادی بدینمنظور وجود دارد که ما در اینجا از اپلیکیشن آنلاین اپلیکیشن آنلاین Bluetooth استفاده میکنیم .
پس از نصب نرمافزار، با گزینه connect تلفن همراه به ماژول بلوتوث متصل خواهد شد و متنی مبنیبر اینکه که اتصال با موفقیت انجام شدهاست یا خیر نمایش داده خواهد شد. سپس با گزینههای “Turn ON” و “Turn OFF” می توانیم ال ای دی را روشن و خاموش کنیم. هنگام فشردن هر یک از گزینهها پیغامی بر اساس آنچه آردوینو برای تلفن همراه ارسال میکند، نمایش داده میشود.
نحوهی کنترل آردوینو از طریق اتصال ماژول بلوتوث به کامپیوتر یا لپ تاپ
بیایید ببینیم چطور میتوانیم آردوینو را از طریق ماژول بلوتوث و اتصال آن به کامپیوتر یا لپتاپ کنترل کنیم. اول باید لپتاپ خود را با ماژول بلوتوث HC-05 جفت کرده و به آن متصل کنیم که این امر با انجام تنظیمات بلوتوث لپتاپ امکان پذیر است. لپتاپ ماژول HC-05 را پیدا کرده و با وارد کردن رمز ‘1234’ این دو دستگاه با هم جفت میشوند.
پس از جفت شدن دو دستگاه، در این مرحله به Device Manager لپتاپ بروید، در قسمت Ports(COM&LPT) دو موجودیت جدید تحت عنوان “Standard Serial Bluetooth link” ظاهر خواهند شد. در اینجا میتوانیم شماره پورت COM ارتباط سریال که دو دستگاه از طریق آن با هم ارتباط برقرار خواهند کرد را ببینیم.
قصد داریم مثال قبل را مجددا اجرا و یک LED را روشن و خاموش کنیم، سپس یک رشته را به لپتاپ برگردانیم. بنابراین از همان ساختار برنامهی قبل استفاده خواهیم کرد.
نمونه کد Processing IDE
محیط برنامه نویسی در نرمافزار پراسسینگ کاملا مشابه محیط برنامه نویسی نرمافزار آردوینو میباشد با این تفاوت که با کمک آن میتوانید یک محیط گرافیکی طراحی کنید. بنابراین ابتدا نرمافزار Processing را متناسب با سیستم عامل خود نصب کنید. سپس برنامه زیر را در IDE پراسسینگ کپی کنید.
import processing.serial.*;
Serial myPort;
String ledStatus="LED: OFF";
void setup(){
size(450, 500);
myPort = new Serial(this, "COM5", 38400); // Starts the serial communication
myPort.bufferUntil('\n'); // Defines up to which character the data from the serial port will be read. The character '\n' or 'New Line'
}
void serialEvent (Serial myPort){ // Checks for available data in the Serial Port
ledStatus = myPort.readStringUntil('\n'); //Reads the data sent from the Arduino (the String "LED: OFF/ON) and it puts into the "ledStatus" variable
}
void draw(){
background(237, 240, 241);
fill(20, 160, 133); // Green Color
stroke(33);
strokeWeight(1);
rect(50, 100, 150, 50, 10); // Turn ON Button
rect(250, 100, 150, 50, 10); // Turn OFF Button
fill(255);
textSize(32);
text("Turn ON",60, 135);
text("Turn OFF", 255, 135);
textSize(24);
fill(33);
text("Status:", 180, 200);
textSize(30);
textSize(16);
text("Program made by Dejan Nedelkovski,\n www.HowToMechatronics.com", 80, 320);
text(ledStatus, 155, 240); // Prints the string comming from the Arduino
// If the button "Turn ON" is pressed
if(mousePressed && mouseX>50 && mouseX<200 && mouseY>100 && mouseY<150){
myPort.write('1'); // Sends the character '1' and that will turn on the LED
// Highlighs the buttons in red color when pressed
stroke(255,0,0);
strokeWeight(2);
noFill();
rect(50, 100, 150, 50, 10);
}
// If the button "Turn OFF" is pressed
if(mousePressed && mouseX>250 && mouseX<400 && mouseY>100 && mouseY<150){
myPort.write('0'); // Sends the character '0' and that will turn on the LED
stroke(255,0,0);
strokeWeight(2);
noFill();
rect(250, 100, 150, 50, 10);
}
}
توضیحات کد
در اینجا از یک کتابخانه سریال استفاده میکنیم و به منظور فعالسازی ارتباط سریال یک شیء سریال میسازیم. همچنین درادامه متغیری از نوع رشته برای وضعیت ال ای دی تعریف شدهاست. ما در تابع setup، سایز پنجره برنامه را تنظیم و ارتباط سریال را آعاز میکنیم. در ادامه یکی از شماره پورتهای COM را که قبلا به آن اشاره شد در اینجا استفاده میکنیم. در خط بعدی یک بافر برای پورت سریال تعریف میشود و در اینجا تا زمانی داده از پورت سریال خوانده میشود که کاراکتر خط جدید دریافت شود که در واقع خط جدید زمانی است که آردوینو رشته “LED: OFF” یا “LED: ON” را ارسال میکند.
سپس، با استفاده از تابع ()serialEvent بررسی میشود که آیا دادهای در پورت سریال برای خواندن در دسترس است. دادهای که توسط آردوینو ارسال شده با تابع ()readStirngUntil از پورت سریال خوانده میشود که در اینجا رشته های “LED: OFF” یا “LED: ON” هستند.
در تابع ()draw، که به طور دائم تکرار میشود، تمام توابع و گرافیکهای مورد نیاز برنامه را میسازیم. ابتدا رنگ پسزمینه، رنگ گزینهها و سایز آنها را تنظیم میکنیم و با استفاده از تابع ()rect دو گزینه میسازیم. پس از آن با تایع ()text متن مورد نظر که شامل رشته ledstatus است و از آردوینو دریافت شده را چاپ میکنیم. آنچه باقی مانده عملکرد گزینههاست. بدین منظور با استفاده از اولین عبارت شرطی if، مساحت مربوط به گزینه “Turn ON” را تعیین میکنیم، بنابراین زمانی که این گزینه فشرده شود کاراکتر ‘1’ تحت پورت سریال به آردوینو ارسال و LED روشن خواهد شد. گام بعدی هایلایت شدن گزینه هنگام فشرده شدن است. همین امر برای گزینه “Turn OFF” نیز تکرار میشود.
اکنون برنامه آماده است، زمانی که بر روی گزینه run کلیک میکنیم، برنامه بهطور خودکار ارتباط بلوتوث بین آردوینو و لپتاپ را فعال خواهد کرد. ماژول بلوتوث HC-05 هر دو ثانیه یک بار شروع به چشمک زدن میکند که بیانگر اتصال ماژول است و میتوانیم با استفاده از لپتاپ ال ای دی را کنترل کنیم.
تنظیم مد AT Command ماژول بلوتوث HC-05
در مد AT Command از دستورات AT برای تنظیم ماژول از جمله، بادریت، مد کاری، عملکرد به عنوان فرستنده یاگیرنده، رمز و … استفاده میشود. هر تغییری توسط مد AT اعمال میکنید، ذخیره میشود. به طوری با قطع تغذیه ماژول نیز ریست نخواهد شد تا اینکه مجددا از طریق مد AT آنها را تغییر دهید. بدین منظور مراحل زیر را دنبال کنید:
- ابتدا ماژول بلوتوث را همانطور که در بخش سیم کشی نمایش داده شدهاست به ماژول آردوینو خود متصل کنید. سپس کد زیر را بر روی آردوینو آپلود نمایید.
- در این مرحله ابتدا تغذیه ماژول بلوتوث خود را قطع کنید.
- سپس کلید ریست ماژول بلوتوث را فشار دهید و آن را نگه دارید.
- درحالیکه کلید ریست ماژول را نگه داشتهاید، تغذیه آن را مجددا وصل کنید. اکنون کلید ریست را رها کنید.
در این حالت ال ای دی روی ماژول بلوتوث با فاصله زمانی بیشتری (هر دو ثانیه یک بار) شروع به چشمک زدن خواهد کرد و به این معناست که ماژول بلوتوث وارد مد AT شدهاست.
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(2, 3); // RX | TX
void setup()
{
Serial.begin(9600);
Serial.println("Enter AT commands:");
BTSerial.begin(38400); // HC-05 default speed in AT command more
}
void loop()
{
if (BTSerial.available()) // read from HC-05 and send to Arduino Serial Monitor
Serial.write(BTSerial.read());
if (Serial.available()) // Keep reading from Arduino Serial Monitor and send to HC-05
BTSerial.write(Serial.read());
}
ارسال دستورات AT Command به ماژول بلوتوث HC-05
اکنون زمان آن است که دستورات AT commands را به ماژول ارسال کنیم. بدین منظور مانیتور سریال را باز کرده و بادریت را بر روی 9600 تنظیم کرده و گزینه Both NL & CR را انتخاب نمایید. در شروع پیغام “Enter AT commands:” را دریافت خواهید کرد. در این هنگام “AT” را تایپ و کلید enter را فشار دهید. چنانچه پاسخ OK را دریافت کردید، به این معناست که ارتباط شما با ماژول با موفقیت برقرار شدهاست. اکنون میتوانید مقادیر پیشفرض ماژول را تغییر دهید. برای مثال میخواهیم نام ماژول بلوتوث را از HC-05 به MY-BT تغییر دهیم. ابتدا بررسی میکنیم که نام فعلی ماژول چیست و در مانیتور سریال دستور زیر را وارد کرده و enter میزنیم. در پاسخ نام فعلی ماژول نمایش داده میشود.
AT + NAME?
+NAME:HC-05
برای تغییر نام ماژول دستور زیر را وارد میکنیم:
AT+NAME=MY-BT
پس از فشردن کلید enter پاسخ OK دریافت میشود و به این معناست که نام ماژول با موفقیت تغییر داده شدهاست.
علاوهبراین ازطریق مد AT Command میتوانید بادریت مد داده را تغییر دهید. توجه داشته باشید که بادریت مد AT Command بهطور پیشفرض 38400 بیتبرثانیه بوده و قابل تغییر نیست. همچنین برای مشاهده بادریت ماژول در مد داده میتوانید از کد دستوری زیر استفاده کنید:
?AT+UART
برای مثال برای تغییربادریت مد داده از 9600 به 115200 با یک بیتstop و بدون بیت parity از دستور زیر استفاده کنید:
AT+UART=115200,0,0
در پایان از شما بسیار سپاسگذاریم که با ما در این پروژه آموزشی جذاب با موضوع راه اندازی ماژول بلوتوث HC05 با آردوینو همراه بودید. شما میتوانید در صورت داشتن هرگونه سوال یا پیشنهادی در این رابطه، آن را با تیم کارشناس روبوایکیو در بخش دیدگاه همین صفحه درمیان بگذارید و در اسرع وقت پاسخ خود را از ما دریافت کنید.