Hàng trăm giao thức truyền thông đã được xác định để đạt được sự trao đổi dữ liệu này. Mỗi giao thức có thể được phân loại thành một trong hai loại: song song hoặc nối tiếp.
Giao tiếp song song
Kết nối song song giữa Arduino và thiết bị ngoại vi thông qua các cổng đầu vào / đầu ra là giải pháp lý tưởng cho khoảng cách ngắn hơn lên đến vài mét. Tuy nhiên, trong các trường hợp khác khi cần thiết lập giao tiếp giữa hai thiết bị với khoảng cách xa hơn thì không thể sử dụng kết nối song song. Các giao diện song song truyền nhiều bit cùng một lúc. Chúng thường yêu cầu các bus dữ liệu – truyền qua tám, mười sáu hoặc nhiều dây hơn. Dữ liệu được truyền theo làn sóng lớn, đột ngột của 1 và 0.
Ưu điểm và nhược điểm của giao tiếp song song
Giao tiếp song song chắc chắn có lợi thế của nó. Nó nhanh hơn nối tiếp, đơn giản và tương đối dễ thực hiện. Tuy nhiên, nó yêu cầu nhiều cổng và đường truyền vào / ra (I / O). Nếu bạn đã từng phải chuyển một dự án từ Arduino Uno cơ bản sang Mega, bạn biết rằng các dòng I / O trên bộ vi xử lý có thể rất quý và rất ít. Do đó, chúng tôi thích giao tiếp nối tiếp hơn, hy sinh tốc độ tiềm năng cho bất động sản pin.
Mô-đun giao tiếp nối tiếp
Ngày nay, hầu hết các bo mạch Arduino được xây dựng với một số hệ thống khác nhau để giao tiếp nối tiếp như một thiết bị tiêu chuẩn.
Hệ thống nào trong số những hệ thống này được sử dụng phụ thuộc vào các yếu tố sau:
- Bộ vi điều khiển có bao nhiêu thiết bị để trao đổi dữ liệu?
- Việc trao đổi dữ liệu phải nhanh như thế nào?
- Khoảng cách giữa các thiết bị này là bao nhiêu?
- Có cần thiết phải gửi và nhận dữ liệu đồng thời không?
Một trong những điều quan trọng nhất liên quan đến truyền thông nối tiếp là Nghị định thư , cần được tuân thủ nghiêm ngặt. Đó là một tập hợp các quy tắc, phải được áp dụng để các thiết bị có thể diễn giải chính xác dữ liệu mà chúng trao đổi lẫn nhau. May mắn thay, Arduino tự động xử lý điều này, do đó công việc của lập trình viên / người dùng được giảm xuống đơn giản là ghi (dữ liệu được gửi) và đọc (dữ liệu nhận được).
Các loại truyền thông nối tiếp
Giao tiếp nối tiếp có thể được phân loại thêm là –
- Đồng bộ – Các thiết bị được đồng bộ hóa sử dụng cùng một đồng hồ và thời gian của chúng được đồng bộ hóa với nhau.
- Không đồng bộ – Các thiết bị không đồng bộ có đồng hồ riêng và được kích hoạt bởi đầu ra của trạng thái trước đó.
Rất dễ dàng để tìm ra một thiết bị có đồng bộ hay không. Nếu đồng hồ giống nhau được cấp cho tất cả các thiết bị được kết nối, thì chúng là đồng bộ. Nếu không có dòng đồng hồ, nó là không đồng bộ.
Ví dụ, mô-đun UART (Máy phát nhận không đồng bộ đa năng) là mô-đun không đồng bộ.
Giao thức nối tiếp không đồng bộ có một số quy tắc tích hợp sẵn. Những quy tắc này không có gì khác ngoài các cơ chế giúp đảm bảo truyền dữ liệu mạnh mẽ và không có lỗi. Những cơ chế mà chúng tôi nhận được để tránh tín hiệu đồng hồ bên ngoài, là –
- Đồng bộ hóa bit
- Các bit dữ liệu
- Bit chẵn lẻ
- Tốc độ truyền
Đồng bộ hóa bit
Các bit đồng bộ hóa là hai hoặc ba bit đặc biệt được chuyển với mỗi gói dữ liệu. Chúng là bit bắt đầu và (các) bit dừng. Đúng như tên gọi của chúng, các bit này lần lượt đánh dấu phần đầu và phần cuối của một gói tin.
Luôn chỉ có một bit bắt đầu, nhưng số lượng bit dừng có thể cấu hình thành một hoặc hai (mặc dù nó thường được để ở một). Bit bắt đầu luôn được biểu thị bằng một dòng dữ liệu nhàn rỗi đi từ 1 đến 0, trong khi (các) bit dừng sẽ chuyển trở lại trạng thái không tải bằng cách giữ dòng ở mức 1.
Bits dữ liệu
Số lượng dữ liệu trong mỗi gói có thể được đặt ở bất kỳ kích thước nào từ 5 đến 9 bit. Chắc chắn, kích thước dữ liệu tiêu chuẩn là byte 8 bit cơ bản của bạn, nhưng các kích thước khác có công dụng của chúng. Một gói dữ liệu 7-bit có thể hiệu quả hơn 8, đặc biệt nếu bạn chỉ chuyển các ký tự ASCII 7-bit.
Bit chẵn lẻ
Người dùng có thể chọn xem có nên có một bit chẵn lẻ hay không và nếu có, liệu chẵn lẻ nên là lẻ hay chẵn. Bit chẵn lẻ là 0 nếu số của 1 trong số các bit dữ liệu là số chẵn. Chẵn lẻ kỳ quặc thì ngược lại.
Tốc độ truyền
Thuật ngữ tốc độ truyền được sử dụng để biểu thị số lượng bit được truyền mỗi giây [bps]. Lưu ý rằng nó đề cập đến bit, không phải byte. Giao thức thường yêu cầu mỗi byte được chuyển cùng với một số bit điều khiển. Nó có nghĩa là một byte trong luồng dữ liệu nối tiếp có thể bao gồm 11 bit. Ví dụ: nếu tốc độ truyền là 300 bps thì tối đa 37 byte và tối thiểu 27 byte có thể được truyền mỗi giây.
Arduino UART
Đoạn mã sau sẽ khiến Arduino gửi lời chào thế giới khi nó khởi động.
void setup() {
Serial.begin(9600); //set up serial library baud rate to 9600
Serial.println("hello world"); //print hello world
}
void loop() {
}
Sau khi bản phác thảo Arduino đã được tải lên Arduino, hãy mở màn hình nối tiếp ở phần trên cùng bên phải của Arduino IDE.
Nhập bất kỳ thứ gì vào hộp trên cùng của Serial Monitor và nhấn gửi hoặc nhập trên bàn phím của bạn. Thao tác này sẽ gửi một loạt byte tới Arduino.
Đoạn mã sau trả về bất cứ thứ gì nó nhận được dưới dạng đầu vào. Đoạn mã sau sẽ làm cho Arduino cung cấp đầu ra tùy thuộc vào đầu vào được cung cấp.
void setup() {
Serial.begin(9600); //set up serial library baud rate to 9600
}
void loop() {
if(Serial.available()) //if number of bytes (characters) available for reading from {
serial port
Serial.print("I received:"); //print I received
Serial.write(Serial.read()); //send what you read
}
}
Lưu ý rằng Serial.print và Serial.println sẽ gửi lại mã ASCII thực, trong khi Serial.write sẽ gửi lại văn bản thực. Xem mã ASCII để biết thêm thông tin