## Configuring I2C on the Raspberry Pi This guide assumes that release 2015-01-31 or later of the Raspbian Operating System is being used. An I2C bus is broken out to pins 3 (SDA) and 5 (SCL) on the P1 header. The number of steps that need to be performed to configure this I2C bus for usage by user `pi` on Raspbian without root privileges is highly dependent in the version of Raspbian being used. ### Configuring I2C with raspi-config With Raspbian Jessie 2015-11-21 or later the complete configuration can be performed with the `raspi-config` software configuration tool which can be run from a terminal window as follows: ``` sudo raspi-config ``` In the `raspi-config` user interface navigate to `Interfacing Options >> I2C` and answer the question `"Would you like the ARM I2C interface to be enabled?"` with ``. After the next reboot user `pi` will be able to use the I2C bus without root privileges. ### Configuring I2C Manually On older versions of Raspbian (prior to Raspbian Jessie 2015-11-21) the `raspi-config` tool can still be used to configure the I2C bus, but additional steps typically need to be performed. #### Step 1 - Enable I2C To enable I2C ensure that `/boot/config.txt` contains the following line: ``` dtparam=i2c_arm=on ``` #### Step 2 - Enable user space access to I2C To enable userspace access to I2C ensure that `/etc/modules` contains the following line: ``` i2c-dev ``` #### Step 3 - Setting the I2C baudrate The default I2C baudrate is 100000. If required, this can be changed with the `i2c_arm_baudrate` parameter. For example, to set the baudrate to 400000, add the following line to `/boot/config.txt`: ``` dtparam=i2c_arm_baudrate=400000 ``` #### Step 4 - I2C access without root privileges If release 2015-05-05 or later of the Raspbian Operating System is being used, this step can be skipped as user `pi` can access the I2C bus without root privileges. If an earlier release of the Raspbian Operating System is being used, create a file called `99-i2c.rules` in directory `/etc/udev/rules.d` with the following content: ``` SUBSYSTEM=="i2c-dev", MODE="0666" ``` This will give all users access to I2C and sudo need not be specified when executing programs using i2c-bus. A more selective rule should be used if required. #### Step 5 - Reboot the Raspberry Pi After performing the above steps, reboot the Raspberry Pi.