Tài liệu học
Cheat sheet giao tiếp I2C cơ bản
I2C là gì, địa chỉ thiết bị, điện trở kéo lên, cách quét địa chỉ khi ghép nhiều module.

I2C là gì
- Chuẩn giao tiếp 2 dây: SDA (dữ liệu) và SCL (xung nhịp), cộng thêm GND chung — cho phép nhiều thiết bị dùng chung 1 bus mà chỉ tốn 2 chân tín hiệu trên vi điều khiển
Địa chỉ thiết bị
- Mỗi thiết bị I2C có 1 địa chỉ 7-bit riêng (0–127), một số thiết bị cho phép đổi địa chỉ qua chân/jumper để tránh trùng khi ghép nhiều module cùng loại trên 1 bus
- Ví dụ các module dùng trong site: MPU6050 (0x68 hoặc 0x69 tùy chân AD0), màn hình LCD1602 I2C backpack (thường 0x27 hoặc 0x3F tùy nhà sản xuất)
Điện trở kéo lên (pull-up)
- Bus I2C cần điện trở kéo lên trên cả SDA và SCL (phổ biến 4.7kΩ) để đường tín hiệu ở mức HIGH khi rảnh — đa số module breakout đã tích hợp sẵn điện trở này, chỉ cần lưu ý nếu tự làm mạch từ IC trần
Chân mặc định
- Arduino Uno: A4 = SDA, A5 = SCL
- ESP32: mặc định GPIO21 = SDA, GPIO22 = SCL (có thể cấu hình lại chân khác qua Wire.begin(sda, scl))
Quét địa chỉ I2C (I2C scanner)
- Khi không chắc địa chỉ chính xác của module đang dùng, nên chạy sketch "I2C scanner" (có sẵn nhiều mẫu công khai) để quét và liệt kê toàn bộ địa chỉ đang phản hồi trên bus — cách nhanh nhất để xác nhận module có kết nối đúng hay không