šŸ”— Protokol Komunikasi

UART, I2C, dan SPI — tiga cara MCU "berbicara" dengan chip lain.

šŸ“Œ 1. Kenapa Butuh Protokol Komunikasi?

Pin GPIO terbatas (14 di Uno). Solusinya: protokol serial — data dikirim bit demi bit lewat sedikit pin, dan banyak perangkat bisa berbagi jalur yang sama.

ProtokolKabelKecepatanPerangkat per busContoh
UART2 (TX, RX)9.600 - 921.600 bps 1 pasang (point-to-point)Serial Monitor, GPS, Bluetooth HC-05
I2C2 (SDA, SCL)100 / 400 kbps Banyak (alamat unik)MPU6050, RTC, LCD I2C, EEPROM
SPI4 (MOSI, MISO, SCK, CS)10+ Mbps Banyak (masing-masing CS)SD card, display TFT, flash

šŸ“Œ 2. UART: Komunikasi Paling Dasar

Koneksi UART cross wiring
UART antar dua board: TX ke RX, RX ke TX

UART (Universal Asynchronous Receiver-Transmitter) mengirim data bit demi bit tanpa kabel clock — kedua pihak harus sepakat baud rate (kecepatan bit/detik).

MCU A (TX) ──────────────> MCU B (RX) MCU A (RX) <────────────── MCU B (TX) Baud rate umum: 9600, 19200, 57600, 115200 Kesalahan baud rate = data jadi "sampah" (garbage)

UART adalah jalur Serial yang sudah kamu pakai. Di Arduino Uno, pin 0 (RX) dan 1 (TX) terhubung ke chip USB — itulah alasan Serial Monitor bekerja.

Protokol Perintah via UART

Pola umum: host (komputer/remote) mengirim perintah teks, MCU menafsirkannya. Ini fondasi banyak proyek IoT.

Output:

šŸ“Œ 3. I2C: Banyak Perangkat, Dua Kabel

I2C (I²C / I-squared-C) memakai 2 kabel: SDA (data) dan SCL (clock). Setiap perangkat punya alamat 7-bit unik (misal 0x68, 0x48). Master (MCU) memanggil alamat, lalu membaca/menulis register di perangkat itu.

SCL (clock) ā”Œā”€ā”€ā”€ā”€ā”¼ā”€ā”€ā”€ā”€ā”¼ā”€ā”€ā”€ā”€ā”¼ā”€ā”€ā”€ā”€ā” | | | | | [MCU] [0x68] [0x48] [0x50] <- master + 3 slave | | | | | ā””ā”€ā”€ā”€ā”€ā”¼ā”€ā”€ā”€ā”€ā”¼ā”€ā”€ā”€ā”€ā”¼ā”€ā”€ā”€ā”€ā”˜ SDA (data) Master: "Hei 0x48, baca register 0x00!" Slave 0x48: "Ini nilainya: 27"
Output:
šŸ’” Di Arduino asli, I2C dipakai lewat library Wire: Wire.beginTransmission(0x48); Wire.write(0x00); Wire.endTransmission(); Wire.requestFrom(0x48, 1); int v = Wire.read();

šŸ“Œ 4. SPI: Cepat dan Full-Duplex

SPI (Serial Peripheral Interface) memakai 4 kabel dan punya kabel clock — jadi jauh lebih cepat dari I2C, dan bisa kirim-terima secara bersamaan (full-duplex).

MOSI: Master Out Slave In (MCU -> perangkat) MISO: Master In Slave Out (perangkat -> MCU) SCK : clock (dikendalikan master) CS : Chip Select — satu per perangkat (aktif LOW) Kelemahan SPI: butuh 1 kabel CS per perangkat, dan tidak ada "alamat" — semua slave mendengar semua data!
Pilih UART jika...
Komunikasi point-to-point, kecepatan sedang, protokol teks sederhana (Serial Monitor, GPS, BLE).
Pilih I2C jika...
Banyak sensor berbagi bus, kecepatan tidak ekstrem, kabel seminimal mungkin.
Pilih SPI jika...
Butuh kecepatan tinggi / transfer data besar: SD card, layar TFT, flash memori, kamera.

🧠 Latihan

  1. Perluas protokol UART di atas: tambah perintah BRIGHT <0-255> yang mengatur PWM pin 9 (petunjuk: cmd.substring(7).toInt()).
  2. Buat simulasi I2C dengan 2 slave (0x48 sensor suhu, 0x50 RTC) — baca keduanya, cetak hasilnya.
  3. Jelaskan dengan kata-kamu sendiri kenapa SPI butuh kabel CS per perangkat.
  4. Hitung: pesan 100 byte lewat UART 9600 bps (1 start + 8 data + 1 stop bit) butuh berapa milidetik?