Skip to main content

A useful i2c package for Pi

Project description

pyi2c logo

A useful i2c Python3 package for Pi

It is a simple I2C interface based on smbus2.

1. Installation

Via pip

pip3 install pyi2c

2. API and example

2.1 I2C(bus_n)

from pyi2c import I2C

# Create i2c
BUS_N = 0 # 0 or 1 or 2. Change this to yours
i2c = I2C(BUS_N)

ADDR = 0x38 # Change this to yours

2.1.1 status_code

Return

  • {StatusCode.success: 0}
  • {StatusCode.ready: 1}
  • {StatusCode.fail: 9}
print( i2c.status_code )
# => {StatusCode: 1}

To get the value, use .value

print( i2c.status_code.value )
# => 1

if i2c.status_code.value == 1:
    print('ready')

2.1.2 scan()

Scan all I2C devices on the same BUS.

Return list of integer (address in byte)

print( i2c.scan() )
    00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
00: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- 38 -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- 5a -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
80: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
[56, 90]

2.1.3 write(ADDR, data)

Return nothing

  • data can be a byte or list of bytes.
WRITE0 = 0x00 # Change this to yours
i2c.write(ADDR, WRITE0)

# or write multi bytes, up to 64 bytes
WRITE1 = 0x01 # Change this to yours
i2c.write(ADDR, [WRITE0, WRITE1])

2.1.4 read(ADDR, byte_size=1)

Return integer (a byte), or list of integers (bytes) if byte_size >= 0

  • byte_size can be empty (default is 1)
read_data = i2c.read(ADDR)

# or set length of reading bytes
byte_size = 2
read_data = i2c.read(ADDR, byte_size)
print( len(read_data) )
# 2

2.1.5 writeread(ADDR, data, byte_size=1)

Return integer (a byte), or list of integer (bytes) if byte_size >= 0

  • data can be a byte or list of bytes.
  • byte_size can be empty (default is 1)
# First write and read rapidly one byte
read_data = i2c.writeread(ADDR, WRITE0)

# These also work
read_data = i2c.writeread(ADDR, [WRITE0, WRITE1])
read_data = i2c.writeread(ADDR, [WRITE0, WRITE1], byte_size)

2.2 I2CDevice(bus_n, addr)

It is extension of I2C, but contains a I2C device's address. So it is not need to write address any more after declare.

from pyi2c import I2CDevice

BUS_N = 0
ADDR = 0x38

aht10 = I2CDeivce(BUS_N, ADDR)

2.2.1 status_code

As the same as status_code in I2C.

2.2.2 write(data)

As the same as write(addr, data) in I2C, but does not need address.

2.2.3 read(byte_size=1)

As the same as read(addr, byte_size) in I2C, but does not need address.

2.2.4 writeread(data, byte_size=1)

As the same as writeread(addr, data, byte_size=1) in I2C, but does not need address.

2.3 getBit(byte, bin_n, bin_m=-1)

Return integer (a bit or bits)

  • bin_n should be >= 0
  • bin_m can be empty (default is -1 but will overwrote with bin_n)
  • bin_n or bin_m can be larger than byte's size
from pyi2c import getBit

byte = 0x5a # Any byte data
print( bin(byte) )
# '0b1011010'
  • Get bit #n of byte
print( getBit(byte, 0) )
# 0

print( getBit(byte, 1) )
# 1
  • Get multi bits from #n to #m of byte
print( getBit(byte, 4, 3) )
# 3 = 0b10
print( getBit(byte, 3, 4) )
# 3 = 0b10, the same as previous

  • Recommend usage
if getBit(byte, 4) == 0b1:
    print('hoge')
# 'hoge'

For developers

Build

python3 -m build

Upload

python3 -m twine upload dist/*

Reference

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

pyi2c-0.3.1.tar.gz (4.8 kB view details)

Uploaded Source

Built Distribution

pyi2c-0.3.1-py3-none-any.whl (5.0 kB view details)

Uploaded Python 3

File details

Details for the file pyi2c-0.3.1.tar.gz.

File metadata

  • Download URL: pyi2c-0.3.1.tar.gz
  • Upload date:
  • Size: 4.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.3 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.8.10

File hashes

Hashes for pyi2c-0.3.1.tar.gz
Algorithm Hash digest
SHA256 be64800f6fc098783cd1a8bf4e9d51ecba56dc524a7fd792742cea22e8b1a4d2
MD5 7ef0f64181fb6d6d03a3f2dd23eee5da
BLAKE2b-256 265a27f7b1248b3a4515d441b26385cb256b00630c8cb64ea9cc9c828401d882

See more details on using hashes here.

File details

Details for the file pyi2c-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: pyi2c-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 5.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.6.3 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.8.10

File hashes

Hashes for pyi2c-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 064a92ddb0ec6ac6bfe32260717cf83bb9a716c0033e534d03d0e63eac36b2eb
MD5 f289b808ed2a15e911236f4682ab046e
BLAKE2b-256 70c66e74d5f9ce40a36ba62d9ef29bcaf807b79d5ea60aa641e1f33421c99be5

See more details on using hashes here.

Supported by

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