I2C bus and level shifting

The I2C bus consists of two wires, one data (SDA), and one clock (SCL). Both are passively pulled to VCC (on the Raspberry Pi, this is 3.3 V) with pull-up resistors. The Raspberry Pi will control the clock by pulling it low every cycle and the data line can be pulled low by Raspberry Pi to send commands or by the connected device to respond with data:

The Raspberry Pi I2C pins include pull-up resistors on SDA and SCL

Since the slave devices can only pull the data line to GND, the device may be powered by 3.3 V or even 5 V without the risk of driving the GPIO pins too high (remember that the Raspberry Pi GPIO is not ...

Get Raspberry Pi 3 Cookbook for Python Programmers - Third Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.