Chuẩn giao tiếp truyền thông nối tiếp UART trên Arduino (hay còn được biết đến với tên gọi Serial) là chuẩn giao tiếp rất phổ biến trong các ứng dụng hệ thống nhúng. Trong bài viết này, mình sẽ hướng dẫn các bạn tiếp cận và lập trình với giao tiếp UART một cách đơn giản nhất.
Khai báo UART
Có hai cách để khai báo sử dụng UART trên Arduino, nhưng phổ biến nhất là sử dụng lệnh Serial.begin(9600)
, trong đó 9600 là tốc độ baud và sử dụng khung truyền mặc định 8-N-1 (8 bit dữ liệu, không kiểm tra chẵn lẻ, 1 bit kết thúc). Đồng thời, việc khai báo này cũng chuyển chân digital 0 và digital 1 thành chức năng truyền nhận dữ liệu: Chân digital 0 được gắn với bộ nhận dữ liệu và chân digital 1 được nối với bộ truyền dữ liệu.
Bạn đang xem: Truyền nhận dữ liệu với giao tiếp Serial (UART) trên Arduino
Nối dây 2 thiết bị
Nếu bạn sử dụng Board Arduino để giao tiếp với máy tính (sử dụng cửa sổ Serial monitor trên ARDUINO IDE) thì không cần phải nối thêm gì cả, vì trên board Arduino đã thực hiện sẵn việc đó. Chỉ cần cắm cable USB vào là được.
Nếu bạn sử dụng Arduino để giao tiếp với một thiết bị hoặc module khác, bạn cần nối chéo TX – RX và RX – TX. Đồng thời, hãy kiểm tra xem hai thiết bị đã chung chân GND chưa, vì nếu không, chúng sẽ không hiểu mức logic của nhau và không thể giao tiếp được. Nếu hai thiết bị có mức logic khác nhau, ví dụ như một thiết bị 5V giao tiếp với một thiết bị 3.3V, bạn cần sử dụng các mạch chuyển đổi điện áp để đảm bảo tương thích.
Truyền dữ liệu
Để truyền dữ liệu, bạn sử dụng hàm Serial.print(x)
, trong đó x
có thể là bất kỳ kiểu dữ liệu nào. Nếu bạn muốn truyền thêm ký tự kết thúc câu (r
) và ký tự xuống dòng (n
), hãy sử dụng Serial.println(x)
.
Nhận dữ liệu
Nền tảng Arduino đã hỗ trợ người dùng rất nhiều khi đã xây dựng sẵn một bộ đệm UART (buffer) có kích cỡ 64 byte (Arduino Uno). Mỗi lần nhận một ký tự, ký tự này sẽ được tự động chuyển vào bộ đệm. Để đọc dữ liệu, bạn có thể làm việc với bộ đệm bằng cách sử dụng các lệnh sau:
-
Kiểm tra bộ đệm: Trước khi thực hiện thao tác đọc và xử lý dữ liệu từ thiết bị khác, hãy kiểm tra bộ đệm trước. Lệnh
Serial.available()
sẽ trả về số ký tự hiện có trong bộ đệm. Bạn có thể sử dụng lệnhif(Serial.available())
để đọc và xử lý dữ liệu khi có dữ liệu. -
Đọc dữ liệu: Để đọc một byte từ bộ đệm, bạn sử dụng lệnh
Serial.read()
. Tuy nhiên, hầu hết chúng ta thường cần đọc một chuỗi ký tự. Bạn có thể đọc từng ký tự rồi ghép chúng thành một chuỗi, hoặc sử dụng kiểu dữ liệuString
mà Arduino hỗ trợ. LệnhSerial.readString()
sẽ giúp bạn đọc tất cả các ký tự trong bộ đệm.
Lưu ý: Bộ đệm UART sẽ mất dữ liệu ngay sau khi bạn đọc. Vì vậy, bạn nên đọc và lưu vào biến để làm việc với dữ liệu.
Kiểu String
Kiểu dữ liệu String
trong Arduino giúp người dùng thao tác với chuỗi đơn giản hơn bằng rất nhiều hàm hỗ trợ. Dưới đây là một số hàm phổ biến mà bạn thường gặp:
-
myString.indexOf(val)
: Hàm này giúp bạn tìm vị trí của một ký tự hoặc một chuỗi (val
) trong một chuỗi khác (myString
). -
myString.toInt()
: Khi bạn gửi chuỗi “168” từ Serial Monitor, Arduino sẽ nhận được chuỗi này. Để chuyển đổi thành số 168, bạn sử dụng hàmtoInt()
. -
substring()
: Trong một chuỗi dữ liệu lớn, có thể có một phần dữ liệu mà bạn cần tách ra để sử dụng. Lúc này, hàmsubstring()
sẽ giúp bạn. -
myString.toCharArray()
: Hàm này giúp bạn chuyển đổi chuỗi từ kiểuString
thành một mảng kiểu char. Khi làm việc với một số thư viện, bạn cần truyền vào kiểuchar *
hoặc mảng char, không sử dụng kiểuString
. Việc chuyển đổi kiểu dữ liệu này là cần thiết. Khi chuyển đổiString
thành mảng, bạn có thể sử dụng hàmlength()
để xác định số lượng phần tử của mảng (nhớ cộng thêm 1 vì mảng kiểu char cần có ký tự Null để kết thúc).
Nếu có thắc mắc gì, hãy bình luận để thảo luận thêm. Chúc các bạn thành công!
Thuong Nguyen
Nguồn: https://izumi.edu.vn/
Danh mục: Tài liệu điện