GIAO TIẾP NỐI TIẾP UART
Xin chào các bạn!
Chào mừng các bạn đến với Bài 7-8: UART truyền nhận dữ liệu trong chuỗi bài học Arduino.
Ở bài học này, chúng ta sẽ học cách:
- Gửi dữ liệu từ máy tính đến Arduino qua cổng Serial
- Arduino sẽ đọc dữ liệu này, sau đó bật hoặc tắt LED tương ứng
- Cụ thể, khi gửi ký tự ‘1’, LED sẽ bật, và khi gửi ‘0’, LED sẽ tắt
🛠️ PHẦN 1: CHUẨN BỊ MẠCH
Truy cập https://www.tinkercad.com
🔧 Linh kiện cần có:
- Arduino UNO
- LED
- 1 điện trở 220Ω
- Dây nối
🔌 Cách nối mạch:
- Chân dài (dương) của LED → qua điện trở 220Ω → nối với chân D13 trên Arduino
- Chân ngắn (âm) của LED → nối về GND
👉 Đây là mạch cơ bản, LED nối với D13 – chúng ta sẽ điều khiển nó qua Serial Monitor.
💻 PHẦN 2: VIẾT CHƯƠNG TRÌNH
✏️ Mã chương trình:
void setup() {
Serial.begin(9600); // Bắt đầu giao tiếp Serial với baudrate 9600
pinMode(13, OUTPUT); // Thiết lập chân D13 là OUTPUT
}
void loop() {
if (Serial.available()) { // Nếu có dữ liệu nhận được từ máy tính
char c = Serial.read(); // Đọc 1 ký tự
if (c == '1') // Nếu là '1'
digitalWrite(13, HIGH); // Bật LED
else if (c == '0') // Nếu là '0'
digitalWrite(13, LOW); // Tắt LED
}
}
🧠 GIẢI THÍCH CHƯƠNG TRÌNH:
Serial.begin(9600)
: thiết lập tốc độ truyền là 9600 bpsSerial.available()
: kiểm tra xem có dữ liệu từ máy tính gửi đến khôngSerial.read()
: đọc từng ký tự đơn từ luồng dữ liệudigitalWrite()
điều khiển LED dựa trên ký tự nhận được
📌 Lưu ý: Arduino xử lý dữ liệu ký tự, nên ‘1’ và 1 là khác nhau. Bạn cần gửi đúng ký tự chuỗi, không phải số.
▶️ PHẦN 3: CHẠY MÔ PHỎNG TRÊN TINKERCAD
🟢 Thực hiện như sau:
- Nhấn Start Simulation
- Nhấn vào nút Serial Monitor ở góc trên bên phải (biểu tượng màn hình)
- Tại ô nhập lệnh bên dưới, chọn “No line ending”, tốc độ 9600 baud
- Nhập ký tự:
- Gửi ‘1’ rồi nhấn Enter → LED sẽ sáng
- Gửi ‘0’ rồi nhấn Enter → LED sẽ tắt
🎉 Vậy là bạn đã điều khiển được LED bằng lệnh từ máy tính thông qua UART!
🎯 PHẦN 4: TỔNG KẾT
Sau bài học này, bạn đã nắm được:
- Cách thiết lập giao tiếp UART (Serial) giữa Arduino và máy tính
- Cách dùng Serial Monitor để gửi dữ liệu điều khiển thiết bị
- Cách xử lý dữ liệu ký tự để điều khiển đầu ra (ở đây là LED)
📘 Gợi ý mở rộng:
- Gửi các ký tự khác như ‘A’, ‘B’ để điều khiển nhiều thiết bị
- Dùng
Serial.print()
để Arduino phản hồi ngược lại lên máy tính - Kết hợp với nút nhấn và cảm biến để gửi dữ liệu ngược từ Arduino về PC
BÀI TẬP THỰC HÀNH
🧪 Bài 1: Gửi phản hồi trạng thái LED về Serial Monitor
Mô tả:
- Khi gửi ‘1’ hoặc ‘0’, LED bật/tắt như bài 7-8
- Arduino gửi lại phản hồi “LED ON” hoặc “LED OFF” lên Serial Monitor
Gợi ý:
if (c == '1') {
digitalWrite(13, HIGH);
Serial.println("LED ON");
} else if (c == '0') {
digitalWrite(13, LOW);
Serial.println("LED OFF");
}
✅ Kỹ năng: Truyền dữ liệu hai chiều, phản hồi lệnh – nền tảng cho giao tiếp máy chủ – thiết bị.
🧪 Bài 2: Nhập số qua Serial để nhấp nháy LED
Mô tả:
- Gửi một số nguyên bất kỳ từ Serial Monitor (ví dụ:
5
) - Arduino cho LED nhấp nháy đúng số lần tương ứng
Gợi ý: Đọc chuỗi số bằng Serial.readStringUntil('\n')
, chuyển sang int
rồi dùng vòng for
.
✅ Kỹ năng:
- Nhận và xử lý số nhiều ký tự (string → số)
- Ứng dụng điều khiển bằng tham số
🧪 Bài 3: Gửi chuỗi lệnh và phân tích từng ký tự
Mô tả:
- Gửi chuỗi như
"10101"
- Arduino đọc từng ký tự trong chuỗi, với mỗi ký tự:
- ‘1’ → LED sáng
- ‘0’ → LED tắt
- Delay 500ms giữa mỗi ký tự
Gợi ý: Dùng Serial.readString()
→ for
duyệt chuỗi → xử lý từng ký tự.
✅ Kỹ năng: Phân tích và xử lý chuỗi lệnh điều khiển phức tạp
🧪 Bài 4: Gửi nhiệt độ giả lập từ Arduino về Serial
Mô tả:
- Mỗi 2 giây, Arduino gửi ngẫu nhiên một số (giả lập nhiệt độ) về Serial Monitor
- Ví dụ: “NHIET DO: 28°C”
Gợi ý: Dùng random(25, 35)
và Serial.println()
trong chu kỳ millis()
2000ms.
✅ Kỹ năng: Gửi dữ liệu cảm biến (giả lập) – ứng dụng giám sát từ xa.
🧪 Bài 5: Menu điều khiển qua Serial
Mô tả:
- Gửi lệnh:
1
→ Bật LED2
→ Tắt LED3
→ Nhấp nháy 3 lần?
→ In menu hướng dẫn
Gợi ý: Mỗi lệnh là 1 case
trong if-else
hoặc switch-case
, in menu khi bắt đầu.
✅ Kỹ năng: Thiết kế giao diện điều khiển qua Serial, mô phỏng menu hệ thống nhúng.