اتصال ماژول بلوتوث به ماژول وای‌فای ESP8266 (کنترل چراغ چشمک زن)

الکترونیک و رباتیک -> ماژول ها و سنسور ها 2371 4 کاربر آکادمی پارتینه

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

در این آموزش نحوه‌ی برقراری ارتباط ماژول بلوتوث HC-05  با یکی از محبوب‌ترین ماژول‌های Wi-Fi به نام NodeMcu ESP8266 مورد بررسی قرار خواهد گرفت و در نهایت با ارسال دستورات از طریق بلوتوث ، یک LED به صورت بی‌سیم کنترل می‌شود. این LED را می توان با یک رله و یا هر قطعه دیگری جایگزین کرد.

مواد اولیه :
# عنوان تعداد لینک
0 • ماژول توسعه وای فای NodeMcu ESP8266 1 لینک خرید
1 • ماژول بلوتوث HC-05 1 لینک خرید
2 • سیم جامپر 1 لینک خرید

مرحله 1 : معرفی ماژول بلوتوث HC-05

HC-05 با پشتیبانی از پروتکل SPP برای ارتباط بیسیم سریال در برد کوتاه طراحی شده است. در واقع برای تبدیل سریال به بلوتوث مورد استفاده قرار می‌گیرد. اطلاعات مختلف در این ماژول مانند تغییر نام، تغییر بادریت، تغییر پسورد pair و... از طریق ارسال ATcommand نیز قابل تغییر است. 

ماژول بلوتوث 05-HC می تواند در هر دو مد Master و Slave قرار گیرد. تفاوت این دو مد به این صورت است که ماژولی که در حالت Master باشد، می‌تواند دستگاه‌های بلوتوث اطراف را جستجو کرده و با دستگاهی خاص ایجاد ارتباط کند، اما ماژولی که در حالت Slave باشد فقط می‌تواند مورد جستجو قرار گرفته و به درخواست‌های ارتباط پاسخ منفی یا مثبت بدهد. یعنی ماژول وقتی در مد Slave قرار دارد، قادر نیست دستگاه‌های اطراف را جستجو کرده و درخواست دهنده و برقرار کننده‌ی ارتباط باشد. تعیین کردن مد کاری توسط کاربر صورت می‌گیرد که در این پروژه به عنوان Slave مورد استفاده قرار گرفته است. لازم به ذکر است که به طور پیشفرض نیز بر روی حالت Slave قرار دارد. 

ویژگی های ماژول HC-05 شامل:

·         حساسیت : dBm80

·         نرخ انتقال داده به صورت پیش‌فرض: 9600bps 

·         پین های Vcc و Gnd برای تغذیه و پین های Tx و Rx برای برقراری ارتباط با میکروکنترلر استفاده می‌شوند.

·         پین Enable را برای فعال کردن ماژول HC-05 ( در حالت low بودن ماژول غیر فعال است.)

·         پین state نشانگر وضعیت ماژول است. زمانیکه که ماژول به هیچ دستگاه دیگری وصل نشده LED به طور مداوم چشمک می‌زند. هنگام pair شدن با سایردستگاه ها LED با تاخیر ثانیه‌ای 2 ثانیه چشمک می‌زند. 

نحوه ی عملکرد کلی ماژول بلوتوث 05-HC
هنگامی که ماژول روشن شود (پایه‌های GND و VCC آن به طور مناسب به تغذیه وصل شوند)، ماژول در مد Pairing قرار گرفته و در حالت Slave قرار دارد. ماژول منتظر می‌شود تا دستگاهی درخواست برقراری ارتباط کند، پس از آن با دستگاه جفت می‌شود. ماژول اطلاعاتی را که با استفاده از ارتباط بلوتوث می‌گیرد از طریق پایه‌ی TXD خود، با پروتکل سریال ارسال می‌کند. به طور برعکس برای این که اطلاعاتی به ماژول داده شوند باید از طریق پایه‌ی RXD آن، اطلاعات با پروتکل سریال به ماژول داده شده تا ماژول با ارتباط بلوتوث آن اطلاعات را به دستگاه متصل شده ارسال کند. و به همین ترتیب می‌توان از این ماژول استفاده و اطلاعات مورد نظر را ارسال و دریافت کرد.

 

 

مرحله 2 : اتصالات و دیاگرام مداری

در دیاگرامی که مشاهده می‌کنید، نحوه‌ی اتصال ماژول بلوتوث HC-05 با NodeMCU ESP8266 نشان داده شده است.

مرحله 3 : استفاده از برنامه اندروید Bluetooth Serial Port Terminal

توسط این اپلیکشین می‌توان به ماژول بلوتوث متصل شد و از طریق بلوتوث یک ارتباط سریال مجازی برقرار کرد. نصب و استفاده از این برنامه بسیار آسان بوده و کافیست مراحل زیر را دنبال کنید. HC-05 را با تلفن همراه هوشمند خود pair کنید. کد  ارتباطی (پسورد) به صورت پیش فرض 0000 یا 1234 است .

 اپلیکیشن را دانلود و نصب کنید. برای یافتن ماژول HC-05 وارد منوی  device شوید. در قسمت جستجو،  ماژول HC-05 را پیدا کنید . در صورت یافت نشدن درستی اتصال تغذیه ماژول را بررسی کنید.

با کلیک بر HC-05 ماژول متصل می‌شود. سپس یک پیام را در قسمت message box تایپ کرده و ارسال کنید. این پیام در سریال مانیتور آردوینو نمایش داده می شود.

مرحله 4 : کدنویسی و تنظیمات نرم‌افزاری

برای کد نویسی NodeMCU ESP8266 با استفاده از کامپایلر آردوینو IDE ، کافیست آن را از طریق کابل MicroUSB به لپ‌تاپ متصل کرده و آردوینو را باز کنید. در این آموزش از سریال سخت افزاری و سریال نرم‌افزاری آردوینو (Software Serial) استفاده شده است. از سریال سخت‌افزاری آردوینو برای ارتباط با خود آردوینو، خواندن و نوشتن داده‌ها در سریال مانیتور و از سریال نرم‌افزاری آردوینو برای ارتباط با ماژول HC-05 استفاده می‌شود. کد کامل پروژه و ویدیو آن در پایان آموزش قرارداده شده است.

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

#include <SoftwareSerial.h>

پینهای  RX و TX را برای ارتباط سریال نرم افزاری و پین LED را برای ارتباط با NodeMCU تعریف کنید. در اینجا از LED داخلی NodeMCU در پین  D4 استفاده شده است.

SoftwareSerial btSerial(D2, D3); // RX,
int led = D4; 

نرخ ارسال داده سریال (baud rate) را 9600 تعریف کنید. پین D4 را به عنوان خروجی تعریف کرده و پیامی را به منظور نشان‌دادن ارتباط چاپ کنید.

Serial.begin(9600);
btSerial.begin(9600);
pinMode(D4, OUTPUT);
Serial.println("Started...");

در مرحله اول ماژول بلوتوث را خوانده و برنامه‌ای را تعریف کنید که اگر ماژول بلوتوث کاراکتر " B "  را از طریق تلفن دریافت کند LED متصل شده به پین D4 چشمک بزند. سپس در صورت دریافت "S "چشمک زدن LED متوقف می‌شود. در اینجا به جای استفاده از دستور  ()delay از millis به منظور جلوگیری از ایجاد توقف در روند اجرای برنامه استفاده شده است.

if (btSerial.available() > 0) {
    char data = btSerial.read();
    switch (data)
    {
      case 'B':
        ledB = "blink";
        break;
      case 'S':
        ledB = "stop";
        break;
      default:
        break;
    }
  }
 




  if (ledB == "blink") {
    Serial.println("blinking started");
    if (currentMillis - previousMillis >= interval) {
      previousMillis = currentMillis;
      if (ledState == LOW) {
        ledState = HIGH;
      } else {
        ledState = LOW;
      }
      digitalWrite(led, ledState);
    }
  }

در تابع millis میزان  تأخیر 500 میلی‌ثانیه تنظیم شده است. به عبارت دیگر LED هر 500 میلی ثانیه چشمک می‌زند. همچنین می‌توانید با تغییر مقدار "interval" ،میزان تأخیر را تنظیم کنید.

  if (ledB == "blink") {
    Serial.println("blinking started");
    if (currentMillis - previousMillis >= interval) {
      previousMillis = currentMillis;
      if (ledState == LOW) {
        ledState = HIGH;
      } else {
        ledState = LOW;
      }
      digitalWrite(led, ledState);
    }
  }

در اینجا برنامه نویسی  NodeMCU برای چشمک زدن  LED به صورت بی‌سیم و با استفاده از بلوتوث به تکمیل می‌شود. می‌توانید با جایگزین کردن رله‌ به جای  LED برای راه‌اندازی سایر دستگا‌ه‌ها استفاده کرد.

 

کد کامل برنامه:

/* HC-05 interfacing with NodeMCU ESP8266
    Author: Partineh(partineh.com)
*/
#include <SoftwareSerial.h>

SoftwareSerial btSerial(D2, D3); // Rx,Tx
int led = D4;   // led also the internal led of NodemCU
int ledState = LOW;   // led state to toggle
String ledB = "";

unsigned long previousMillis = 0;  // millis instaed of delay
const long interval = 500;  // blink after ecery 500ms

void setup() {
  delay(1000);
  Serial.begin(9600);     
  btSerial.begin(9600);     // bluetooth module baudrate 
  pinMode(D4, OUTPUT);
  Serial.println("Started...");
}

void loop() {

  if (btSerial.available() > 0) {    // check if bluetooth module sends some data to esp8266
    char data = btSerial.read();  // read the data from HC-05
    switch (data)
    {
      case 'B':         // if receive data is 'B'
        ledB = "blink";   // write the string
        break;
      case 'S':              // if receive data is 'S'
        ledB = "stop";
        break;
      default:
        break;
    }
  }
  unsigned long currentMillis = millis();
  if (ledB == "blink") {          // if received data is 'B' the start blinking 
    Serial.println("blinking started");
    if (currentMillis - previousMillis >= interval) {
      previousMillis = currentMillis;
      if (ledState == LOW) {
        ledState = HIGH;
      } else {
        ledState = LOW;
      }
      digitalWrite(led, ledState);
    }
  }
}