Arduino - Giao tiếp

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à các 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 xe buýt 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 một bộ vi xử lý có thể rất quý giá 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 bảng 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 đượ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 giao tiếp nối tiếp là Protocol, 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à -

  • Synchronous - 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.

  • Asynchronous - 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à 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 là gì 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ế này, 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 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 thành 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à 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. Điều này sẽ gửi một loạt byte đến Arduino.

Đoạn mã sau trả về bất cứ thứ gì nó nhận được làm đầ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
   }
}

Thông báo rằng Serial.printSerial.println sẽ gửi lại mã ASCII thực, trong khi Serial.writesẽ gửi lại văn bản thực tế. Xem mã ASCII để biết thêm thông tin.