# I2C Addresses and Troublesome Chips

## 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 peripheral") to a single I2C controller (a.k.a "I2C main") 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-main and 10-bit address devices but they are so rare and we've never seen them in practice)

![](https://cdn-learn.adafruit.com/assets/assets/000/044/476/medium800/sensors_i2cdemo_bb.png?1501383863)

[I2C demo fritzing file](https://cdn-learn.adafruit.com/assets/assets/000/044/477/original/i2cdemo.fzz?1501384471)
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](https://www.adafruit.com/product/2717) which will let you use one I2C address to talk to the multiplexer and tell it which line 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

# I2C Addresses and Troublesome Chips

## The List

Info: 

Warning: 

https://github.com/adafruit/I2C_Addresses/blob/main/special_cases.md

https://github.com/adafruit/I2C_Addresses/blob/main/0x00-0x0F.md

https://github.com/adafruit/I2C_Addresses/blob/main/0x10-0x1F.md

https://github.com/adafruit/I2C_Addresses/blob/main/0x20-0x2F.md

https://github.com/adafruit/I2C_Addresses/blob/main/0x30-0x3F.md

https://github.com/adafruit/I2C_Addresses/blob/main/0x40-0x4F.md

https://github.com/adafruit/I2C_Addresses/blob/main/0x50-0x5F.md

https://github.com/adafruit/I2C_Addresses/blob/main/0x60-0x6F.md

https://github.com/adafruit/I2C_Addresses/blob/main/0x70-0x7F.md

# I2C Addresses and Troublesome Chips

## Troublesome Chips

https://github.com/adafruit/I2C_Addresses/blob/main/troublesome_chips.md


## Related Guides

- [Adafruit INA219 Current Sensor Breakout](https://learn.adafruit.com/adafruit-ina219-current-sensor-breakout.md)
- [Adafruit HTU21D-F Temperature & Humidity Sensor](https://learn.adafruit.com/adafruit-htu21d-f-temperature-humidity-sensor.md)
- [Adafruit TSL2591 High Dynamic Range Digital Light Sensor](https://learn.adafruit.com/adafruit-tsl2591.md)
- [Adafruit BMP280 Barometric Pressure + Temperature Sensor Breakout](https://learn.adafruit.com/adafruit-bmp280-barometric-pressure-plus-temperature-sensor-breakout.md)
- [IS31FL3731 16x9 Charlieplexed PWM LED Driver](https://learn.adafruit.com/i31fl3731-16x9-charliplexed-pwm-led-driver.md)
- [Adafruit Si7021 Temperature + Humidity Sensor](https://learn.adafruit.com/adafruit-si7021-temperature-plus-humidity-sensor.md)
- [AM2315 - Encased I2C Temperature/Humidity Sensor](https://learn.adafruit.com/am2315-encased-i2c-temperature-humidity-sensor.md)
- [Air Quality Sensor 3D Printed Enclosure](https://learn.adafruit.com/air-quality-sensor-silo-house.md)
- [Use an art canvas to diffuse an RGB matrix](https://learn.adafruit.com/use-an-art-canvas-to-diffuse-rgb-matrix.md)
- [IoT Temperature Logger with Analog Devices ADT7410, Raspberry Pi, and Adafruit IO](https://learn.adafruit.com/iot-temperature-logger-with-python-and-adafruit-io.md)
- [STEMMA Lego base plates](https://learn.adafruit.com/stemma-lego-base-plates.md)
- [Feather + Raspberry Pi Weather Monitoring Network with LoRa or LoRaWAN](https://learn.adafruit.com/multi-device-lora-temperature-network.md)
- [USB MIDI Keyset Controller](https://learn.adafruit.com/midi-keyset.md)
- [Star Trek Data Dispenser](https://learn.adafruit.com/star-trek-data-dispenser.md)
- [NeoMatrix 8x8 Word Clock](https://learn.adafruit.com/neomatrix-8x8-word-clock.md)
- [CircuitPython OLED and Dual Knob Sketcher](https://learn.adafruit.com/circuitpython-oled-knob-sketcher.md)
- [CircuitPython Libraries on Linux and ODROID C2](https://learn.adafruit.com/circuitpython-libaries-linux-odroid-c2.md)
- [Arcade Fightstick](https://learn.adafruit.com/arcade-fightstick.md)
- [BLE Vibration Bracelet](https://learn.adafruit.com/ble-vibration-bracelet.md)
- [CircuitPython Libraries on Linux and Orange Pi](https://learn.adafruit.com/circuitpython-on-orangepi-linux.md)
- [CircuitPython Libraries on Linux and the NVIDIA Jetson Nano](https://learn.adafruit.com/circuitpython-libraries-on-linux-and-the-nvidia-jetson-nano.md)
- [Make your own PCB with Eagle, OSH Park, and Adafruit!](https://learn.adafruit.com/making-pcbs-with-oshpark-and-eagle.md)
