Đỗ Hữu Toàn gửi vào
- 57231 lượt xem
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 Mode và Data 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é!!!!