This page (revision-21) was last changed on 2021-11-21 04:33 by Murray Altheim

This page was created on 2019-12-26 08:51 by Murray Altheim

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Page revision history

Version Date Modified Size Author Changes ... Change note
21 2021-11-21 04:33 6 KB Murray Altheim to previous

Page References

Incoming links Outgoing links

Version management

Difference between version and

At line 1 changed one line
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].
__I2C__ is a [hardware] bus used across many microprocessors and microcontrollers, including the [Raspberry Pi].
It 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):
At line 3 changed one line
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):
# Vcc (3-6v)
# SDA
# SCL
# Gnd (Ground)
At line 5 changed 4 lines
# __3-6V__ (Vcc, red)
# __SDA__ (Serial Data Line, blue)
# __SCL__ (Serial Clock Line, yellow)
# __GND__ (Ground, black)
The Pimoroni "Breakout Garden" set of I2C sensors also includes an "{{{INT}}}" (interrupt) pin, ''AKA'' "{{{GCLK}}}" or "{{{GPIO4}}}".
At line 10 changed one line
The colors listed are those used by Adafruit with their line of STEMMA Qt connectors.
Some well known I2C products:
At line 12 changed 48 lines
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
|| Stock || Brand || Description || 7 bit address || Notes
| 1 | Pimoroni | LTR-559 Light & Proximity | 0x23 |
| 1 | Pimoroni | VL53L1X Time of Flight (ToF) | 0x29 | range 40mm-4m
| 1 | Adafruit | VL6180X Time of Flight Distance Sensor | 0x29 | range 5-100mm
| 1 | Pimoroni | 11x7 LED Matrix #1 | 0x75 |
| 1 | Pimoroni | 11x7 LED Matrix #2 | 0x77 |
| 1 | Pimoroni | 5x5 RGB Matrix | 0x74 / 0x77 | 77 will be in conflict with 11x7 #2
| 1 | Pimoroni | ADS1015 +/-24V ADC 3 Channel | 0x48 / 0x49 |
| 2 | Adafruit | ADS1015 12 bit ADC 4 Channel w Prog Gain | 0x48 - 0x4B (jumpers) |
| 1 | PiBorg | Thunderborg | 0x10 / 0x11 |
| 1 | PiBorg | Ultraborg | 0x36 |
| 1 | Pimoroni | ICM20948 9-DOF Motion Sensor | 0x68 / 0x69 |
| 1 | Adafruit | BNO055 Absolute Orientation Sensor | 0x28 / 0x29 |
| 0 | Adafruit | VCNL4010 Proximity Sensor | 0x13 |
At line 61 changed one line
| 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)
| 0 | Adafruit | VL53L0X Time of Flight Distance Sensor | 0x29 | range 50-1200mm (2m on long range)
At line 63 removed 3 lines
† jumper selectable
‡ software configurable
At line 68 removed 11 lines
!! 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