The __Inter-integrated Circuit (I²C) Protocol__ (pronounced ''I-squared-C'') is a hardware serial interface (or "protocol") intended to allow multiple "slave" components to communicate with one or more "master" components. It used across many microprocessors and microcontrollers, including the [Raspberry Pi]. I²C permits sensors and other IO devices to be connected to the controller (and/or each other) with only four wires (or really only ''two'' if you don't count Vcc and ground): # __3-6V__ (Vcc, red) # __SDA__ (Serial Data Line, blue) # __SCL__ (Serial Clock Line, yellow) # __GND__ (Ground, black) The colors listed are those used by Adafruit with their line of STEMMA Qt connectors. The Pimoroni "Breakout Garden" set of I²C sensors also includes an "__{{{INT}}}__" (interrupt) pin, ''AKA'' "{{{GCLK}}}" or "{{{GPIO4}}}". !! To View the Current I²C Devices To see what's connected on your Raspberry Pi, type (not including the {{{%}}} prompt): {{{ % i2cdetect -y 1 }}} and you'll see something like: {{{ 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- 14 15 -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- 28 -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 70: -- -- -- -- 74 75 -- 77 }}} !! Known I²C Devices Some well known I²C products (mostly a list of tested devices; there are thousands available). No two I²C may share the same address on an I²C bus, otherwise there will be contention. || Stock || Brand || Description || 7 bit address || Notes | 1 | Pimoroni | [RGB Potentiometer|https://shop.pimoroni.com/products/rgb-potentiometer-breakout] | 0x0E ‡ | uses [Nuvoton MS51|NuvotonMS51] | 1 | Pimoroni | [RGB Encoder|https://shop.pimoroni.com/products/rgb-encoder-breakout] | 0x0F ‡ | uses [Nuvoton MS51|NuvotonMS51] | 2 | PiBorg | [Thunderborg|https://www.piborg.org/motor-control-1135/thunderborg] | 0x10 / 0x11 † | dual motor controller | 0 | Adafruit | [VCNL4010 Proximity Sensor|https://www.adafruit.com/product/466] | 0x13 | infrared, 0-200mm range | 1 | Pimoroni | [IO Expander|https://shop.pimoroni.com/products/io-expander] | 0x18 ‡ | uses [Nuvoton MS51|NuvotonMS51] | 2 | Pimoroni | [LSM303D 6DoF Motion Sensor|https://shop.pimoroni.com/products/lsm303d-6dof-motion-sensor-breakout] | 0x1D / 0x1E † | | 1 | Adafruit | [BH1750 Light Sensor|https://www.adafruit.com/product/4681] | 0x23 / 0x5C | 16-bit Ambient Light Sensor | 1 | Pimoroni | [LTR-559 Light & Proximity|https://shop.pimoroni.com/products/ltr-559-light-proximity-sensor-breakout] | 0x23 | light detection; 0-50mm range proximity detection | 3 | Pimoroni | [VL53L1X Time of Flight|https://shop.pimoroni.com/products/vl53l1x-breakout] | 0x29 | range 40mm-4m; 0x29 conflicts with BNO055 | 1 | Adafruit | [BNO055 IMU Sensor|BNO055ImuSensor] | 0x28 / 0x29 † | 0x29 conflicts with VL531X | 0 | Adafruit | [VL53L0X Time of Flight Distance Sensor|https://www.adafruit.com/product/3317] | 0x29 | range 50-1200mm (2m on long range) | 1 | Adafruit | [VL6180X Time of Flight Distance Sensor|https://www.adafruit.com/product/3316] | 0x29 | range 5-100mm | 1 | PiBorg | [Ultraborg|https://www.piborg.org/sensors-1136/ultraborg] | 0x36 | | 2 | Pimoroni | [HT0740 10A Switch|https://shop.pimoroni.com/products/ht0740-breakout] | 0x38 / 0x39 † | | 1 | Adafruit | [INA260 Current Sensor|https://www.adafruit.com/product/4226] | 0x40 / 0x41 / 0x44 / 0x45 † | up to 4 devices via 2 jumpers | 2 | Pimoroni | [ADS1015 +/-24V ADC 3 Channel|Ads1015AnalogDigitalConverter] | 0x48 / 0x49 † | | 2 | Adafruit | [ADS1015 12 bit ADC 4 Channel w Prog Gain|https://www.adafruit.com/product/1083] | 0x48 - 0x4B † | | 1 | Adafruit | [9-DOF Orientation IMU Fusion Breakout - BNO085 (BNO080)|https://www.adafruit.com/product/4754] | 0x4A | | 1 | Pimoroni | [ICM20948 9-DOF Motion Sensor|https://shop.pimoroni.com/products/icm20948] | 0x68 / 0x69 † | | 2 | Pimoroni | [11x7 LED Matrix|https://shop.pimoroni.com/products/11x7-led-matrix-breakout] | 0x75 / 0x77 † | 77 will be in conflict with 5x5 | 4 | Pimoroni | [5x5 RGB Matrix|https://shop.pimoroni.com/products/5x5-rgb-matrix-breakout] | 0x74 / 0x77 † | 77 will be in conflict with 11x7 | 0 | Adafruit | LSM9DS1 Accel Gyro Mag Temp 9-DOF | 0x1C / 0x1E Accel, 0x6A / 0x6B for Gyro | | 1 | Pimoroni | [AS7262 6-channel Spectral Sensor (Spectrometer)|https://shop.pimoroni.com/products/as7262-6-channel-spectral-sensor-spectrometer-breakout] | 0x49 | 6 spectral channels (450, 500, 550, 570, 600, 650nm) † jumper selectable ‡ software configurable "Stock" is how many [Murray] has in his robot laboratory as part of exploratory design and development of the [KR01] robot. !! Links * [I2C|https://en.wikipedia.org/wiki/I%C2%B2C] on Wikipedia * [Configuring I2C|https://learn.adafruit.com/adafruits-raspberry-pi-lesson-4-gpio-setup/configuring-i2c] from AdaFruit * [I2C|https://learn.sparkfun.com/tutorials/i2c] on SparkFun * [Adafruit's I2C Address List|https://learn.adafruit.com/i2c-addresses/the-list] * [Raspberry Pi SPI and I2C Tutorial|https://learn.sparkfun.com/tutorials/raspberry-pi-spi-and-i2c-tutorial/all] * [Pi clock-stretching bug|https://www.advamation.com/knowhow/raspberrypi/rpi-i2c-bug.html] * [Adventures in I2C: clock stretching on the Raspberry Pi|https://www.recantha.co.uk/blog/?p=19880], A good article about the Pi and I2C * [Raspberry Pi slave library for Arduino|https://github.com/pololu/pololu-rpi-slave-arduino-library], Pololu's library for Pi to Arduino comms via I2c ---- [{Tag Hardware}]