Communication

1. SPI (Serial Peripheral Interface)

Mô tả:
  • SPI là một giao thức truyền thông đồng bộ sử dụng các dây dữ liệu để giao tiếp giữa một bộ vi điều khiển và các thiết bị ngoại vi (như cảm biến, bộ nhớ, v.v.).
  • SPI sử dụng 4 chân chính: MOSI (Master Out Slave In), MISO (Master In Slave Out), SCK (Serial Clock), và SS (Slave Select).
Cú pháp cơ bản:
#include <SPI.h>

SPI.begin();
SPI.transfer(data);
SPI.end();
  • SPI.begin(): Khởi tạo giao tiếp SPI.
  • SPI.transfer(data): Gửi và nhận dữ liệu qua giao thức SPI.
  • SPI.end(): Đóng giao tiếp SPI.
Ví dụ:
#include <SPI.h>

void setup() {
  Serial.begin(9600);
  SPI.begin();
  byte receivedData = SPI.transfer(0xFF); // Gửi dữ liệu 0xFF và nhận phản hồi
  Serial.println(receivedData, HEX); // In dữ liệu nhận được dưới dạng hex
}

void loop() {
  // Không có hành động gì trong loop
}
Chức năng:
  • Giao tiếp đồng bộ, dùng cho việc trao đổi dữ liệu tốc độ cao với các thiết bị ngoại vi như cảm biến, bộ nhớ.

2. Print

Mô tả:
  • Print là một lớp (class) cơ bản cho phép bạn gửi dữ liệu (chuỗi hoặc số) đến các thiết bị đầu ra như màn hình LCD, Serial Monitor, v.v.
  • Các hàm như print(), println() được kế thừa từ lớp Print.
Cú pháp cơ bản:
Serial.print(data);   // In dữ liệu mà không xuống dòng
Serial.println(data); // In dữ liệu và xuống dòng
  • print(): In dữ liệu mà không xuống dòng.
  • println(): In dữ liệu và xuống dòng.
Ví dụ:
void setup() {
  Serial.begin(9600);
  Serial.print("Hello, ");
  Serial.println("World!");
}

void loop() {
  // In ra "Hello, World!" và xuống dòng
}
Chức năng:
  • Gửi dữ liệu tới màn hình hoặc Serial Monitor, thường dùng để debug hoặc hiển thị thông tin.

3. Serial

Mô tả:
  • Serial là một giao thức giao tiếp nối tiếp giữa Arduino và máy tính. Nó cho phép truyền tải dữ liệu thông qua cổng USB, thường dùng để đọc và ghi dữ liệu trong quá trình phát triển.
  • Các hàm như Serial.begin(), Serial.print(), Serial.read() được sử dụng để giao tiếp qua cổng nối tiếp.
Cú pháp cơ bản:
Serial.begin(baudRate);  // Khởi tạo Serial với tốc độ truyền
Serial.print(data);      // In dữ liệu
Serial.read();           // Đọc dữ liệu từ Serial
Ví dụ:
void setup() {
  Serial.begin(9600);    // Khởi tạo giao tiếp Serial với tốc độ 9600
  Serial.println("Hello, Arduino!");
}

void loop() {
  // Đọc và in dữ liệu từ Serial
  if (Serial.available()) {
    char incomingData = Serial.read();
    Serial.print("Received: ");
    Serial.println(incomingData);
  }
}
Chức năng:
  • Giao tiếp nối tiếp với máy tính hoặc các thiết bị khác qua cổng USB.

4. Stream

Mô tả:
  • Stream là một lớp cơ bản trong Arduino, kế thừa bởi các lớp như Serial, Ethernet, WiFi, và File. Nó cho phép xử lý luồng dữ liệu (streaming) một cách dễ dàng.
  • Các hàm như available(), read(), write() là các phương thức của lớp Stream.
Cú pháp cơ bản:
Stream.read();    // Đọc 1 byte dữ liệu
Stream.write(data); // Gửi 1 byte dữ liệu
Stream.available(); // Kiểm tra xem có dữ liệu để đọc không
Ví dụ:
void setup() {
  Serial.begin(9600);
}

void loop() {
  if (Serial.available()) {
    char data = Serial.read();
    Serial.write(data); // Gửi lại dữ liệu nhận được
  }
}
Chức năng:
  • Xử lý luồng dữ liệu giữa các thiết bị, như đọc và ghi dữ liệu nối tiếp hoặc qua các giao thức mạng.

5. Wire (I2C Communication)

Mô tả:
  • Wire là thư viện để giao tiếp I2C giữa Arduino và các thiết bị ngoại vi như cảm biến hoặc màn hình. I2C sử dụng hai dây: SDA (Serial Data)SCL (Serial Clock).
Cú pháp cơ bản:
#include <Wire.h>

Wire.begin();            // Khởi tạo giao tiếp I2C
Wire.requestFrom(address, numBytes);  // Yêu cầu dữ liệu từ thiết bị ngoại vi
Wire.beginTransmission(address);  // Bắt đầu truyền dữ liệu đến thiết bị
Wire.write(data);        // Gửi dữ liệu
Wire.endTransmission();  // Kết thúc truyền
Ví dụ:
#include <Wire.h>

void setup() {
  Serial.begin(9600);
  Wire.begin();               // Khởi tạo giao tiếp I2C
  Wire.beginTransmission(0x3C); // Địa chỉ của thiết bị I2C
  Wire.write(0x01);           // Gửi dữ liệu
  Wire.endTransmission();     // Kết thúc truyền
}

void loop() {
  // Không có hành động gì trong loop
}
Chức năng:
  • Giao tiếp I2C với các thiết bị ngoại vi sử dụng hai dây (SDA và SCL).

Tóm tắt và Ứng dụng

Giao thức/Thư viện Mô tả Ví dụ sử dụng
SPI Giao thức đồng bộ cho truyền thông tốc độ cao giữa vi điều khiển và thiết bị ngoại vi. Giao tiếp với cảm biến hoặc bộ nhớ qua SPI.
Print In dữ liệu tới màn hình hoặc Serial Monitor. In dữ liệu ra Serial Monitor để debug hoặc hiển thị thông tin.
Serial Giao tiếp nối tiếp qua cổng USB giữa Arduino và máy tính. Gửi và nhận dữ liệu qua cổng USB cho mục đích debug hoặc truyền thông.
Stream Xử lý luồng dữ liệu, kế thừa bởi nhiều thư viện giao tiếp. Đọc và ghi dữ liệu nối tiếp trong các giao thức như Serial, Ethernet, WiFi.
Wire Giao tiếp I2C để kết nối với các thiết bị ngoại vi. Giao tiếp với các cảm biến hoặc màn hình qua I2C.