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 removed 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].
At line 3 removed 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):
At line 5 changed 4 lines
# __3-6V__ (Vcc, red)
# __SDA__ (Serial Data Line, blue)
# __SCL__ (Serial Clock Line, yellow)
# __GND__ (Ground, black)
Some well known I2C products.
At line 10 removed 7 lines
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):
At line 18 changed 14 lines
% 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
}}}
Brand Description 7 bit address Range
1 Pimoroni LTR-559 Light & Proximity 0x23
1 Pimoroni VL53L1X Time of Flight (ToF) 0x29 40mm-4m
1 Adafruit VL6180X Time of Flight Distance Sensor 0x29 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
At line 19 added 4 lines
w Adafruit BNO055 Absolute Orientation Sensor 0x28 / 0x29
Adafruit VCNL4010 Proximity Sensor 0x13
Adafruit LSM9DS1 Accel Gyro Mag Temp 9-DOF 0x1C / 0x1E Accel, 0x6A / 0x6B for Gyro
Adafruit VL53L0X Time of Flight Distance Sensor 0x29 50-1200mm (2m on long range)
At line 34 removed one line
!! Known I²C Devices
At line 36 changed 46 lines
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}]
}}}