Skip to main content

An easy to use USB to I2C adapter using a Raspberry Pico or similar boards.

Project description

A Simple USB to I2C Adapter

The I2C Adapter allows python programs to connect to I2C/QUIIC/STEMMA-QT devices using off the shelf low cost boards such the Raspberry Pico or SparkFun Pro Micro - RP2040. The I2C adapter appears on the computer as a serial port (no device installation required) and acts as a USB to I2C bridge, and this Python package provides an easy to use API to interact with it using high level commands.

For example, the schematic below shows the wiring for the oled_demo.py example which drive an I2C OLED display using an I2C Adapter and the luma.oled python package.



Highlights

  • Provides USB to I2C-master bridge.
  • Supports Windows/Mac/Linux.
  • Uses low cost low cost off-the-shelf boards as adapters.
  • Does not require driver installation (it appears on the computer as standard a serial port).
  • Comes with an easy to use Python API.
  • Easy to modify/extend and to adapt to new hardware.
  • Permissive open source license. Comercial use OK, sharing and attribution not required.

Python API Example

Package installation

pip install i2c-adapter --upgrade

In the example below, we use an I2C Adapter that appears as serial port "COM7" to access an I2C device at address 0x08. First we write a single byte 0x00 and then read 20 bytes. Upon completion, the 'data' variable contains a bytearray with 20 bytes.

from i2c_adapter import I2cAdapter

i2c = I2cAdapter(port="COM7")
i2c_addr = 0x08
assert i2c.write(i2c_addr, bytearray([0]))
data = i2c.read(i2c_addr,  20)
print(data)

In the example below we scan the I2C bus address range 0x00 to 0x7f and look for devices that response to an empty write.

from i2c_adapter import I2cAdapter

i2c = I2cAdapter(port="COM18")
print(f"Scanning I2C bus 0x00 to 0x7f:")
for adr in range(0, 127):
    if i2c.write(adr, bytearray([0]), silent=True):
      print(f"  - Device at 0x{adr:02x}")

LED Status

I2C Adapter state Raspberry Pi LED state
Idle, waiting for a command. A short blink every two seconds.
Performing a command. On.
Firmware flashing mode. Off

Connecting your I2C Adapter


IMPORTANT

**Do not to exceed the maximal voltage of your board. If needed, use a bidirectional I2C level shifter such as https://www.adafruit.com/product/5649.


Flash your board with the corresponding firmware from https://github.com/zapta/i2c_adapter/tree/main/firmware/release and connect according to the table below:

SDA SCL Internal Pullups Max Voltage
Raspberry Pico GP4 GP5 No 3.3V
Sparkfun Pro Micro RP2040 Qwicc SDA Qwicc SCL 2.2K 3.3V
Adafruit KB2040 Qwicc SDA Qwicc SCL No 3.3V
Adafruit QT Py RP2040 Qwicc SDA Qwicc SCL No 3.3V

The wire protocol

See comments in the firmware source code.

For firmware developers

We use Visual Code Studion with the Platformio plug in to develope the firmware. Once you install both, clone this repository https://github.com/zapta/i2c_adapter on your machine and use the Menu | File | Open Folder option to open the firmware/platformio directory in the repository. Platformio take a few minutes do configure your environment and you will be able to edit/compile/upload code. Building firmware releases is done by running the Python script build_envs.py.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

i2c_adapter-0.2.6.tar.gz (7.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

i2c_adapter-0.2.6-py3-none-any.whl (7.7 kB view details)

Uploaded Python 3

File details

Details for the file i2c_adapter-0.2.6.tar.gz.

File metadata

  • Download URL: i2c_adapter-0.2.6.tar.gz
  • Upload date:
  • Size: 7.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.1

File hashes

Hashes for i2c_adapter-0.2.6.tar.gz
Algorithm Hash digest
SHA256 14d8c8a69f3beb7968ce8228649274dfcf7f1924fe7953ff61c2534458ca95c0
MD5 82677479317af950d7d5ff79458d70ea
BLAKE2b-256 445453a9d30b7ed2225b10301b62e029996ad44f67aaff2c529451cf13cf0021

See more details on using hashes here.

File details

Details for the file i2c_adapter-0.2.6-py3-none-any.whl.

File metadata

  • Download URL: i2c_adapter-0.2.6-py3-none-any.whl
  • Upload date:
  • Size: 7.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.1

File hashes

Hashes for i2c_adapter-0.2.6-py3-none-any.whl
Algorithm Hash digest
SHA256 e30d525f33908220a7eb7212e6d9d1f83fd0e60ef3f84c449bdf0e31805518cd
MD5 2cc5a26654a005f38f2f2cc6a905a17b
BLAKE2b-256 bc8fcf64f52e513b179bb944ad460be3197623d84c9a30f659ea53624de0e49e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page