I2C atau IIC dari kepanjangan Inter Integrated Circuit. I2C adalah standar komunikasi serial dua arah yang menggunakan dua saluran untuk mengirim data (OUTPUT dari Master ke Slave) maupun menerima data (INPUT dari Slave ke Master). Sistem I2C terdiri dari saluran SCL (Serial Clock) dan SDA (Serial Data) yang membawa informasi data antara I2C dengan microcontroller -nya. Perangkat/device yang dihubungkan dengan sistem I2C Bus dapat dioperasikan sebagai Master dan Slave. Master adalah perangkat yang memulai transfer data pada I2C Bus dengan membentuk sinyal Start, mengakhiri transfer data dengan membentuk sinyal Stop, dan membangkitkan sinyal clock. Slave adalah perangkat yang dialamati oleh master.
Sinyal Start merupakan sinyal untuk memulai perintah yang didefinisikan sebagai perubahan tegangan (Volt) pada SDA dari nilai “1” menjadi “0” pada saat dimana SCL bernilai tegangan “1”. Sedangkan sinyal Stop merupakan sinyal untuk mengakhiri perintah yang didefinisikan sebagai perubahan tegangan SDA dari “0” menjadi “1” pada saat SCL “1”.

Selain sinyal Start dan Stop, ada juga sinyal Repetead Start. Kondisi start dapat diulangi selama transmisi tanpa perlu mengakhiri terlebih dahulu dengan kondisi Stop. Digunakan untuk mengubah arah transmisi data, mengulangi upaya transmisi, menyinkronkan beberapa IC, atau bahkan mengontrol memori serial.

I2C Bus sangat support bermacam device yang memiliki cara komunikasi I2C, pengalaman dari 0x00 sampai 0xFF bisa sampai 256 device berbeda addresses antara Master dan beberapa Slave. Namun di system I2C Bus ada pembatasan jumlah pengalamatan perangkat/device maksimal 128 address device.

Agar mudah dipahami, Master adalah device Core Processor/Micro Controller. I2C Bus Addresses pada Slave bekerja di 8 bit, namun tidak full 8 bit, karena inilah maksimal hanya 128 pengalamatan perangkat slave. Dimana 7 bit (MSB awal) adalah Slave Addresses sedangkan 1 bit terakhir merupakan perintah membaca atau menulis (RW).

Sebagai bentuk umpan balik, setiap transmisi byte, perangkat penerima mengirimkan bit Acknowledge Bit (ACK) atau Not Acknowledge Bit (NACK). ACK dihasilkan oleh penerima dengan menahan garis SDA rendah (bernilai “0”) selama periode SCL tinggi (bernilai “1”), sementara NACK dihasilkan ketika penerima meninggalkan garis SDA secara pasif ditarik tinggi dan tidak merespons dengan cara apa pun. Fakta ini menyiratkan bahwa sebagai respons terhadap byte alamat, semua SLAVE yang tidak cocok mengirim NACK dengan tidak merespons.
ACK digunakan untuk menunjukkan bahwa byte (alamat atau data) berhasil dikirimkan atau diterima, dan transmisi dapat berlanjut ke transfer byte berikutnya. Kondisi Stop atau Repetead Start. NACK umumnya digunakan oleh penerima untuk menunjukkan apakah kesalahan terjadi di suatu tempat dalam mentransmisikan data. Ini digunakan untuk memberi sinyal ke perangkat pemancar untuk segera menghentikan transmisi atau melakukan upaya lain dengan mengirimkan Repetead Start.

Dalam melakukan transfer data pada I2C Bus, kita harus mengikuti tata cara yang telah ditetapkan. Transfer data hanya dapat dilakukan ketikan Bus tidak dalam keadaan sibuk. Selama proses transfer data, keadaan data pada SDA harus stabil selama SCL dalam keadan tinggi. Keadaan perubahan “1” atau “0” pada SDA hanya dapat dilakukan selama SCL dalam keadaan rendah. Jika terjadi perubahan keadaan SDA pada saat SCL dalam keadaan tinggi, maka perubahan itu dianggap sebagai sinyal Start atau sinyal Stop.

I2C Bus di dunia IoT dipergunakan untuk mengatasi keterbatasan GPIO. Penggunaan perangkat Input seperti Sensor atau perangkat Output seperti Relay/TRIAC/IR yang begitu banyak dalam satu Mikrocontroller. Contohnya LCD Crystal atau LCD Olead, chip Input/Output extended seperti PCF8574 atau MCP23017, chip counter, dsb.