Giao tiếp arduino với máy tính

      167

Trong bài viết này, Điện Tử Tương Lai sẽ chia sẻ về giao tiếp UART là gì và nó hoạt động như thế nào. Chúng tôi cũng sẽ viết một sketch đơn giản để hướng dẫn cách sử dụng giao diện Arduino Uno UART.

Bạn đang xem: Giao tiếp arduino với máy tính

 

UART là gì

UART là viết tắt của Universal Asynchronous Receiver / Transmitter. Nó là một thiết bị phần cứng (hoặc mạch) được sử dụng để giao tiếp nối tiếp giữa hai thiết bị.

 

Các thiết bị UART được kết nối như thế nào

Kết nối hai thiết bị UART với nhau rất đơn giản và dễ dàng. Hình dưới một sơ đồ kết nối UART cơ bản.

*

Một chân dùng để truyền dữ liệu (gọi là chân TX) và chân kia dùng để nhận dữ liệu (gọi là chân RX). Chúng ta chỉ có thể kết nối hai thiết bị UART với nhau.

 

UART hoạt động như thế nào

UART hoạt động bằng cách chuyển đổi dữ liệu thành các gói để gửi hoặc xây dựng lại dữ liệu từ các gói nhận được.

 

Gởi dữ liệu Serial

Trước khi thiết bị UART có thể gửi dữ liệu, thiết bị truyền chuyển đổi byte dữ liệu thành bit. Sau khi chuyển đổi dữ liệu thành các bit, thiết bị UART sẽ chia chúng thành các gói để truyền. Mỗi gói chứa một bit bắt đầu, một khung dữ liệu, bit chẵn lẻ và các bit dừng. Hình dưới là một gói dữ liệu mẫu.

*

Sau khi chuẩn bị gói tin, mạch UART sẽ gửi nó ra ngoài qua chân TX.

 

Nhận dữ liệu Serial

Thiết bị UART nhận sẽ kiểm tra gói nhận được (thông qua chân RX) để tìm lỗi bằng cách tính số 1 và so sánh với giá trị của bit chẵn lẻ có trong gói. Nếu không có lỗi trong quá trình truyền, nó sẽ tiến hành tách bit bắt đầu, bit dừng, bit chẵn lẻ để lấy khung dữ liệu. Nó có thể cần nhận một số gói trước khi có thể xây dựng lại toàn bộ byte dữ liệu từ các khung dữ liệu. Sau khi xây dựng lại byte, nó được lưu trữ trong bộ đệm UART.

 

Thiết bị UART nhận sử dụng bit chẵn lẻ để xác định xem có bị mất dữ liệu trong quá trình truyền hay không. Mất dữ liệu trong quá trình truyền xảy ra khi một bit thay đổi trạng thái của nó trong khi truyền. Các bit có thể thay đổi do khoảng cách truyền, bức xạ từ và tốc độ truyền không khớp, cùng những thứ khác.

 

Thông số UART

UART có các cài đặt cần giống nhau trên cả hai thiết bị để có giao tiếp phù hợp. Các cài đặt này gồm tốc độ truyền, độ dài dữ liệu, bit chẵn lẻ, số bit dừng và kiểm soát luồng.

 

Tốc độ truyền

Tốc độ truyền là số bit mỗi giây (bps) mà thiết bị UART có thể truyền hoặc nhận. Chúng ta cần đặt cả hai thiết bị UART có cùng tốc độ truyền để truyền dữ liệu thích hợp. Các giá trị phổ biến cho tốc độ truyền là 9600, 1200, 2400, 4800, 19200, 38400, 57600 và 115200 bps.

 

Chiều dài dữ liệu

Độ dài dữ liệu là số lượng bit trên mỗi byte dữ liệu.

 

Bit chẵn lẻ

Bit chẵn lẻ là một bit được thêm vào dữ liệu được truyền và cho người nhận biết số 1 trong dữ liệu được truyền là lẻ hay chẵn. Cài đặt có thể có cho Bit chẵn lẻ là Lẻ hoặc Chẵn.

 

ODD - bit chẵn lẻ là ‘1’ nếu có một số lẻ là 1 trong khung dữ liệu

EVEN - bit chẵn lẻ là "0" nếu có số chẵn là 1 trong khung dữ liệu

 

Các bit dừng

Các thiết bị UART có thể sử dụng không, một hoặc hai bit dừng để đánh dấu điểm kết thúc của một tập hợp các bit (được gọi là gói tin) được truyền đi.

 

Kiểm soát luồng

Kiểm soát luồng là phương pháp tránh rủi ro mất dữ liệu khi truyền dữ liệu qua UART. Thiết bị UART sử dụng các ký tự đặc biệt làm kiểm soát luồng để bắt đầu hoặc dừng truyền.

 

Giao diện UART Arduino

Arduino có một hoặc nhiều chân UART tùy thuộc vào bo mạch. Trong bài này, chúng ta sẽ sử dụng Arduino Uno chỉ có một giao diện UART trên chân 0 (RX0) và chân 1 (TX0). Các chân 0 và 1 của Arduino cũng được sử dụng để giao tiếp với Arduino IDE qua USB. Vì vậy, nếu bạn tải các sketch lên UNO, trước tiên hãy ngắt kết nối bất kỳ dây nào trên các chân 0 và 1. Hình dưới là vị trí của các chân UART TX và RX.

Xem thêm: Trắc Nghiệm Công Việc Phù Hợp Với Tính Cách Của Bạn Nhất? Trắc Nghiệm Nghề Nghiệp Uef

*

 


*

Mức logic UART

Các mức logic UART có thể khác nhau giữa các nhà sản xuất. Ví dụ: Arduino Uno có mức logic 5-V nhưng cổng RS232 của máy tính có mức logic +/- 12-V. Kết nối trực tiếp Arduino Uno với cổng RS232 sẽ làm hỏng Arduino. Nếu cả hai thiết bị UART không có cùng mức logic, thì cần có mạch chuyển đổi mức logic phù hợp để kết nối các thiết bị.

 

Project UART đơn giản

Sau khi tìm hiểu cách hoạt động của UART, bây giờ chúng ta hãy xây dựng một sketch đơn giản trình bày cách sử dụng giao tiếp UART bằng Arduino Uno.

 

Project của chúng ta là về điều khiển đèn LED tích hợp của Arduino từ xa thông qua UART. Một nút nhấn có dây với bo Uno đầu tiên sẽ điều khiển đèn LED tích hợp của bo Uno thứ hai và ngược lại.

 

Những thứ bạn cần

Để xây dựng project, chúng ta cần các thành phần sau:

 

Arduino Uno (2 cái)

Nút nhấn (2 cái)

Breadboard

Dây jumper

 

SƠ ĐỒ KẾT NỐI

Hình dưới là cách kết nối các thành phần được sử dụng trong project của chúng ta.

 

*

Arduino Sketch

Sau khi thu thập và lắp ráp phần cứng, bây giờ chúng ta đã sẵn sàng để lập trình bo. Đối với project này, cả hai bo sẽ có sketch giống hệt nhau. Đầu tiên, chúng ta đặt chế độ chân 8 (nút nhấn) thành INPUT_PULLUP, đặt chế độ chân 13 (LED) thành OUTPUT và đặt trạng thái ban đầu của chân 13 thành LOW (tắt LED).

 

*

Serial Oject

Arduino giúp chúng ta dễ dàng sử dụng phần cứng UART tích hợp sẵn bằng cách sử dụng serial object. Serial Object có các chức năng cần thiết để sử dụng dễ dàng giao diện Arduino UART.

 

SERIAL.BEGIN ()

Để giao tiếp qua giao diện UART, trước tiên chúng ta cần định cấu hình nó. Cách dễ nhất để định cấu hình UART của Arduino là sử dụng hàm Serial.begin (speed). Tham số tốc độ là tốc độ truyền mà chúng ta muốn UART chạy. Sử dụng chức năng này sẽ đặt các tham số UART còn lại thành giá trị mặc định (Độ dài dữ liệu = 8, bit chẵn lẻ = 1, Số bit dừng = Không).

 

Nếu cài đặt mặc định không phù hợp với bạn, hãy sử dụng hàm Serial.begin (tốc độ, cấu hình) thay vì Serial.begin (tốc độ). Cấu hình tham số bổ sung được sử dụng để thay đổi cài đặt cho độ dài dữ liệu, bit chẵn lẻ, số các bit dừng. Bạn có thể tìm các giá trị được xác định cho cấu hình tham số tại đây.

 

Đoạn mã dưới đây thêm Serial.begin (9600); bên trong setup () để khởi tạo Arduino Uno UART với tốc độ truyền 9600 bps và các thông số khác được đặt thành giá trị mặc định.

 

*

Phần tiếp theo của mã là đọc và lưu một giá trị nhận được từ serial. Để thực hiện việc này, chúng ta sẽ sử dụng hàm Serial.available () cùng với câu lệnh If để kiểm tra xem có dữ liệu nhận được hay không. Sau đó chúng ta sẽ gọi Serial. read () để lấy một byte dữ liệu đã nhận và lưu giá trị vào biến data_rcvd. Giá trị data_rcvd điều khiển Bật hoặc Tắt của đèn LED tích hợp.

 

SERIAL.AVAILABLE ()

Để kiểm tra xem có dữ liệu đang chờ đọc trong bộ đệm UART (hoặc serial) hay không, chúng ta sẽ sử dụng hàm Serial.available (). Serial.available () trả về số byte đang chờ trong bộ đệm.

SERIAL.READ ()

Để đọc dữ liệu đang chờ trong bộ đệm nối tiếp, chúng ta sẽ sử dụng hàm Serial.read (), hàm này trả về một byte dữ liệu được đọc từ bộ đệm.

 

*

SERIAL.WRITE ()

Để gửi dữ liệu qua các chân TX0 của Arduino, chúng ta sẽ sử dụng hàm Serial.write (val). Tham số val là byte (hoặc chuỗi byte) sẽ được gửi.

 

Trong sketch, chúng ta sẽ gửi một giá trị char tùy thuộc vào trạng thái của chân 8. Chúng ta sẽ gửi giá trị char "1" nếu chân 8 là HIGH hoặc giá trị char "0" nếu chân 8 là LOW.

 

*

TẢI SKETCH LÊN VÀ KIỂM TRA

Lưu sketch dưới dạng arduino_uart_tutorial.ino. Bước còn lại là tải sketch lên cả hai bo mạch Arduino Uno. Hãy nhớ ngắt kết nối dây kết nối với chân TX0 và RX0 trước khi tải sketch lên. Sau khi tải lên thành công, hãy kết nối lại dây trên chân TX0 và RX0.

 

Sau khi tải lên, chúng ta có thể điều khiển LED tích hợp của một trong 2 bo bằng cách nhấn nút nhấn được kết nối với bo khác. Sketch của chúng ta sẽ kiểm tra trạng thái của nút và gửi giá trị ký tự tương ứng là "0" hoặc "1" cho bo kia để điều khiển đèn LED tích hợp.