Cách giao tiếp Serial Arduino với máy tính PC khi lập trình
Trong bài viết này, IoTZone sẽ tập trung giới thiệu vào cách giao tiếp Serial Arduino với máy tính khi lập trình. Serial còn có tên gọi khác là giao tiếp UART, chúng được dùng khá phổ biến trong các hệ thống nhúng.
Giới thiệu về giao tiếp Serial
Khi làm một dự án có dùng đến Arduino, chúng ta sẽ cần giao tiếp và gửi / nhận thông tin giữa thiết bị, có thể là giữa các mạch Arduino với nhau, giữa 1 mạch Arduino với các cảm biến hoặc module điện tử,… Mỗi thông tin gửi đi gồm 8 bit, vậy chúng ta cần dùng phương thức giao tiếp nào?
Phương thức đơn giản nhất có lẽ là dùng 8 dây truyền dữ liệu, mỗi dây là 1 bit, dùng để truyền bit từ bộ phát đến bộ thu. Đây là phương thức giao tiếp song song (Parallel Communication). Tuy nhiên, phương thức này yêu cầu đường truyền lớn, khó phù hợp với các mạch có chân Input, Output hạn chế như Arduino.
Khi đó, phương thức giao tiếp nối tiếp Serial là giải pháp lý tưởng cho trường hợp này. Cụ thể, lúc đó chúng ta chỉ cần dùng 1 hoặc một vài đường truyền, dữ liệu sẽ truyền tải từng bit theo thứ tự qua đường truyền này. Mặc dù điều này làm giảm đáng kể tốc độ truyền dữ liệu, nhưng chúng tiết kiệm số lượng đường truyền, phù hợp với các vi điều khiển như Arduino.
Bạn có thể tìm hiểu kỹ hơn về giao tiếp Serial qua bài viết đã được gắn link bên trên.
Giao tiếp Serial Arduino qua Serial Monitor
Để giao tiếp Arduino với máy tính PC, chúng ta sẽ dùng đến Serial Monitor. Đây là bộ phận quan trọng trong Arduino IDE, cho phép các mạch điện tử có thể nhận và gửi dữ liệu với máy tính qua giao tiếp Serial Arduino.
- Arduino -> máy tính PC: PC nhận dữ liệu từ mạch Arduino và hiển thị dữ liệu lên màn hình Serial Monitor. Chúng ta có thể dựa vào dữ liệu hiển thị này để debug và nhận kết quả.
- Máy tính PC -> Arduino: Gửi các lệnh, yêu cầu hoặc dữ liệu đến mạch Arduino.
Cách sử dụng Serial Monitor khá đơn giản, chúng ta chỉ cần viết một command line – sketch trong Arduino IDE là được.
Tuy nhiên, để giao tiếp Serial Arduino với máy tính, thì có thể xảy ra 2 trường hợp chính như sau:
- Trường hợp phổ biến: Nếu mạch Arduino đã hỗ trợ sẵn việc chuyển đổi giao thức UART to Serial, chẳng hạn như Yolo UNO, Arduino UNO R3,… thì bạn chỉ cần nối dây USB giữa mạch Arduino với máy tính PC.
- Nếu bạn dùng các mạch Arduino Promini, thì chúng ta cần thêm một mạch chuyển đổi UART to Serial riêng (còn hay gọi là USB to Serial), và dùng 3 dây GND, TX và RX (có thể có thêm VCC cấp nguồn) để kết nối.
Cách dùng Serial Monitor
Ở đây, mình sẽ lấy ví dụ là trường hợp phổ biến đầu tiên, chỉ cần kết nối USB giữa mạch Arduino và PC nhé! Để chuẩn bị cho giao tiếp Serial Arduino với PC, bạn kết nối dây USB và cấu hình đúng cổng COM đã kết nối cho Port nhé!
Sau đó, bạn click vào icon Serial Monitor để khởi chạy:
Ban đầu, màn hình Serial Monitor sẽ chưa có thông tin gì. Tùy vào chương trình của bạn mà các dữ liệu hiển thị tại đây sẽ khác nhau. Dưới đây, cùng tìm hiểu về thành phần của màn hình Serial Monitor:
Giao diện của Serial Monitor
1. Output console: Nơi hiển thị các dữ liệu được gửi đến từ mạch Arduino:
2. Autoscroll: Cho phép dữ liệu tự động cuộn xuống dưới hoặc không.
3. Show timestamp: Cho phép hiển thị thời gian kể từ khi bắt đầu hiển thị dữ liệu trên Serial Monitor hoặc không.
4. Clear output: Xóa tất cả các dữ liệu đang hiển thị trên Output console.
5. Baud rate (9600 baud, 112500 baud…): Tốc độ truyền khi giao tiếp Serial Arduino với PC. Lưu ý rằng tốc độ này phải giống với tốc độ bạn đã sử dụng khi viết chương trình trong Arduino, ở dòng code sau:
Serial.begin(<baud rate>)
Ở ví dụ bên dưới, mình sẽ giải thích rõ hơn.
6. Textbox: Nơi để chúng ta nhập dữ liệu và gửi dữ liệu này đến mạch Arduino:
7. Send: Nhấn để bắt đầu gửi dữ liệu đã nhập trong textbox đến mạch Arduino
8. Ending selection (Newline, No line ending…): Chọn các ký tự cuối cùng được thêm vào dữ liệu khi gửi chúng đến mạch Arduino. Mục này có các lựa chọn sau:
- No line ending: Không thêm ký tự nào
- Newline: Thêm một dòng mới (‘\n’ hoặc là LF)
- Carriage return: Thêm một ký tự di chuyển con trỏ hiện tại về đầu dòng (‘\r’ hoặc là CR)
- Both NL and CR: Dòng kết hợp giữa newline và carriage return
Ví dụ về cách giao tiếp Serial Arduino kèm code mẫu
Câu lệnh cơ bản cần biết
Để gửi dữ liệu từ máy tính PC đến Arduino, bạn sử dụng câu lệnh sau trong hàm setup():
Serial.begin(<baud rate>)
Trong hàm loop() thì bạn thêm dòng:
if(Serial.available()) { // Câu lệnh để xử lý lệnh }
Hàm trên sẽ trả về giá trị là true nếu có bất kỳ lệnh nào gửi từ PC đến mạch Arduino. Chúng ta có thể dùng các hàm như Serial.read(), Serial.readString()… để mạch Arduino có thể đọc được lệnh gửi đến và tiến hành các hoạt động sau đó. Ví dụ:
Serial.readStringUntil(<kí tự dừng>)
Giờ bắt đầu vào phần chính, cùng tìm hiểu cách bật tắt đèn LED trên mạch Arduino, khi gõ chữ ON / OFF trên máy tính (thông qua Serial Monitor) nhé!
Kết nối phần cứng
Bạn cần dùng mạch Arduino, đèn LED, dây jumper và breadboard. Sau đó, bạn kết nối chúng theo sơ đồ dưới:
Code mẫu
void setup() { Serial.begin(9600); pinMode(8, OUTPUT); digitalWrite(8, LOW); // cấu hình để đèn LED ban đầu tắt } void loop() { if(Serial.available()) { // nếu PC có gửi dữ liệu đến text = Serial.readStringUntil('\n'); // đọc các giá trị đó cho đến khi gặp kí tự xuống dòng là \n if(text == "ON") { digitalWrite(8,HIGH); // bật đèn LED Serial.println("LED is turned ON"); // gửi thông báo là đã bật đèn LED lên Serial Monitor trên PC } if(text == "OFF") { digitalWrite(8,LOW); // tắt đèn LED Serial.println("LED is turned OFF"); // gửi thông báo là đã tắt đèn LED lên Serial Monitor trên PC } } }
Sau đó, bạn hãy nạp code trên vào mạch Arduino, bật Serial Monitor ở tốc độ baud 9600 rồi nhập ON / OFF để xem hiệu quả nhé!
Lời kết
Trên đây là các kiến thức về giao tiếp Serial Arduino, cũng như một dự án demo mẫu về chúng. Hy vọng bạn đã hiểu hơn về khái niệm Serial Monitor. Trên Website IoTZone hiện tại có khá nhiều hướng dẫn với mạch ESP32 có sử dụng Serial Monitor, bạn có thể theo dõi và thực hành theo tại Blog hướng dẫn ESP32.
IoTZone – Chuyên cung cấp thiết bị điện tử & tài liệu cho Makers
- Website: https://www.iotzone.vn/
- Fanpage: https://www.facebook.com/Iotzonemaker
- SDT: 0364174499
- Zalo: https://zalo.me/0364174499