Arduino BLE

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

Arduino Bluetooth năng lượng thấp

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

Cần lưu ý rằng hướng dẫn này đặc biệt đề cập đến Bluetooth Low Energy (BLE, Bluetooth 4.0). Nếu bạn đang tìm kiếm thông tin về Bluetooth cổ điển (Bluetooth 2.0), vui lòng tham khảo một hướng dẫn tương tự Arduino - Bluetooth.

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×HM-10 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 HM-10

HM-10 là một mô-đun BLE nối tiếp hoạt động như một bộ chuyển đổi từ Serial sang Bluetooth Low Energy. Nó thực hiện các hành động sau:

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

Cụ thể, khi sử dụng Arduino để giao tiếp với một ứng dụng trên điện thoại thông minh (Android/iOS), điều sau đây xảy ra:

  • Arduino kết nối với mô-đun Bluetooth HM-10 thông qua các chân Serial/SoftwareSerial
  • Mô-đun Bluetooth HM-10 được ghép đô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 bằng cách gửi qua Serial/SoftwareSerial
  • Arduino nhận dữ liệu từ ứng dụng trên điện thoại bằng cách đọc từ Serial/SoftwareSerial
  • Không cần thêm mã BLE trên Arduino

Bố trí các chân

sơ đồ chân ble

Mô-đun BLE HM-10 có 6 chân:

  • Chân BKR: để điều khiển hoạt động của mô-đun. Bỏ qua chân này nếu bạn là người mới bắt đầu.
  • Chân RX: chân dữ liệu nối tiếp, 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 tới Bluetooth.
  • Chân TX: chân dữ liệu nối tiếp, kết nối chân này với chân RX của Arduino. Dữ liệu nhận được qua BLE sẽ được gửi tới chân này ở dạng dữ liệu nối tiế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 VCC: chân cấp nguồn, kết nối chân này với 3.3V của nguồn cấp.
  • Chân STATE: cho biết các trạng thái làm việc:
    • Nhấp nháy ở chế độ chờ - nhịp 500ms;
    • Bật ở trạng thái kết nối - mức cao.

    ※ Lưu ý:

    • Chúng ta chỉ cần sử dụng 4 chân: VCC, GND, RX, TX
    • Một số nhà sản xuất HM-10 chỉ có bốn chân.

Về Ứng dụng Bluetooth Serial Monitor

Ứng dụng Bluetooth Serial Monitor là một ứng dụng di động mô phỏng giao diện Serial Monitor trong Arduino IDE. Nó cho phép giao tiếp với bo mạch Arduino qua Bluetooth mà không cần thêm mã vào sketch Arduino. Để sử dụng nó, hãy làm theo các bước sau:

  • Kết nối Arduino với mô-đun Bluetooth HM-10
  • Tải xuống và 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à kết nối nó với mô-đun Bluetooth HM-10

Khi hoàn tất các bước này, bạn có thể gửi và nhận dữ liệu từ Arduino như thể đang sử dụng Serial Monitor trong Arduino IDE, mà không cần chỉnh sửa mã Arduino hiện có hoặc thêm bất kỳ mã Bluetooth đặc thù nào.

Sơ đồ đấu dây

sơ đồ đấu nối Arduino ble

This image is created using Fritzing. Click to enlarge image

Bảng nối dây

Arduino Pins HM-10 Bluetooth Pins
RX (Pin 0) TX
TX (Pin 1) RX
5V VCC
GND GND
BKR (NOT connected)
STATE (NOT connected)

※ Lưu ý:

Mã Arduino có thể sử dụng các chân khác bằng cách thay thế đối tượng Serial bằng một đối tượng thay thế như Serial1, Serial2 hoặc SoftwareSerial (nếu có).

Cách lập trình cho Bluetooth

Không cần mã Bluetooth chuyên biệt, chỉ cần mã Serial.

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

Để truyền dữ liệu từ một bo mạch Arduino tới một ứng dụng Bluetooth trên điện thoại thông minh, có thể sử dụng đoạn mã Arduino sau. Ví dụ này minh họa việc gửi thông điệp “Arduino ở đây, hãy ra lệnh cho tôi!” từ Arduino đến ứng dụng trên điện thoại 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-ble */ void setup() { Serial.begin(9600); } void loop() { Serial.println("Arduino here, command me!"); delay(1000); }

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

Để sử dụng mã và kết nối bo mạch Arduino với điện thoại thông minh qua BLE, hãy làm theo các bước sau:

  • Cài đặt Bluetooth Serial Monitor App trên điện thoại thông minh của bạn.
  • Kết nối mô-đun Bluetooth HM-10 với board Arduino theo sơ đồ kết nối được cung cấp.
  • Mở Arduino IDE, sao chép mã nguồn được cung cấp ở trên, và tải lên cho board Arduino. Nếu bạn không thể tải mã lên, ngắt kết nối các chân TX và RX từ mô-đun Bluetooth, tải mã lên, rồi kết nối lại các chân RX/TX.
  • Mở Trình giám sát nối tiếp trên Arduino IDE.
  • Trên điện thoại của bạn, mở Ứng dụng Bluetooth Serial Monitor App và chọn chế độ BLE.
Ứng dụng giám sát nối tiếp Bluetooth
  • Ghép đôi điện thoại thông minh với mô-đun Bluetooth HM-10.
ghép đôi Bluetooth serial monitor
  • Quan sát kết quả trên ứng dụng Android.
Ứng dụng giám sát nối tiếp Bluetooth
  • Quan sát 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  

Nếu bạn làm theo các bước và chạy mã, dữ liệu hiển thị trên Serial Monitor của Arduino IDE và trên ứng dụng Android sẽ khớp với nhau.

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

Đoạn mã dưới đây thực hiện các hành động sau:

  • Gửi dữ liệu từ ứng dụng Bluetooth đến bo mạch Arduino
  • Mạch Arduino sẽ đọc dữ liệu nhận được và sau đó gửi phản hồi về cho thiết bị 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-ble */ // 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

Dưới đây là các bước để sử dụng mã với Arduino và một ứng dụng Android:

  • Mở Arduino IDE và dán mã được cung cấp ở trên.
  • Nhấp vào nút Tải lên để tải mã lên bo mạch Arduino.
  • Mở Serial Monitor trong Arduino IDE.
  • Mở ứng dụng Android và ghép nối nó với mô-đun Bluetooth HM-10 bằng các hướng dẫn được cung cấp trong ví dụ trước.
  • Khi đã kết nối, gõ "LED ON" hoặc "LED OFF" trong ứng dụng Android và nhấn nút "GỬI".
Ứng dụng giám sát Bluetooth serial
  • Bộ mạch Arduino sẽ nhận dữ liệu, xuất ra phản hồi qua cổng Serial. Dữ liệu này sẽ được gửi tới ứng dụng Bluetooth.
  • Kiểm tra kết quả trên ứng dụng Android.
Ứng dụng giám sát nối tiếp Bluetooth
  • Kiểm tra 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  

Khi bạn hoàn thành các bước ở trên, bạn sẽ nhận thấy thông tin được hiển thị trên Serial Monitor của Arduino IDE và ứng dụng Android sẽ 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 BLE

Đoạn mã ví dụ Arduino sau đây sử dụng các lệnh “ON”“OFF” nhận được thông qua ứng dụng Bluetooth Serial Monitor để bật/tắ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-ble */ // 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 chi tiết hơn trong 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 trên điện thoại thông minh qua BLE

Đoạn mã Arduino dưới đây nhận một giá trị góc từ Ứng dụng Bluetooth Serial Monitor để điều khiển góc quay của một độ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-ble */ // 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 hướng dẫn trong tutorial Arduino điều khiển động cơ servo qua Bluetooth.

Nếu ứng dụng Bluetooth Serial Monitor hữu ích cho bạn, xin hãy cho nó đá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