Arduino Bluetooth

Trong bài hướng dẫn này, chúng ta sẽ học:

Arduino Bluetooth

Phạm vi của hướng dẫn này:

Hướng dẫn này nói về việc sử dụng Bluetooth cổ điển (Bluetooth 2.0). Nếu bạn đang tìm kiếm Bluetooth Low Energy - BLE (Bluetooth 4.0), hãy xem hướng dẫn tương tự này: Arduino - BLE

Phần cứng cần chuẩn bị

1×Arduino Uno R3
1×USB 2.0 cable type A/B (for USB-A PC)
1×USB 2.0 cable type C/B (for USB-C PC)
1×HC-05 Bluetooth Module
1×dây jumper
1×(Khuyến nghị) Screw Terminal Block Shield for Arduino Uno
1×(Khuyến nghị) Breadboard Shield for Arduino Uno
1×(Khuyến nghị) Enclosure for Arduino Uno
1×(Khuyến nghị) Prototyping Base Plate & Breadboard Kit for Arduino UNO

Or you can buy the following kits:

1×DIYables STEM V3 Starter Kit (Arduino included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Giới thiệu về mô-đun Bluetooth HC-05

HC-05 là một mô-đun Bluetooth nối tiếp. Nó hoạt động như một bộ chuyển đổi Serial sang Bluetooth. Nó thực hiện:

  • Nhận dữ liệu từ chân Serial RX và truyền dữ liệu đó tới thiết bị được ghép nối (chẳng hạn như điện thoại thông minh) qua Bluetooth
  • Nhận dữ liệu từ Bluetooth (từ thiết bị được ghép nối) và gửi dữ liệu đó đến chân Serial TX

Cụ thể hơn, trong bối cảnh Arduino giao tiếp với ứng dụng trên điện thoại thông minh (Android/iOS):

  • Arduino kết nối với mô-đun Bluetooth HC-05 thông qua các chân Serial/SoftwareSerial
  • Mô-đun Bluetooth HC-05 được ghép nối với một ứng dụng trên điện thoại thông minh
  • Arduino gửi dữ liệu đến ứng dụng trên điện thoại chỉ bằng cách gửi dữ liệu qua Serial/SoftwareSerial
  • Arduino nhận dữ liệu từ ứng dụng trên điện thoại chỉ bằng cách đọc dữ liệu từ Serial/SoftwareSerial
  • Không cần mã Bluetooth đặc biệt nào trên Arduino

Sơ đồ chân

sơ đồ chân Bluetooth

Mô-đun Bluetooth HC-05 có 6 chân:

  • Chân Enable/Key được dùng để chuyển giữa Chế độ dữ liệu (đặt ở mức LOW) và Chế độ lệnh (đặt ở mức HIGH). Nếu không được kết nối, nó sẽ ở chế độ dữ liệu mặc định
  • Chân VCC: Chân cấp nguồn, kết nối chân này với +5V của nguồn cấp
  • Chân GND: Chân cấp nguồn, kết nối chân này với GND của nguồn cấp
  • Chân TX: Chân dữ liệu nối serial, kết nối chân này với chân RX của Arduino. Dữ liệu nhận được qua Bluetooth sẽ được gửi tới chân này dưới dạng dữ liệu serial.
  • Chân RX: Chân dữ liệu nối serial, kết nối chân này với chân TX của Arduino. Dữ liệu nhận được từ chân này sẽ được gửi đến Bluetooth
  • Chân trạng thái: Chân này được kết nối với đèn LED trên bo mạch, có thể dùng làm phản hồi để kiểm tra Bluetooth có hoạt động đúng hay không.

Tuy nhiên, đối với các chức năng cơ bản, chúng ta chỉ cần sử dụng 4 chân của module Bluetooth HC-05 để kết nối với Arduino.

Mô-đun Bluetooth HC-05 cũng có hai thành phần tích hợp sẵn:

  • Một đèn LED: cho biết trạng thái của mô-đun
    • Nhấp nháy một lần mỗi 2 giây: Mô-đun đã vào Chế độ Lệnh
    • Nhấp nháy liên tục: Đang chờ kết nối trong Chế độ Dữ liệu
    • Nhấp nháy hai lần mỗi giây: Kết nối thành công trong Chế độ Dữ liệu
  • Nút: có thể được dùng để điều khiển chân Key/Enable để chọn chế độ vận hành (Chế độ Dữ liệu hoặc Chế độ Lệnh)

Cách hoạt động

Mô-đun Bluetooth HC-05 có hai chế độ hoạt động:

  • Chế độ dữ liệu: được sử dụng để trao đổi dữ liệu với thiết bị ghép nối
  • Chế độ lệnh: được sử dụng để cấu hình tham số.

May mắn thay, mô-đun Bluetooth HC-05 có thể hoạt động với Arduino bằng cách sử dụng thiết lập mặc định mà không cần cấu hình.

Cài đặt mặc định của HC-05

Default Bluetooth Name “HC-05”
Default Password 1234 or 0000
Default Communication Slave
Default Mode Data Mode
Default Data Mode Baud Rate 9600, 8, N, 1
Default Command Mode Baud Rate 38400, 8, N, 1

Về Ứng dụng Bluetooth Serial Monitor

Ứng dụng Bluetooth Serial Monitor là một ứng dụng di động có giao diện người dùng trông giống như Serial Monitor của Arduino IDE. Nó giao tiếp với Arduino qua Bluetooth. Bạn có thể tương tác với Arduino thông qua ứng dụng này như thể đang dùng Serial Monitor trên máy tính của bạn, mà không cần thêm bất kỳ mã đặc biệt nào cho mô-đun Bluetooth trong mã Arduino của bạn, bằng cách thực hiện bước sau:

  • Kết nối Arduino với module Bluetooth HC-05
  • Cài đặt Bluetooth Serial Monitor App trên điện thoại thông minh của bạn
  • Mở ứng dụng và ghép nối với module Bluetooth HC-05

Và bây giờ bạn có thể gửi và nhận dữ liệu từ Arduino giống như Serial Monitor của Arduino IDE. Bạn không cần chỉnh sửa mã Arduino hiện có hoặc thêm bất kỳ mã Bluetooth nào vào mã Arduino mới.

Sơ đồ đấu dây

sơ đồ mạch Bluetooth Arduino

This image is created using Fritzing. Click to enlarge image

Bảng đấu dây

Arduino Pins HC-05 Bluetooth Pins
RX (Pin 0) TX
TX (Pin 1) RX
5V VCC
GND GND
Enable/Key (NOT connected)
State (NOT connected)

※ Lưu ý:

Bạn có thể sử dụng các chân Arduino khác bằng cách thay đổi đối tượng Serial trong mã Arduino sang Serial1, Serial2, ..., hoặc SoftwareSerial nếu có.

Cách Lập Trình Cho Bluetooth

Không cần mã riêng dành cho Bluetooth. Chúng ta chỉ cần sử dụng mã Serial.

Arduino gửi dữ liệu đến Ứng dụng Bluetooth trên điện thoại thông minh

Để gửi dữ liệu từ Arduino đến ứng dụng Bluetooth trên điện thoại thông minh, chúng ta cần dùng đoạn mã Arduino sau đây:

Trong ví dụ này, chúng ta sẽ gửi “Arduino ở đây, hãy ra lệnh cho tôi!” từ Arduino đến Ứng dụng Bluetooth trên điện thoại thông minh mỗi giây

/* * Mã Arduino này được phát triển bởi newbiely.vn * Mã Arduino này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/arduino/arduino-bluetooth */ void setup() { Serial.begin(9600); } void loop() { Serial.println("Arduino here, command me!"); delay(1000); }

Hướng dẫn từng bước

  • Cài đặt Bluetooth Serial Monitor App trên điện thoại thông minh của bạn
  • Nối module Bluetooth HC-05 với Arduino theo sơ đồ kết nối ở trên
  • Sao chép mã ở trên và mở nó bằng Arduino IDE
  • Nhấp vào Tải lên nút trên Arduino IDE để tải mã lên Arduino. Bạn có thể gặp lỗi khi tải mã lên Arduino. Nếu vậy, ngắt kết nối các chân TX và RX khỏi module Bluetooth, tải mã lên, và sau đó kết nối lại các chân RX/TX.
  • Mở Serial Monitor trên Arduino IDE
  • Mở ứng dụng Bluetooth Serial Monitor trên điện thoại thông minh của bạn
  • Chọn chế độ Bluetooth Classic
Ứng dụng theo dõi nối tiếp Bluetooth
  • Ghép cặp với mô-đun Bluetooth HC-05
ghép nối Bluetooth với màn hình nối tiếp
  • Xem kết quả trên ứng dụng Android.
Ứng dụng giám sát Bluetooth serial
  • Xem kết quả trên Serial Monitor của Arduino IDE.
COM6
Send
Arduino here, command me! Arduino here, command me! Arduino here, command me! Arduino here, command me! Arduino here, command me!
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Bạn sẽ thấy dữ liệu trên Serial Monitor của Arduino IDE và trên ứng dụng Android là giống nhau.

Ứng dụng Bluetooth gửi dữ liệu đến Arduino

Đoạn mã dưới đây làm gì:

  • Ứng dụng Bluetooth gửi dữ liệu đến Arduino
  • Arduino đọc dữ liệu và gửi phản hồi lại cho Bluetooth:
/* * Mã Arduino này được phát triển bởi newbiely.vn * Mã Arduino này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/arduino/arduino-bluetooth */ // NOTE: change the Serial to other Serial/Software Serial if you connects Bluetooth module to other pins void setup() { Serial.begin(9600); } void loop() { Serial.println(F("Arduino here, command me!")); if (Serial.available()) { // if there is data comming String command = Serial.readStringUntil('\n'); // read string until meet newline character if (command == "LED OFF") { Serial.println("LED is turned OFF"); // reports action to smartphone app // TODO: control your LED here } else if (command == "LED ON") { Serial.println("LED is turned ON"); // reports action to smartphone app // TODO: control your LED here } } delay(500); }

Hướng dẫn từng bước

  • Sao chép mã ở trên và mở nó bằng Arduino IDE
  • Nhấp vào nút Tải lên trên Arduino IDE để tải mã lên Arduino
  • Mở Serial Monitor trên Arduino IDE
  • Mở ứng dụng Android và ghép nối với mô-đun Bluetooth HC-05 (tương tự như ví dụ trước)
  • Sau khi kết nối, gõ "LED BẬT" hoặc "LED TẮT" trên ứng dụng Android và nhấp nút "GỬI"
Ứng dụng giám sát nối tiếp Bluetooth
  • Arduino nhận dữ liệu và in ra phản hồi qua cổng Serial. Dữ liệu này sẽ được gửi đến ứng dụng Bluetooth
  • Xem kết quả trên Ứng dụng Android
Ứng dụng giám sát Bluetooth nối tiếp
  • Xem kết quả trên Serial Monitor của Arduino IDE
COM6
Send
Arduino here, command me! Arduino here, command me! Arduino here, command me! Arduino here, command me! Arduino here, command me! Arduino here, command me! LED ON LED is turned ON Arduino here, command me! Arduino here, command me! Arduino here, command me! LED OFF LED is turned OFF Arduino here, command me! Arduino here, command me!
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Bạn sẽ thấy dữ liệu trên Serial Monitor của Arduino IDE và trên ứng dụng Android là hoàn toàn giống nhau.

Mã Arduino - Điều khiển LED bằng ứng dụng trên điện thoại thông minh qua Bluetooth

Đoạn mã Arduino ví dụ dưới đây chấp nhận hai lệnh (“ON”“OFF”) từ ứng dụng Bluetooth Serial Monitor để bật/tắt một đèn LED tích hợp sẵn.

/* * Mã Arduino này được phát triển bởi newbiely.vn * Mã Arduino này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/arduino/arduino-bluetooth */ // NOTE: change the Serial to other Serial/Software Serial if you connects Bluetooth module to other pins #define LED_PIN 8 void setup() { Serial.begin(9600); pinMode(LED_PIN, OUTPUT); // set the digital pin as output: } void loop() { if (Serial.available()) { // if there is data comming String command = Serial.readStringUntil('\n'); // read string until meet newline character if (command == "OFF") { digitalWrite(LED_PIN, LOW); // turn off LED Serial.println("LED is turned OFF"); // reports action to smartphone app } else if (command == "ON") { digitalWrite(LED_PIN, HIGH); // turn on LED Serial.println("LED is turned ON"); // reports action to smartphone app } } }

Bạn có thể xem các chỉ dẫn chi tiết hơn tại bài hướng dẫn Arduino điều khiển đèn LED qua Bluetooth.

Mã Arduino - Điều khiển động cơ servo bằng ứng dụng điện thoại thông minh qua Bluetooth

Mã Arduino dưới đây nhận giá trị góc từ ứng dụng Bluetooth Serial Monitor để điều khiển góc của động cơ servo.

/* * Mã Arduino này được phát triển bởi newbiely.vn * Mã Arduino này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/arduino/arduino-bluetooth */ // NOTE: change the Serial to other Serial/Software Serial if you connects Bluetooth module to other pins #include <Servo.h> Servo servo; // create servo object to control a servo int pos = 0; // variable to store the servo position void setup() { Serial.begin(9600); servo.attach(11); // attaches the servo on pin 11 to the servo object } void loop() { if (Serial.available()) { // if there is data comming int angle = Serial.parseInt(); if (angle >= 0 && angle <= 180) { servo.write(angle); // rotate servo Serial.print("Rotated servo to angle: ");// reports action to smartphone app Serial.println(angle); } else { Serial.print("Invalid angle: ");// reports invalid value to smartphone app Serial.println(angle); } } }

Bạn có thể xem chi tiết các hướng dẫn tại bài hướng dẫn Arduino điều khiển động cơ servo qua Bluetooth.

Nếu ứng dụng Bluetooth Serial Monitor hữu ích với bạn, vui lòng đánh giá 5 sao trên Play Store. Cảm ơn bạn!

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.

Tham khảo hàm