Overview

When people need to communicate with each other, we use language. If two people speak the same language, they can talk all they want about all sorts of topics. If they don't speak the same language, communication is difficult. Likewise, electronic parts need to communicate - and they also have their own languages. There are a few common languages that are spoken. The most popular ones are TTL Serial, SPI, I2C, I2S, 1-Wire, and Parallel (such as 8080 or 6800). Of these, Parallel and SPI can 'share a bus' using a select line - multiple devices can share the pins as long as they have a single pin that can be used to indicate who is permitted to speak at one time. 1-Wire and I2C are true shared-bus protocols - you can have 100+ components all talking at once using the same 2 wires (for I2C) or 1-wire (for the aptly-named 1-wire). 1-Wire is much slower than I2C and is a strongly-patented protocol owned by Maxim so you won't see a lot of devices out there other than Maxim/Dallas parts that use 1-wire.

I2C - Inter-Integrated Circuit communications!

This guide doesn't cover the nitty-gritty details of I2C, other than to note that you can connect multiple I2C devices (often referred to as "I2C slaves") to a single I2C controller (a.k.a "I2C master") using only two wires.

For example, in this diagram, one Metro (e.g. Arduino compatible) connects to 5 devices.

In general, you can only have one controller and up to 127 devices. (There are exceptions such as multi-master and 10-bit address devices but they are so rare and we've never seen them in practice)

I2C is incredibly popular because it uses only 2 wires, and like we said, multiple devices can share those wires, making it a great way to connect tons of sensors, drivers, expanders, without using all the microcontroller pins. The only bad news about I2C is that each I2C device must have a unique address - and the addresses only range from 0 to 127 (aka 0 to 0x7F hex). One thing this means is that if you have two accelerometers (lets say) and they both have address 0x22 you cannot have both of them on the same I2C lines.

There are a few work-arounds:

  • One is you might be able to power down or 'de-select' one sensor or another at a time.
  • Another is that some boards have an address-select line or jumper or other configuration. If you can set one to a different address you're good to go.
  • Some devices have a software-reprogrammable address, where they come up as one address on boot but can be told to change address. Oftentimes, the new address is forgotten on reboots, so you have to de-power all the other similarly-addressed devices while you do so.
  • You can use an I2C multiplexer like the TCA9548A which will let you use one I2C address to talk to the multiplexer and tell it which lane you want to enable

Since we deal with so many I2C devices we thought it would be handy to have a table with all the most common sensors and modules we encounter, and their I2C address!

Continue onto the next page to see our current list

The List

OMG Can you believe it? We didn't include every I2C device in the known universe! Fear not, if you post up in the Adafruit forums with your favorite I2C device and the 7-bit addresses they use, we'll update this list! (eventually)
All I2C addresses here are in 7-bit format

Special cases:

0x00 - 0x0F

0x00 - Reserved - General Call Address

0x01 - Reserved for CBUS Compatibility

0x02 - Reserved for I2C-compatible Bus Variants

0x03 - Reserved for Future Use

0x04, 0x05, 0x06, 0x07 - Reserved for Hs-mode Master

0x0E

  • MAG3110 3-Axis Magnetometer (0x0E only)

0x10 - 0x1F

0x11

0x13

0x18

0x19

0x1A

0x1B

0x1C

0x1D

0x1E

0x1F

0x20-0x2F

0x20

0x21

0x22

0x23

0x24

0x25

0x26

0x27

0x28

0x29

0x2A

0x2B

0x2C

0x2D

0x30 - 0x3F

0x34

0x38

0x39

0x3C

0x3D

0x40 - 0x4F

0x40

0x41

0x42

0x43

0x44

0x45

0x46

0x47

0x48

0x49

0x4A

0x4B

0x4C

0x4D

0x4E

0x4F

0x50 - 0x5F

0x50

0x51

0x52

0x53

0x54

0x55

0x56

0x57

0x58

0x5A

0x5B

0x5C

0x5D

0x60 - 0x6F

0x60

0x61

0x62

0x63

0x64

  • MCP4725A2 12-bit DAC (0x64 or 0x65)

0x65

  • MCP4725A2 12-bit DAC (0x64 or 0x65)

0x66

  • MCP4725A3 12-bit DAC (0x66 or 0x67)

0x67

  • MCP4725A3 12-bit DAC (0x66 or 0x67)

0x68

This address is really popular with real time clocks, almost all of them use 0x68!

0x69

0x6A

0x6B

0x70 - 0x7F

0x70

0x71

0x72

0x73

0x74

0x75

0x76

0x77

0x78 0x79 0x7A 0x7B - Reserved for 10-bit I2C Addressing

0x7C 0x7D 0x7E 0x7F - Reserved for Future Purposes