Bluetooth Serial Module HC-05

 

 

 

HC05 คืออะไร ?

HC05 เป็นโมดูล Bluetooth ที่ใช้งานในการเชื่อมต่อกับสมาร์ทดีไวซ์ต่างๆ ให้สมาร์ทดีไวซ์สามารถสื่อสารกับไมโครคอนโทรเลอร์ (Arduino AVR PIC etc.) ได้ ผ่าน Serial port โมดูลรุ่น HC05 สามารถตั้งให้ใช้งานเป็นได้ทั้งโหมด Master (ให้อุปกรณ์อื่นมาเชื่อมต่อ) และโหมด Slave (เชื่อมต่อกับอุปกรณ์อื่น) การตั้งค่าต่างๆ เช่น ชื่ออุปกรณ์ รหัสผ่าน ทำได้ผ่าน AT Command ซึ่งจะต้องมีการต่อขาพิเศษเพื่อให้โมดูลเข้าโหมดการตั้งค่า หรือกดปุ่มบนโมดูลค้างไว

 

HC05 กับอุปกรณ์ที่รองรับ

HC05 เป็นโมดูล Bluetooth ที่รองรับกับอุปกรณ์ส่วนใหญ่ในปัจจุบัน (05/08/2558) มีเพียง IPhone ที่ไม่สามารถใช้งานได้ เนื่องจาก IPhone ใช้ Bluetooth เวอร์ชั่น 4.0 ต้องใช้งานโมดูล HM-10 แทน ซึ่งเป็นโมดูล Bluetooth 4.0 จึงจะสามารถนำมาใช้งานกับ IPhone ได้

เริ่มต้นใช้งาน HC05

เริ่มต้นใช้งาน HC05 จะแบ่งออกเป็น 2 ส่วน คือ

1. การต่อวงจรตั้งค่า

โมดูล HC05 ใช้การสื่อสารผ่าน Serial port กรณีที่มีโมดูล USB TTL to UART อยู่แล้ว สามารถนำมาต่อใช้งานเข้ากับโมดูลได้เลย โดยโมดูลใช้แหล่งจ่ายไฟที่ 5V แต่ขา Tx ของโมดูล USB TTL to UART จะต้องมีการต่อวงจรเพื่อดรอปแรงดันลง เนื่องจากโมดูล HC05 ทำงานที่แรงดันไฟฟ้า 3.3V แต่ขา Tx ของโมดูล USB TTL to UART มีแรงดันไฟฟ้าที่ 5V หากนำมาเชื่อมต่อกันโดยตรงอาจทำให้โมดูลพังเสียหายได้

 

 

* การต่อใช้งานแบบ Serial จะต่อแบบไขว้ขา Rx Tx กัน เช่น ขา Rx ของโมดูล USB TTL to UART จะต้องต่อกับขา Tx ของโมดูล HC05

** การทำให้โมดูลอยู่ในโหมดตั้งค่าต้องต่อขา KEY ให้สถานะเป็น HIGH หรือลอจิก 1

*** ใน HC05 บางรุ่นจะไม่มีขา KEY ให้ต่อ ต้องใช้วิธีการกดปุ่มบนโมดูลค้างไว้ แล้วจึงค่อยต่อขา VCC เข้าไปเพื่อจ่ายไฟ ขา EN และขา STATE ปล่อยว่างไว้

กรณีที่มีบอร์ด Arduino อยู่ ก็สามารถนำมาใช้งานได้เช่นกัน โดยต่อวงจรต่อไปนี้

 

และอัพโหลดโค้ดต่อไปนี้ลงไปในบอร์ด

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/*
 Software serial multple serial test

 Receives from the hardware serial, sends to software serial.
 Receives from software serial, sends to hardware serial.

 The circuit:
 * RX is digital pin 10 (connect to TX of other device)
 * TX is digital pin 11 (connect to RX of other device)

 Note:
 Not all pins on the Mega and Mega 2560 support change interrupts,
 so only the following can be used for RX:
 10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69

 Not all pins on the Leonardo support change interrupts,
 so only the following can be used for RX:
 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).

 created back in the mists of time
 modified 25 May 2012
 by Tom Igoe
 based on Mikal Hart's example

 This example code is in the public domain.

 */
#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

void setup()
{
  Serial.begin(38400);
  while (!Serial) ;
  mySerial.begin(38400);
}

void loop()
{
  if (mySerial.available())
    Serial.write(mySerial.read());
  if (Serial.available())
    mySerial.write(Serial.read());
}

 

2. การใช้คำสั่ง AT 

ในบทความนี้เลือกใช้โปรแกรม Aruduino IDE สำหรับส่งคำสั่งผ่าน Serial เปิดโปรแกรม Arduino ขึ้นมา

ในขั้นตอนนี้หากยังไม่เสียบโมดูล USB TTL to UART หรือบอร์ด Arduino ที่ต่อกับ HC05 ได้เลย แล้วเลือกพอร์ตให้ถูกต้อง หากไม่ทราบว่าอุปกรณ์ที่เสียบอยู่พอร์ตใด ให้ไปที่คลิกขวาที่ My Computer (ใน Windows 8.1 ใช้คำว่า This PC) เลือกเมนู Manage ในช่องด้านขวา คลิกที่ Device Manager แล้วหาตรง Com port หากไม่เจอ ลองถอดสาย USB ออกก่อน แล้วเสียบเข้าไปใหม่ หากเจอแล้วให้ดับเบิลคลิกเพื่อดูรายชื่อพอร์ตทั้งหมดที่สามารถเชื่อมต่อได้ หากมีตัวเดียวก็สามารถนำไปตั้งในโปรแกรมได้เลย

 

เมื่อได้ชื่อพอร์ตมาแล้ว ก็ไปเลือกพอร์ตในโปรแกรม Arduino IDE กดเมนู Tool > Port > เลือกพอร์ตที่ถูกต้อง

จากนั้นกดรูปแว่น หรือ Serial Monitor ขึ้นมา

ปรับค่าตามรูป

ลองพิมพ์ AT จากนั้นกด Enter จะขึ้นว่า OK หรือ ERROR แสดงว่าต่อวงจรถูกแล้ว และโมดูลอยู่ในโหมดพร้อมรับคำสั่งตั้งค่าแล้ว

คำสั่งเปลี่ยนชื่ออุปกรณ์ คือคำสั่ง AT+NAME="Device Name" เช่น หากต้องการเปลี่ยนชื่อเป็น IOXhop HC5 ต้องพิมพ์ว่า AT+NAME="IOXhop HC5" แล้วกด Enter หากสำเร็จจะขึ้น OK

เปลี่ยนพาสที่ใช้จับคู่ ใช้คำสั่ง AT+PSWD=New Password เช่น ต้องการตั้งค่าเป็นรหัส 9876 ต้องใช้คำสั่ง AT+PSWD=9876

เมื่อตั้งค่าทุกอย่างเรียบร้อยแล้ว เอาขา KEY ที่ต่อไว้ออก และเอาขา VCC ออก แล้วเสียบขา VCC เข้าไปใหม่ โมดูลจะรีเซ็ต จากนั้นใช้อุปกรณ์อื่นๆค้นหาชื่อที่ได้ตั้งไว้ได้เลย

การทดสอบเชื่อมต่อและส่งข้อมูลไปยังโมดูล HC-05

ในหน้าต่าง Serial Monitor แก้ให้เป็นตามลูกศรชี้

หากใช้โมดูล HC05 ต่อกับ Arduino อยู่ ต้องอัพโหลดโค้ดเข้าไปใหม่

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/*
 Software serial multple serial test

 Receives from the hardware serial, sends to software serial.
 Receives from software serial, sends to hardware serial.

 The circuit:
 * RX is digital pin 10 (connect to TX of other device)
 * TX is digital pin 11 (connect to RX of other device)

 Note:
 Not all pins on the Mega and Mega 2560 support change interrupts,
 so only the following can be used for RX:
 10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69

 Not all pins on the Leonardo support change interrupts,
 so only the following can be used for RX:
 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).

 created back in the mists of time
 modified 25 May 2012
 by Tom Igoe
 based on Mikal Hart's example

 This example code is in the public domain.

 */
#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

void setup()
{
  Serial.begin(9600);
  while (!Serial) ;
  mySerial.begin(9600);
}

void loop()
{
  if (mySerial.available())
    Serial.write(mySerial.read());
  if (Serial.available())
    mySerial.write(Serial.read());
}

ตัวอย่าง ผมใช้โทรศัพท์มือถือซัมซุง แอนดรอยเวอร์ชั่น 4.2.2 เปิดบลูทูธขึ้นมา แล้วกดค้นหา ซักพักหนึ่งก็จะเจอชื่อที่ได้ตั้งค่าไว้

กดชื่อ แล้วพิมพ์รหัสผ่านที่ได้ตั้งไว้

กดปุ่มตกลง หากกรอกพาสถูกจะขึ้นว่าจับคู่แล้ว เป็นอันเสร็จการเชื่อมต่อกับโมดูลบูลทูธ

จากนั้นไปโหลดแอพ Bluetooth Terminal มา แอพนี้จะใช้สำหรับส่งข้อมูลไปให้โมดูล HC05 สามารถโหลดได้ที่ : https://play.google.com/store/apps/details?id=Qwerty.BluetoothTerminal&hl=th

 เปิดแอพขึ้นมา จะพบกับหน้าต่างง่ายๆ หากชื่อในช่องตรงกับชื่อของโมดูล HC05 ที่ได้ตั้งไว้ ก็สามารถกด Connect ได้เลย

 

ลองใส่ข้อความลงไป กด Send

 

กลับมาที่หน้าต่าง Serial Monitor ในโปรแกรม Arduino IDE จะแสดงข้อความที่เราได้พิมพ์ผ่านแอพลงไป เป็นอันจบการทดสอบการทำงาน

การใช้งานโมดูล HC05 ร่วมกับ Arduino

การใช้งานร่วมกับ Arduino จะใช้งานไลบารี่ Software serial ที่ใช้สำหรับรับ-ส่งข้อมูลผ่าน Serial port เหมือนกับ Serial เพียงแต่ Software serial เป็นการทำให้พอร์ตใดก็ได้ของ Arduino สื่อสารกับอุปกรณ์อื่นผ่าน Serial port ได้ โดยไลบารี่ Software serial ทำงานได้ด้วยซอฟแวร์ แต่หากเป็นพอร์ต 0 และพอร์ต 1 ของ Arduino จะเป็นฮาร์แวร์ แบบฮาร์แวร์จะทำงานได้มีประสิทธิภาพสูงกว่าแบบซอฟแวร์ และใช้งาน Baud สูงๆได้ดีกว่า การนำ Software serial มาใช้ จะสามารถทำงานได้ดีกับ Baud ต่ำๆเท่านั้น

ไลบารี่ Software serial สามารถใช้งานกับ HC05 ได้อย่างไม่มีปัญหา เนื่องจากตัวโมดูล HC05 ใช้ Baud เพียงแค่ 9600 สำหรับไลบารี่ตัวนี้แล้วถือว่าสบายมาก

แอพ wBluetooth

แอพฯ wBluetooth เป็นแอพฯที่ทางร้าน IOXhop จัดทำเพื่อให้ง่ายต่อการเรียนรู้ และทดลองใช้งานโมดูล HC05 ร่วมกับ Arduino แอพฯ wBluetooth เป็นเว็บแอพฯที่ใช้ PhoneGap ในการเบิร์นแอพฯ หากสนใจ สามารถดาว์โหลดโค้ดได้ที่ : https://github.com/maxpromer/wbluetooth และทางร้านยังได้อัพโหลดลงใน Google Play อีกด้วย สามารถค้นหาได้โดยใช้ชื่อแอพฯ หรือที่ลิ้ง : https://play.google.com/store/apps/details?id=com.wbluetooth.android

การใช้งานแอพ เมื่อดาว์โหลดแอพฯเรียบร้อยแล้ว ก็เปิดแอพฯขึ้นมาได้เย จากนั้นกดเพื่อเลือกชื่อของอุปกรณ์ให้ตรงกับชื่อของโมดูล HC05 ที่ได้ตั้งค่าไว้ จากนั้นกดรูปปลั๊กแล้วรอซักครู่ แอพจะขึ้นคำว่า Connect OK.

 

เมื่อกดที่รูปหลอดไฟ แอพฯ ก็จะส่งคำว่า 11\n ไปที่โมดูล HC05 ซึ่งสามารถดูได้จาก Serial Monitor ในขั้นตอนทดสอบ จากนั้นหลอดไฟในแอพจะมีสีสันขึ้นมา

หากกดที่หลอดไฟอีกครั้ง แอพฯจะส่งคำว่า 00\n ไปที่โมดูล HC05 และหลอดไฟจะเปลี่ยนเป็นสีเทาตามเดิม

* \n หมายถึงการขึ้นบรรทัดใหม่ หรือการกด Enter นั่นเอง เช่น 00\n หมายถึง ส่งคำว่า 00 แล้วให้ขึ้นบรรทัดใหม่ สาเหตุที่ต้องให้ขึ้นบรรทัดใหม่เพื่อให้ Arduino รับรู้ว่าหากเจอ \n แสดงว่าเป็นจุดสิ้นสุดของการส่งข้อความแล้ว หากไม่มี \n อยู่ การเขียนโปรแกรมให้รับรู้ว่าส่งข้อมูลมาครบหรือยังนั้นทำได้ยาก

ควบคุมหลอดไฟบนบอร์ด Arduino ด้วยแอพฯ wBluetooth บนบอร์ด Arduino มีหลอดไฟ LED ดวงเล็กๆอยู่ที่พอร์ต D13 การนำแอพฯมาควบคุมหลอด LED นั้นทำได้จากการตรวจสอบว่าข้อความที่ส่งมาให้โมดูล HC05 นั้นมีข้อความเป็นอะไร หากข้อความที่ส่งมาเป็น 00\n ก็จะให้หลอด LED ดับ หรือ D13 สถานะ LOW แต่หากข้อความเป็น 11\n จึงจะให้หลอด LED ติด หรือ D13 สถานะ HIGH

จากแนวคิดข้างต้น โค้ดที่อัพโหลดลงในบอร์ด Arduino จะได้เป็น

 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
/* HC05D13LED By IOXhop */
#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

String buf;

void setup()
{
  pinMode(13, OUTPUT);
  mySerial.begin(9600);
}

void loop()
{
  if (mySerial.available()) {
    char c = mySerial.read();
    if (c=='\n') {
      if (buf=="11") {
        digitalWrite(13, HIGH);
      } else if (buf=="00") {
        digitalWrite(13, LOW);
      }
      buf = "";
    } else {
      buf += c;
    }
  }
}

เมื่ออัพโหลดลงบอร์ด Arduino ไปแล้ว ลองกดเชื่อมต่อใหม่ในแอพฯ จากนั้นกดที่หลอดไฟ ก็จะพบว่าสามารถควบคุมหลอดไฟบนบอร์ด Arduino ได้แล้วครับ

 

อ้างอิง

https://www.cybertice.com/article/51/%E0%B8%AA%E0%B8%AD%E0%B8%99%E0%B9%83%E0%B8%8A%E0%B9%89%E0%B8%87%E0%B8%B2%E0%B8%99-bluetooth-module-hc05

 

ความคิดเห็น