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
36 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

Select any filter and click on Apply to see results

Các bài viết cùng tác giả

Cảm biến độ ẩm đất và những ứng dụng hay của nó

Hôm nay, mình sẽ giới thiệu cho các bạn một loại module mới (nói là mới thì không phải, thực ra là trên cộng đồng chưa có bài nói về cái này). Đó là module cảm biến đất. Với module này các bạn có thể ứng dụng nhiều trong các dự án tự động như: đọc độ ẩm đất hoặc áp dụng vào các hệ thống tưới tiêu tự động...VD: bạn có thể chế một hệ thống điều khiển bơm nước qua rơ le...theo độ ẩm của đất...nếu đất khô, tự động tưới...đất ẩm thì dừng lại chả hạn!!! Rất thú vị phải không ạ??? Vậy sử dụng nó như thế nào??? Các bạn hãy đọc hết bài viết này của mình nhé!!!

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

Giới thiệu về Module LM2596 - Giải thưởng tuần 4

Trong những dự án Arduino, để dự án được nhỏ gọn và tiết kiệm, có nhiều bạn thường xử dụng board Arduino Pro Mini vì nó khá nhỏ gọn và giá thành thì max rẻ (khỏi nói - chỉ tẩm 50k). Nhưng Pro mini lại không có tích hợp mạch nguồn 3.3V và 5V, nên khó có thể cấp nguồn chuẩn 5V hay 3.3V cho các module hay cảm biến. Để giải quyết vấn đề đó, bài viết này mình sẽ giới thiệu về module hạ áp LM2596

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