راهنمای مبتدیان برای راه اندازی ماژول بلوتوث HC05 با آردوینو

فهرست مطالب

مقدمه

در این آموزش قصد داریم نحوه برقراری ارتباط و ارسال دیتا از طریق بلوتوث با کمک ماژول HC05 و بورد آردوینو را به شما نشان دهیم.

آنچه در این آموزش یاد می گیرید

معرفی ارتباط و پروتکل بلوتوث

روش های مختلفی برای برقراری ارتباط بیسیم وجود دارد مانند ارتباط از طریق پروتکل های Wi-Fi، ZigBee، NRF و بلوتوث.

ارتباط بلوتوث یک ارتباط ارزان قیمت در شبکه PAN با نرخ ارسال اطلاعات حداکثر 1Mb/s،  با برد نامی تا 100 متر در فرکانس 2.4 گیگ یک روش مناسب و رایج در برقراری ارتباط بیسیم است.

ماژول HC05 یک ماژول بلوتوث با ارتباط سریال است که بصورت معمول در پروژه های الکترونیکی استفاده می شود.

مهمترین مشخصات ماژول HC05 عبارتند از:

  • ولتاژ کاری 3.6 تا 5 ولت
  • دارای آنتن داخلی
  • دارای قابلیت اتصال خودکار به آخرین دستگاه

جهت دریافت دیتاشیت ماژول بلوتوث به سریال HC05 اینجا کلیک کنید.

معرفی پایه ها (Pinout) ماژول بلوتوث HC05​

ماژول بلوتوث HC05 دارای 6 پایه به شرح زیر است:

  • VIN: تغذیه ماژول – 6-3.6 ولت
  • GND: زمین
  • STATE: تعیین وضعیت اتصال
  • EN: تنظیم جهت ورود به تنظیمات AT Command
  • RX: دریافت اطلاعات از طریق پروتکل سریال
  • TX: ارسال اطلاعات از طریق پروتکل سریال

لوازمی که به آن احتیاج دارید

قطعات مورد نیاز

آردوینو UNO R3 × 1
ماژول بلوتوث HC-5 × 1
سیم جامپر نری به مادگی × 1

نرم افزارهای مورد نیاز

آردوینو IDE

ارسال داده به آردوینو از طریق بلوتوث

ولتاژ تغذیه این ماژول 5 ولت است ولی سطح منطقی پایه های ارتباط سریال آن 3.3 ولت می باشد اما به دلیل وجود رگولاتور در برد ماژول HC05، می‌توانید پایه های آن را مستقیما به آردوینو متصل کنید.

راه‌اندازی ابتدایی ماژول بلوتوث HC05 با آردوینو

گام اول: سیم بندی

مطابق مدار زیر، ماژول را به آردوینو وصل کنید.

گام دوم: نصب کتابخانه

کتابخانه زیر را بر آردوینوی خود نصب کنید. 

https://github.com/PaulStoffregen/SoftwareSerial

گام سوم: کد

 /*
  Modified on March 09, 2021
  Modified by MohammedDamirchi from https://github.com/PaulStoffregen/SoftwareSerial
  
Home
*/ #include <SoftwareSerial.h> SoftwareSerial mySerial(10, 11); // RX, TX void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } // set the data rate for the SoftwareSerial port mySerial.begin(9600); } void loop() { // run over and over if (mySerial.available()) { Serial.write(mySerial.read()); } if (Serial.available()) { mySerial.write(Serial.read()); } }

این کد جهت تست ارتباط مابین سریال مانیتور آردوینو و دستگاهی که به ماژول بلوتوث متصل شده است، می‌باشد.

کنترل یک LED از طریق بلوتوث گوشی اندروید

سیم بندی

کد

برای برقرای ارتباط با ماژول HC05 از طریق بلوتوث نیاز به یک اپلیکشن ترمینال بلوتوث برای تلفن همراه خود دارید. برای این کار می توانید از این برنامه استفاده کنید.

حال برای برقرای ارتباط کد زیر را روی آردوینو خود آپلود کنید و به از طریق ترمینال بلوتوث به ماژول HC05 متصل شوید، بصورت پیشفرض نام ارتباط HC05 و رمز آن 1234 یا 0000 و نرخ بادریت برای ارتباط 9600 می باشد.

/*   
HC05 - Bluetooth AT-Command mode  
modified on 10 Feb 2019 
by Saeed Hosseini 
https://electropeak.com/learnfarsi/ 
*/ 
#include <SoftwareSerial.h>
SoftwareSerial MyBlue(10, 11); // RX | TX 
String flag; 
int LED = 8; 
void setup() 
{   
  Serial.begin(9600); 
  MyBlue.begin(9600); 
  pinMode(LED, OUTPUT); 
  Serial.println("Ready to connect\nDefualt password is 1234 or 000"); 
} 
void loop() 
{ 
  if (MyBlue.available()) 
    flag = MyBlue.read();
    flag.trim();
  if (flag == '1') 
  { 
    digitalWrite(LED, HIGH); 
    Serial.println("LED On"); 
  } 
  else if (flag == '0') 
  { 
    digitalWrite(LED, HIGH); 
    Serial.println("LED Off"); 
  } 
}

بگذارید به کد با دقت بیشتری نگاه کنیم:

#include <SoftwareSerial.h>

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

SoftwareSerial MyBlue(10, 11);

تعریف سریال نرم افزاری، پایه 10 RX و پایه 11 TX

MyBlue.begin(9600);

پیکربندی سریال نرم افزاری با بادریت 9600

void loop() 
{ 
  if (MyBlue.available()) 
    flag = MyBlue.read();
    flag.trim();
  if (flag == '1') 
  { 
    digitalWrite(LED, HIGH); 
    Serial.println("LED On"); 
  } 
  else if (flag == '0') 
  { 
    digitalWrite(LED, HIGH); 
    Serial.println("LED Off"); 
  } 
}
خواندن مقدار سریال و روشن و خاموش کردن LED با توجه به مقدار آن.

ارسال AT-Command به ماژول HC05

با فشردن و نگه داشتن کلید، ماژول به مد AT-Command می رود و در غیر این صورت در مد ارتباط کار می کند. برخی از ماژول ها روی خود کلید فشاری دارند که در اینصورت نیازی به اضافه کردن کلید نخواهید داشت.

برای ورود به مد AT-Command نرخ بادریت پیشفرض 38400 می باشد.

حال کد زیر را برروی بورد خود آپلود کرده و از طریق Serial Monitor دستورات لازم را به ماژول خود بدهید.

/* 
HC05 - Bluetooth AT-Command mode 
modified on 10 Feb 2019 
by Saeed Hosseini 
https://electropeak.com/learnfarsi/guides
*/ 
#include "SoftwareSerial.h"
SoftwareSerial MyBlue(10, 11); // RX | TX 
void setup() 
{ 
  Serial.begin(9600); 
  MyBlue.begin(38400);  //Baud Rate for AT-command Mode.  
  Serial.println("***AT commands mode***"); 
} 
void loop() 
{ 
  //from bluetooth to Terminal. 
  if (MyBlue.available()) 
    Serial.write(MyBlue.read()); 
  //from termial to bluetooth 
  if (Serial.available()) 
    MyBlue.write(Serial.read());
}
با ارسال فرامین به ماژول پاسخ را دریافت می کنید.
Command Response Description
AT OK Just test
AT+RESET OK Reset module
AT+VERSION? +VERSION: OK Firmware version of module
AT+ORGL OK Restore to default
AT+ADDR? +ADDR: OK Module address
AT+NAME? +NAME: OK Module name
AT+NAME=your name\r\n OK Change module name
AT+RNAME?param1\r\n +NAME: OK Bluetooth device name
AT+ROLE? +ROLE: Module role(0 is slave & 1 is master)
AT+ROLE=(0 as slave,1 as master)\n\r OK Change module role
AT+PSWD? PSWD: OK Module password
AT+PSWD=your pass\r\n OK Change module password
AT+UART? P3: Parity +UART= OK P1: Baud rate P2: Stop bit P3: Parity

برای مشاهده دستورات بیشتر به دیتاشیت HC05 مراجعه کنید.

ماژول بلوتوث HC05 بخرید

آموزش های مشابه

Comments (24)

  • دانیال بهبودی Reply

    با عرض سلام وخسته نباشید بنده این برنامه رو در اردویینو upload کردمولی کار نمیکنه اون برنامه ای رو که شما گفته بودید رو هم نصب کردم ولی نشد
    میخواستم که کیمکی بکیند تا بتونم این رو راه اندازی بکنم

    می 31, 2020 at 10:06 ق.ظ
    • Mohammad Damirchi Reply

      از روش AT-Command کد مربوطه را آپلود کنید و سریال مانیتور خود را در فرکانس بادریت را در 9600 قرار بدهید سپس دستور at را بفرستید در صورتی که جواب ok را دریافت نکردید سیم های rx , tx را از یک سمت عوض کرده و سپس تلاش کنید.
      درصوتی که چیزی دریافت نکردید به احتمال زیاد ماژول شما مشکل دارد.

      آگوست 1, 2020 at 8:49 ق.ظ
  • parsa Reply

    سلام اقا/خانوم ادمین
    امکان داره بگویید چگونه و با چه کدی می توانیم به کمک اردینو ماژول را از حالت slave به حالت master تغییر دهیم
    پیشاپیش کمال تشکر را از شما دارم

    جولای 29, 2020 at 8:47 ب.ظ
  • امیرحسین آقاجانی Reply

    سلام، ممنون از سایت خوبتون.
    آیا امکانش هست اسم default رو عوض کنیم؟

    آگوست 5, 2020 at 9:12 ق.ظ
    • محمدرضا اکبری Reply

      باسلام. بله، امکان پذیر است.

      اکتبر 24, 2020 at 11:34 ق.ظ
  • Alireza Reply

    با سلام
    من این کد رو روی آردوینو آپلود کردم اما led خاموش و روشن نشد.
    سیم بندی رو چک کردم اما مشکلی نداشت.
    بعد رفتم تو برنامه نویشه و بجای (if (flog == 1 وو ..
    نوشتم if (flog == ‘1’) { m و به این شکل به درستی کار کرد.
    مشکلش این بود که مقداری عددی که ماژول بلوتوث دریافت میکنه عدد نیست بلکه یک کاراکتر هست و باید در ‘1’ قرار بگیره!
    خب سوالم اینه که من میخوام زاویه سروو موتور رو با بلوتوث و گوشی کنترل کنم اما بخاطر اینکه اون مقدار فقط یه کاراکتر هست و یک عدد نیست نمیدونم چیکار کنم که بجای یک کاراکتر یک عدد دریافت کنم و یا کاراکتر رو به عدد تبدیل کنم؟
    میشه یک برنامه به من بگید که کاراکتر رو به عدد تبدیل کنم.
    با تشکر

    آگوست 31, 2020 at 12:08 ق.ظ
    • ARDHY Reply

      سلام دوست عزیز
      اعداد و حروفی که پورت سریال میفرسته به بلوتوث بصورت کدهای اسکی هستند…با نگاه به جدول کدهای اسکی مشکلتون حل میشه…برای تبدیل کدهای اسکی عداد ۰ تا ۹ به عدد دسیمال باید کارکتر دریافت شده را متهای ۴۸ کنید تا به عدد دسیمال برسید و در برنامه اتون از اون عدد استفاده کنید

      اکتبر 22, 2020 at 1:01 ق.ظ
  • Hamed Reply

    سلام، مقاومت هایی که توی مسیر RX گذاشتید چه مقداری هست؟

    ژانویه 2, 2021 at 1:17 ب.ظ
    • مهران ملکی Reply

      سلام.
      از دو مقاومت هم اندازه بین 1کیلو تا 10کیلواهم می تونید استفاده کنید.

      ژانویه 3, 2021 at 9:25 ق.ظ
  • علیرضا Reply

    سلام ، یه ماشین ساختم که با این ماژول کنترل میشه ، فقط نمیدونم چرا هر چن ثانیه یه بار تاخیر ایجاد میشه ، در واقع وقتی که گزینه حرکت رو میزنم بعد چن ثانیه میره ، و با اینکه دستم رو از جهت های حرکت برداشتم ولی بازم به حرکت ادامه میده ، تو کد هیچ delay وجود نداره ،مشکل از کجاست

    آوریل 4, 2021 at 11:22 ب.ظ
    • مهران ملکی Reply

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

      آوریل 5, 2021 at 12:21 ب.ظ
  • MOJI Reply

    با سلام
    رباتی ساختم اما بلوتوث بعد از متصل شدن به موبایل و تست کردن سریع قطع میشه برای روشن کردنLED مشکلی نداره فقط برای حرکت موتورهای ربات با یک دستور حرکت ارتباط قطع میشه

    سپتامبر 6, 2021 at 5:20 ب.ظ
    • مهران ملکی Reply

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

      سپتامبر 7, 2021 at 10:14 ق.ظ
  • محمد Reply

    سلام
    بنده نمیتونم برنامه را نصب کنم
    زمانی که کلیک می کنم برنامه را نمی آورد
    میشه اسم برنامه را بفرمایید؟

    مارس 19, 2022 at 7:44 ب.ظ
    • مهران ملکی Reply

      سلام
      اسم برنامه Bluetooth Terminal هست. از همین لینک گوگل پلی https://play.google.com/store/apps/details?id=Qwerty.BluetoothTerminal&hl=en میتونید اون رو دریافت کنید. در صورتی هم که به هر دلیلی از گوگل پلی نمیتونید اون رو دانلود و نصب کنید از طریق سرچ در گوگل میتونید این برنامه رو به سادگی پیدا کنید.

      مارس 19, 2022 at 11:08 ب.ظ
  • محمد Reply

    سلام وقتتون بخیر
    چطور میتونم رمز ماژولی ک فراموش شده را ریست یا بازیابی کنم؟
    ممنون میشم راهنمایی کنید

    سپتامبر 5, 2022 at 3:09 ب.ظ
  • ali Reply

    سلام
    من این پروژه رو انجام دادم ولی وقتی اردوینو رو به تغذیه وصل می کنم بلوتوث قطع میشه
    چکار باید بکنم؟

    دسامبر 15, 2022 at 7:46 ب.ظ
    • علی عبدالملکی Reply

      سلام
      متوجه منظورتون نشدم ، یعنی با وجود برق در مدار، قطع میشه؟
      یعنی قبل از این روشن بوده؟!!!

      فوریه 21, 2023 at 5:27 ب.ظ
  • مهدی Reply

    سلام دوست عزیز من هم دقیقا مشکل علیرضا رو دارم برای اینکه بفهم مشکل از کجاست یک LED و یک مقاومت ۱۵۰ اهم رو روی rx و tx قرار دادم دیدم هر چند ثانیه یک بار چشمک میزنه و در اون زمان ربات تحت کنترل است وقتی چشمک نمی زنه دیگه توی اون چند ثانیه تحت کنترل نیست تا چند ثانیه بعد که دوباره شروع به چشمک زدن و تبادل دیتا کنه ممنون میشم راهنمایی کنید که چرا ارتباط دائم نیست و پریودیک و چند ثانیه یک بار برقرار و قطع میشود اینم از کد
    #include

    AF_DCMotor motor1(1, MOTOR12_1KHZ);
    AF_DCMotor motor2(2, MOTOR12_1KHZ);
    AF_DCMotor motor3(3, MOTOR34_1KHZ);
    AF_DCMotor motor4(4, MOTOR34_1KHZ);

    char command;

    void setup()
    {
    Serial.begin(9600);
    }

    void loop(){
    if(Serial.available() > 0){
    command = Serial.read();
    Stop();
    switch(command){
    case ‘F’:
    forward();
    break;
    case ‘B’:
    back();
    break;
    case ‘L’:
    left();
    break;
    case ‘R’:
    right();
    break;
    }
    }
    }

    void forward()
    {
    motor1.setSpeed(255);
    motor1.run(FORWARD);
    motor2.setSpeed(255);
    motor2.run(FORWARD);
    motor3.setSpeed(255);
    motor3.run(FORWARD);
    motor4.setSpeed(255);
    motor4.run(FORWARD);
    }

    void back()
    {
    motor1.setSpeed(255);
    motor1.run(BACKWARD);
    motor2.setSpeed(255);
    motor2.run(BACKWARD);
    motor3.setSpeed(255);
    motor3.run(BACKWARD);
    motor4.setSpeed(255);
    motor4.run(BACKWARD);
    }

    void left()
    {
    motor1.setSpeed(255);
    motor1.run(BACKWARD);
    motor2.setSpeed(255);
    motor2.run(BACKWARD);
    motor3.setSpeed(255);
    motor3.run(FORWARD);
    motor4.setSpeed(255);
    motor4.run(FORWARD);
    }

    void right()
    {
    motor1.setSpeed(255);
    motor1.run(FORWARD);
    motor2.setSpeed(255);
    motor2.run(FORWARD);
    motor3.setSpeed(255);
    motor3.run(BACKWARD);
    motor4.setSpeed(255);
    motor4.run(BACKWARD);
    }

    void Stop()
    {
    motor1.setSpeed(0);
    motor1.run(RELEASE);
    motor2.setSpeed(0);
    motor2.run(RELEASE);
    motor3.setSpeed(0);
    motor3.run(RELEASE);
    motor4.setSpeed(0);
    motor4.run(RELEASE);
    }

    فوریه 21, 2023 at 7:54 ب.ظ
    • علی عبدالملکی Reply

      سلام
      نمیشه گفت دقیقا مشکل از کجا میتونه باشه اما چند راه رو میتونید تست کنید
      اول اینکه switch case رو از زیر شرط serial.available خارج کنید و در لوپ قرار بدید
      مسئله دوم اینکه حتما چک کنید که سطح ولتاژ مدارتون استیبل باشه و افت نکنه خصوصا در موقع راه اندازی موتورها
      سوالی هم میتونه اینجا مطرح بشه اینکه مدارتون ریست هم میشه؟
      یا فقط ارتباط بلوتوث رو از دست میدید؟
      در ضمن میتونید یه تست دیگه هم انجام بدید اینکه جدای از راه اندازی موتورهای شروع کنید به ارسال و دریافت اطلاعات توسط بلوتوث با یک ثابت زمانی مشخص و این زمان و رفته رفته کم کنید که سرعت تبادل بیشتر بشه و باز بررسی کنید که آیا بولوتوث ارتباطش قطع میشه یا خیر؟
      متشکرم

      فوریه 27, 2023 at 2:43 ب.ظ
  • mm Reply

    سلام، به چه نحو می توان همزمان ماژول بلوتوث و wifi رو راه اندازی کرد؟

    ژوئن 17, 2023 at 11:30 ب.ظ
    • محمد دمیرچی Reply

      با سلام
      جناب بر روی HC05
      WiFi نداریم
      شما فقط میتوانید از بلوتوث آن استفاده کنید که آن هم از طریق سریال امکان پذیر می باشد.
      برای استفاده همزمان این 2 میتوانید از میکروکنترلر ESP32 استفاده کنید و نیازی به ماژول جانبی و آردوینو نیست و خودش هر دو را دارد و با کد های دستوری فعال می شوند.

      ژوئن 18, 2023 at 10:00 ق.ظ
  • امین Reply

    با سلام. من دستورات AT Command رو روی اردوینو راه اندازی کردم ولی فقط روی دستور AT جواب OK میداد و برای هیچ کدوم دیگه ی دستور ها جواب نمیداد میگید چه کنم؟

    آگوست 8, 2023 at 9:26 ب.ظ
    • محمد دمیرچی Reply

      با سلام
      از نرم افزار زیر برای تنظیم کردن ماژول بلوتوث خود استفاده کنید.
      همچنین به نسخه کپی و اورجینال بودن HC05 توجه کنید مقداری متفاوت می باشند
      نرم افزار تنظیم ماژول های بلوتوث

      آگوست 9, 2023 at 9:21 ق.ظ

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

نشانی ایمیل شما منتشر نخواهد شد.