Dùng máy tính điều khiển Arduino thông qua bluetooth với C# - Một cái nhìn toàn diện về module bluetooth HC-05

1. Lý do viết bài

Để trả lời câu hỏi của bạn Trần Tùng: “Có cách nào để máy tính dùng C# để điều khiển Arduino qua bluetooth không?”. Hôm nay, viết bài để giải quyết vấn đề này, đó là : Dùng máy tính để điều khiển Arduino thông qua module HC-05

2.Giới thiệu về module Bluetooth HC-05, các chế độ hoạt động, và các lệnh AT hay dùng

a. Giới thiệu

Bluetooth là chuẩn truyền thông không dây để trao đổi dữ liệu ở khoảng cách ngắn.Chuẩn truyền thông này sử dụng sóng radio ngắn(UHF radio) trong dải tần số ISM (2.4 tới 2.485 GHz). Khoảng cách truyền của module này vào khoảng 10m. Ở bài viết này, mình muốn giới thiệu đến các bạn một module sử dụng chuẩn truyền thông này là module HC-05. Module này được thiết kế dựa trên chip BC417. Con chip này khá phức tạp và sử dụng bộ nhớ flash ngoài 8Mbit. Nhưng việc sử dụng module này hoàn toàn đơn giản bởi nhà sản xuất đã tích hợp mọi thứ cho bạn trên module HC-05.

Sơ đồ chân HC-05 gồm có:

  • KEY: Chân này để chọn chế độ hoạt động AT Mode hoặc Data Mode.
  • VCC: chân này có thể cấp nguồn từ 3.6V đến 6V bên trong module đã có một ic nguồn chuyển về điện áp 3.3V và cấp cho IC BC417.
  • GND:  nối với chân nguồn GND
  • TXD, RND đây là hai chân UART để giao tiếp module hoạt động ở mức logic 3.3V  
  • STATE các bạn chỉ cần thả nổi và không cần quan tâm đến chân này.

b. Các chế độ hoạt động

HC-05 có hai chế độ hoạt động là Command ModeData Mode. Ở chế độ Command Mode ta có thể giao tiếp với module thông qua cổng serial trên module bằng tập lệnh AT quen thuộc. Ở chế độ Data Mode module có thể truyền nhận dữ liệu tới module bluetooth khác. Chân KEY dùng để chuyển đổi qua lại giữa hai chế độ này. Có hai cách để bạn có thể chuyển module hoạt động trong chế độ Data Mode (đọc tài liệu Tiếng Việt trên một số Web thấy chỗ này thường bị viết sai)

Nếu đưa chân này lên mức logic cao trước khi cấp nguồn module sẽ đưa vào chế độ Command Mode với baudrate mặc định 38400. Chế độ này khá hữu ích khi bạn không biết baudrate trong module được thiết lập ở tốc độ bao nhiêu. Khi chuyển sang chế độ này đèn led trên module sẽ nháy chậm (khoảng 2s) và ngược lại khi chân KEY nối với mức logic thấp trước khi cấp nguồn module sẽ hoạt động chế độ Data Mode.

Nếu module đang hoạt động ở chế Data Mode để có thể đưa module vào hoạt động ở chế độ Command Mode bạn đưa chân KEY lên mức cao. Lúc này module sẽ vào chế độ Command Mode nhưng với tốc độ Baud Rate được bạn thiết lập lần cuối cùng. Vì thế bạn phải biết baudrate hiện tại của thiết bị để có thể tương tác được với nó. Chú ý nếu module của bạn chưa thiết lập lại lần nào thì mặc định của nó như sau:

  • Baudrate 9600, data 8 bits, stop bits 1, parity : none, handshake: none
  • Passkey: 1234
  • Device Name: HC-05

Ở chế độ Data Mode HC-05 có thể hoạt động như một master hoặc slave tùy vào việc bạn cấu hình (riêng HC-06 bạn chỉ có thể cấu hình ở chế độ SLAVE)

  • Ở chế độ SLAVE: bạn cần thiết lập kết nối từ smartphone, laptop, usb bluetooth để dò tìm module sau đó pair với mã PIN là 1234. Sau khi pair thành công, bạn đã có 1 cổng serial từ xa hoạt động ở baud rate 9600.
  • Ở chế độ MASTER: module sẽ tự động dò tìm thiết bị bluetooth khác (1 module bluetooth HC-06, usb bluetooth, bluetooth của laptop...) và tiến hành pair chủ động mà không cần thiết lập gì từ máy tính hoặc smartphone.

c. Tập lệnh AT

AT: Lệnh test, nó sẽ trả về OK nếu module đã hoạt động ở Command Mode

AT+VERSION? :trả về firmware hiện tại của module

AT+UART=9600,0,0 ( thiết lập baudrate 9600,1 bit stop, no parity)

Các lệnh ở chế độ Master

AT+RMAAD : ngắt kết nối với các thiết bị đã ghép

AT+ROLE=1 : đặt là module ở master

AT+RESET: reset lại thiết bị

AT+CMODE=0: Cho phép kết nối với bất kì địa chỉ nào

AT+INQM=0,5,5: Dừng tìm kiếm thiết bị khi đã tìm được 5 thiết bị hoặc sau 5s

AT+PSWD=1234 Set Pin cho thiết bị

AT+INQ: Bắt đầu tìm kiếm thiết bị để ghép nối

Sau lệnh này một loạt các thiết bị tìm thấy được hiện thị. Định ra kết quả sau lệnh này như sau        

INQ:address,type,signal

Phần địa chỉ (address) sẽ có định dạng như sau: 0123:4:567890. Để sử dụng địa chỉ này trong các lệnh tiếp theo ta phải thay dấu “:” thành “,”

0123:4:567890 -> 0123,4,5678

AT+PAIR=<address>,<timeout> : Đặt timeout(s) khi kết nối với 1 địa chỉ slave

AT+LINK=<address> Kết nối với slave

Các lệnh ở chế độ Slave

AT+ORGL: Reset lại cài đặt mặc định

AT+RMAAD: Xóa mọi thiết bị đã ghép nối

AT+ROLE=0: Đặt là chế độ SLAVE

AT+ADDR: Hiển thị địa chỉ của SLAVE

3. Cách làm

  • Quay về nội dung chính của bài viết này…Mình sẽ chia sẻ cách dùng máy tính điều khiển Arduino thông qua HC-05

a. Kết nối

HC-05
Arduino UNO
Key
7
TX
RX
RX
TX
GND
GND
Vcc
5V

b. Code cho Arduino

Sau khi nối dây xong…các bạn nạp code này vô Arduino:

#
define KEY 7

# define LED 13

bool ok;

int
var;

String bf = "";



void setup()

{

 pinMode(KEY, OUTPUT);

 digitalWrite(KEY, LOW);

 pinMode(LED, OUTPUT);

 digitalWrite(LED, HIGH);

 delay(3000);

 Serial.begin(9600);

 ok = configure_HC05();



}



void loop() {



  if (ok)

  {

   if (Serial.available() > 0)

   {

    var = Serial.Read();

    Serial.println(var);

    if (var == ‘1’) {
     digitalWrite(LED, HIGH);
    } else if (var == ‘2’) {
     digitalWrite(LED, LOW);

    }
   }



   bool configure_HC05()

   {

    digitalWrite(KEY, HIGH);

    Serial.println("AT");

    delay(2000);

    if (!Serial.find("OK"))

     return false;



    Serial.println("AT+RMAAD");

    delay(2000);

    if (!Serial.find("OK"))

     return false;



    Serial.println("AT+PSWD=1234");

    delay(2000);

    if (!Serial.find("OK"))

     return false;



    Serial.println("AT+ROLE=0");

    delay(2000);

    if (!Serial.find("OK"))

     return false;

    digitalWrite(KEY, LOW);

    Serial.println("AT+RESET");

    delay(2000);

    if (!Serial.find("OK"))

     return false;

    delay(5000);

    Serial.println("Bluetooth Ready!");

    return true;

   }

c. Mô tả code:

Trong code đầu tiên mình sẽ chỉnh chân KEY lên mức logic cao sau đó sẽ tiến hành cấu hình nó như một SLAVE với tập lệnh sau:

  • AT+RMAAD
  • AT+PSWD=1234
  • AT+ROLE=0

Sau khi cấu hình sau ta đưa chân KEY lên mức logic cao và reset lại module với  lệnh

AT+RESET

Lúc này HC-05 của bạn đã chạy ở chế độ SLAVE và bạn đã hoàn tất bước cấu hình.

Sau đó module sẽ đợi lệnh bật tắt Led từ máy tính.

Sau khi cấu hình sau ta đưa chân KEY lên mức logic cao và reset lại module với  lệnh

AT+RESET

Lúc này HC-05 của bạn đã chạy ở chế độ SLAVE và bạn đã hoàn tất bước cấu hình.

Sau đó module sẽ đợi lệnh bật tắt Led từ máy tính.

d. Thiết lập PC và HC05

Bước 1:Sau khi nạp code vào vi điều khiển bạn hãy tiến hành kết nối HC-05 với Bluetooth trên máy tính

Sau khi PC và HC-05 đã được ghép nối ta sẽ thấy trong mục “Device Manager” hiện thêm 2 cổng COM. Lúc này bạn đã có 1 cổng COM từ xa để điều khiển LED rồi đó

Bước 2:Ta vào mục Bluetooth Setting để xem cổng nào là cổng “OutGoing” ta sẽ dùng cổng này để điều khiển đèn Led (trong trường hợp hình bên dưới là cổng COM 9)

Bước 3: Bạn dùng phần mềm tự tạo bằng C# như bài viết C# (C Sharp) – Một cách điều khiển Arduino bằng máy tính của mình và Đinh Hồng Thái đã làm để điều khiển cổng COM9 là ok!!!

Link down phần mềm bọn mình tự thiết kế:

  • Bản 1: http://arduino.vn/bai-viet/902-c-sharp-c-mot-cach-dieu-khien-arduino-bang-may-tinh
  • Bản 2: http://arduino.vn/bai-viet/908-c-c-sharp-nhan-du-lieu-tu-arduino

 

4. Kết quả

Sau khi hoàn thành, các ban đã có một cổng COM từ xa điều khiển qua bluetooth rồi đó. Chúc các bạn thành công!!!! Và nhớ Rate Node cho mình nhé!!!!

lên
53 thành viên đã đánh giá bài viết này hữu ích.
Chuyên mục: 
Các dự án được truyền cảm hứng

Bộ điều khiển PID - ứng dụng phần 2 - xe dò line dùng thuật toán PID

Tiép nối bài viết về xe dò line cảm ơn Đỗ Hữu Toàn đã viết hộ mình phần 4. hôm nay mình sẽ làm cho chiếc xe dò line đi mượt và có hồn hơn 

lên
34 thành viên đã đánh giá bài viết này hữu ích.
Các bài viết cùng tác giả

Tập lệnh AT với ESP8266

Như các bạn đã biết về tập lệnh AT của module bluetooth HC05 dùng để config các chế độ hoạt động trên module. Vậy với ESP8266 cũng thế, nó cũng có tập lệnh AT của riêng mình để thiết lập các chế độ, và tập lệnh AT đối với ESP8266 khá quan trọng để tương tác với các thiết bị khác thông qua UART. Vậy, chúng ta cùng đi tìm hiểu về tập lệnh AT của ESP8266 nào!!!

lên
19 thành viên đã đánh giá bài viết này hữu ích.

Nạp code cho Arduino Promini thông qua mạch nạp của Arduino UNO

Arduino Promini là một board mạch siêu nhỏ, và rẻ tiền....Lý do là Promini không có mạch nguồn chuyển đổi 5V, 3.3V và đặc biệt là không có mạch nạp. Vì thế bạn cần phải mua thêm một mạch nạp, để nạp code cho Arduno Promini...Nếu bạn không có mạch nạp, vậy phải làm thế nào để nạp code cho Promini?? Bạn có thể dễ dàng sử dụng board Arduino Uno R3 sẵn có của mình để nạp code cho Arduino Pro Mini khi không có mạch nạp, hay bạn muốn tiết kiệm con chip ATmega16U2 laugh

lên
24 thành viên đã đánh giá bài viết này hữu ích.