مهندس موفق الکترونیک

اتصال ماژول بلوتوث HC-05 به STM32

اتصال ماژول بلوتوث HC-05 به میکروکنترلر STM32F103C8

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

فرکانس کار تکنولوژی بلوتوث 2.4GHz است و سیگنال‌های آن در حالت عادی تا شعاع حدودا ۱۰ متر برد دارند. بنابراین معمولا در امبدد سیستم‌هایی که برد پوشش‌دهی مورد نیاز برای آنها تا همین اندازه یا کمتر است، می‌توان از بلوتوث برای افزودن امکان ارتباط وایرلس استفاده کرد. مخصوصا که توان مصرفی این ماژول کم و قیمت آن نیز نسبتا پایین است. یکی از کاربردهای متداول این ماژول استفاده از آن در متصل کردن میکروکنترلرها به تلفن‌های هوشمند است.

در این جلسه می‌خواهیم نحوه‌ی اتصال ماژول بلوتوث HC-05 به میکروکنترلر STM32 را در ضمن یک پروژه ساده توضیح دهیم. پروژه‌ای که به این منظور در نظر گرفته‌ایم روشن و خاموش کردن یک LED متصل به میکروکنترلر از طریق گوشی موبایل اندروید است. آموزش اتصال این ماژول به میکروهای دیگری مانند آردوینو، PIC و 8051 نیز موجود است که می‌توانید آنها را نیز مطالعه کنید.

تجهیزات مورد نیاز برای انجام پروژه

  • بورد STM32F103C8
  • ماژول بلوتوث HC-05
  • LED
  • یک گوشی اندروید
  • برد بورد
  • سیم برد بوردی

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

  • Bluetooth Terminal (Android Application)

آشنایی با ماژول HC-05

می‌توان گفت این ماژول پرکاربردترین ماژول بلوتوثی است که در امبدد سیستم‌ها استفاده می‌شود. ولتاژ کاری HC-05 پنج ولت (حداقل ۳.۳ ولت) است و برای اتصال به ماژول‌های دیگر از ارتباط سریال با برد کمتر از ۱۰۰ متر استفاده می‌کند. با استفاده از این ماژول، می‌توانیم دو میکروکنترلر مختلف را به صورت وایرلس و یا مثلا میکرو را به لپ‌تاپ یا گوشی و یا گوشی‌ها و لپ‌تاپ‌ها را به یکدیگر متصل کنیم. به دلیل فراوانی در دسترس بودن سیستم‌عامل‌های اندروید و اپلیکشن‌های موجود بر روی آنها، یکی از جذاب‌ترین پروژه‌ها در دنیای امروز این است که بتوانیم با استفاده از ارتباط بلوتوثی، از طریق گوشی‌های اندروید وسایل و پروژه‌های مختلف را کنترل کنیم.

ارتباط سریال مورد استفاده‌ی ماژول HC-05، پروتکل USART است و هر میکروکنترلری که از این پروتکل پشتیبانی کند، می‌توان به آن متصل کرد.

همچنین این ماژول یک آنتن با تکنولوژی مجتمع (integrated) دارد و تنظیمات MASTER/SLAVE در آن با استفاده از AT commandها قابل دستکاری هستند. این امکان مخصوصا زمانی کارآمد است که بخواهیم مود کاری را روی حالتی تنظیم کنیم که فقط یک دستگاه (MASTER) بتواند به بقیه (SLAVE) داده ارسال کند. (از یک PC به یک یا تعدادی میکروکنترلر) در این حالت MASTER می‌تواند به تمام دستگاه‌های دیگر متصل شود اما هیچ یک از SLAVEها نمی‌توانند به جز ارتباط یک طرفه‌ای که با MASTER دارند، به SLAVEهای دیگر هم متصل شوند.

مطلب پیشنهادی:  UART در میکروکنترلرهای LPC1768

مودهای کاری

عملکرد ماژول بلوتوث HC-05 در دو حالت قابل تنظیم است.

  • AT Command Mode
  • Data Mode

مود پیش‌فرض (در زمان روشن شدن ماژول) Data Mode است و می‌توان از آن برای انتقال داده استفاده کرد. برای آنکه وارد مود AT Command شویم، باید در زمان روشن شدن ماژول، دکمه‌ای که بر روی آن قرار دارد را فشار دهیم تا وارد بخش تغییر تنظیمات MASTER/SLAVE شویم.

پایه‌های ماژول بلوتوث HC-05

  • پین EN یا ENABLE: برای تنظیم اینکه ماژول در کدام مود عملکردی خود کار کند. به صورت پیش‌فرض ماژول روی DATA mode است و اگر در حین روشن شدن ماژول دکمه فشار داده شود وارد AT Command mode می‌شویم.
  • پین 5V+: پین اتصال تغذیه به ماژول.
  • پین GND: پایه‌ی اتصال به زمین ماژول.
  • پین TX: برای اتصال به پین RX میکرو در ارتباط سریال.
  • پین RX: برای اتصال به پین TX میکرو در ارتباط سریال.
  • پین STATE: پایه‌ای برای نشان دادن وضعیت ماژول. (توضیحات در بخش بعد)

اتصال ماژول بلوتوث HC-05 به میکروکنترلر STM32F103C8

نشانگری از طریق LED

  • این ماژول یک LED (قرمز رنگ) دارد که وضعیت ماژول را منعکس می‌کند.
  • زمانی که ماژول به هیچ دستگاه دیگری متصل نیست (NOT CONNECTED یا NOT PAIRED) سیگنال وارد شده به LED به سمت LOW شدن می‌رود و LED شروع به چشمک‌زدن‌های متوالی می‌کند. در این حالت ما متوجه می‌شویم که ماژول به دستگاه دیگری متصل نشده است.
  • اگر ماژول به دستگاه دیگری متصل شود، سیگنال LED به سمت HIGH شدن می‌رود و به این ترتیب فواصل چشمک‌زدن‌های LED طولانی‌تر می‌شود.

پورت‌های USART در میکروکنترلر STM32

پورت‌های مورد استفاده در ارتباط سریال USART در این میکروکنترلر، در عکس زیر نشان داده شده‌اند (پین‌های آبی رنگ) و لیست آنها را در زیر نیز می‌توان مشاهده کرد.

PA9-TX1, PA10- RX1, PA2-TX2, PA3- RX2, PB10-TX3, PB11- RX3

اتصال ماژول بلوتوث HC-05 به میکروکنترلر STM32F103C8

نقشه مدار و اتصالات

مدار اتصال میکروکنترلر STM32 به ماژول بلوتوث HC-05 را در تصویر زیر می‌بینید.

اتصال ماژول بلوتوث HC-05 به میکروکنترلر STM32F103C8

اتصالات میکرو و ماژول بلوتوث

  • پین TX میکروکنترلر (PA9) را به پین RX ماژول بلوتوث وصل می‌کنیم.
  • پین RX میکروکنترلر (PA10) را به پین TX ماژول بلوتوث وصل می‌کنیم.
  • پین‌های VCC و 5V+ میکرو و ماژول را به یکدیگر وصل می‌کنیم.
  • پین‌های GND ماژول و میکرو را نیز به یکدیگر وصل می‌کنیم.

سایر اتصالات مورد نیاز مدار

  • پین PA0 میکرو را با یک مقاومت سری به سر مثبت LED وصل می‌کنیم. (در اینجا از یک LED چند رنگ استفاده کرده‌ایم)
  • پین دیگر LED را به زمین میکرو وصل می‌کنیم.

پروگرم کردن میکروکنترلر STM32

اتصال ماژول بلوتوث به میکروی STM32 بسیار مشابه اتصال آن به آردوینو است و پروگرم کردن STM32 نیز در حالتی که آن را از طریق پورت USB پروگرم کنیم، از طریق Arduino IDE صورت می‌گیرد. 

مطلب پیشنهادی:  پورت های ورودی و خروجی میکروکنترلر LPC1768

بسیار خب، در ابتدای آموزش نیز گفتیم پروژه‌ای که در نظر گرفته‌ایم به این صورت است که یک میکرو STM32 را به ماژول بلوتوث HC-05 مجهز کنیم و سپس با استفاده از یک گوشی اندروید و درگاه بلوتوث آن که یک اپلیکیشن محسوب می‌شود، LED متصل شده به میکروکنترلر را خاموش و روشن کنیم.

نکته مهم: زمانی که کد را بر روی میکرو آپلود می‌کنیم باید اتصالات پین‌های RX و TX آن را جدا کنیم.

و نکته‌ی دیگر اینکه باز هم مانند همیشه کد کامل پروژه را در انتهای مطلب در اختیارتان گذاشته‌ایم و در ادامه بخش‌های مهمی از آن را توضیح خواهیم داد. یک ویدئو از مراحل انجام و اجرای پروژه نیز در همانجا قرار داده شده است که می‌توانید ببینید.

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

  1. در ابتدا باید به دقت نام پین‌ها و شماره و نوع داده‌ی آنها را مشخص کنیم.
const int pinout = PA0;
  1. سپس باید یک متغیر تعریف کنیم که داده‌ی دریافت شده از اندروید را در آن ذخیره کنیم. این داده می‌تواند از نوع char یا integer باشد.
char inputdata = 0;
  1. در تابع ()setup، ارتباط سریال بین ماژول بلوتوث و میکروکنترلر را با بادریت ۹۶۰۰ تعریف می‌کنیم.
Serial1.begin(9600);

علت استفاده از Serial1 این علت است که HC-05 را به TX1 و RX1 وصل کرده‌ایم. اگر از Serial2 یا Serial3 استفاده کنیم این کدها نیز به تبع تغییر خواهند کرد.

  1. یک پیام آغازین به پورت‌های Serial1 (یعنی جایی که ماژول بلوتوث وصل است) ارسال می‌کنیم و ماژول هم داده را به اپلیکیشن Bluetooth Terminal روی اندروید ارسال می‌کند.
Serial1.print("CIRCUIT DIGEST\n");
Serial1.print("BLUETOOTH WITH STM32\n");
  1. سپس پین PA0 را روی مود خروجی تنظیم می‌کنیم. (این پین محل اتصال LED به میکرو بود)
pinMode(pinout, OUTPUT);
  1. در نهایت در بخش تابع حلقه کد زیر را برای خواندن داده و روشن یا خاموش کردن LED بر اساس آن اجرا می‌کنیم.
void loop()
 {
   If (Serial1.available() > 0)    
   {
      inputdata = Serial1.read();      
      if(inputdata == '1')
      {
         digitalWrite(pinout, HIGH);
         Serial1.print("LED ON\n");
      }
       
      else if(inputdata == '0')
      {    
         digitalWrite(pinout, LOW);
         Serial1.print("LED OFF\n");
      }
   }
}

همان‌ طور که می‌بینید، این کد تنها زمانی اجرا می‌شود که روی پورت Serial1 داده‌ای وجود داشته باشد. به همین علت است که از عبارت Serial1.available() > 0 در جمله شرطی استفاده کرده‌ایم. در حالتی که شرط برقرار نباشد، سیستم منتظر می‌ماند تا بالاخره داده‌ای از طرف اندروید ارسال و توسط ماژول بلوتوث دریافت شود و روی پورت Serial1 قرار بگیرد. پس از دریافت داده آن را با استفاده از دستور ()inputdata = Serial1.read در یک متغیر ذخیره می‌کند و بر اساس  آن تصمیم می‌گیرد که LED را روشن یا خاموش کند. برای روشن و خاموش کردن LED هم کافیست که پین PA0 را HIGH یا LOW کنیم که این کار با دستور digitalWrite(pinout,HIGH) و digitalWrite(pinout,LOW) انجام می‌شود.

مطلب پیشنهادی:  وقفه ها در میکروکنترلر LPC1768

اجرای پروژه در چند گام

  1. کد را بر روی میکرو آپلود کنید (با استفاده از Arduino IDE) و تغذیه مدار را تامین کنید. سپس بلوتوث موبایل را روشن کنید. (باز هم یادآوری می‌کنیم که هنگام آپلود شدن کد بر روی میکرو باید پین‌های RX و TX آن را جدا کرده باشید)

اتصال ماژول بلوتوث HC-05 به میکروکنترلر STM32F103C8

  1. در دستگاه‌های موجودی که بلوتوث موبایل پیدا می‌کند، HC-05 را انتخاب کرده و پسورد ۱۲۳۴ را وارد کنید.

اتصال ماژول بلوتوث HC-05 به میکروکنترلر STM32F103C8

  1. پس از جفت شدن دو دستگاه، اپلیکیشن Bluetooth Terminal را باز کنید و connect a device را بزنید و در آنجا HC-05 را مانند تصویر زیر انتخاب کنید.

اتصال ماژول بلوتوث HC-05 به میکروکنترلر STM32F103C8

  1. پس از متصل شدن، در ترمینال ورودی‌های ۱ و ۰ را وارد کنید تا LED روشن و خاموش شود. با هر حالت شما یک پیغام مبنی بر روشن یا خاموش شدن LED هم دریافت خواهید کرد.

اتصال ماژول بلوتوث HC-05 به میکروکنترلر STM32F103C8

کد

//PROGRAM FOR BLUETOOTH INTERFACE WITH STM32F103C8
//CIRCUIT DIGEST
//Pramoth Thangavel

const int pinout = PA0; // declare pinout with int data type and pin value
char inputdata = 0;  //Variable for storing received data

void setup()
{
    Serial1.begin(9600);                      //Sets the baud rate for bluetooth pins 
    Serial1.print("CIRCUIT DIGEST\n");
    Serial1.print("BLUETOOTH WITH STM32\n");                     
    pinMode(pinout, OUTPUT);                  //Sets digital pin PA0 as output pin for led
}

void loop()
{
   if(Serial1.available() > 0)      // Send data only when you receive data:
   {
      inputdata = Serial1.read();        //Read the incoming data & store into data
           
      if(inputdata == '1') 
      {
         digitalWrite(pinout, HIGH); 
         Serial1.print("LED ON\n");
      }
         
      else if(inputdata == '0')  
      {      
         digitalWrite(pinout, LOW);  
         Serial1.print("LED OFF\n");  
      }
   }
}

ویدئو

امیدواریم آموزش «اتصال ماژول بلوتوث HC-05 به STM32» برایتان مفید واقع شده باشد. در ادامه پیشنهاد می‌کنیم دیگر آموزش‌های STM32 را نیز مطالعه کنید. کامنت یادتون نره 🙂

اگر این نوشته‌ برایتان مفید بود لطفا کامنت بنویسید.

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *