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
datacan 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_sizecan 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
datacan be a byte or list of bytes.byte_sizecan 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_nshould be>= 0bin_mcan be empty (default is -1 but will overwrote withbin_n)bin_norbin_mcan 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
Release files for pyi2c 0.3.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pyi2c-0.3.1.tar.gz | 4.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pyi2c-0.3.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 9.9 kB
Release files / pyi2c-0.3.1.tar.gz
| Download URL | pyi2c-0.3.1.tar.gz |
|---|---|
| Size | 4.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
be64800f6fc098783cd1a8bf4e9d51ecba56dc524a7fd792742cea22e8b1a4d2
|
|
BLAKE2b-256 checksum How to use checksums |
265a27f7b1248b3a4515d441b26385cb256b00630c8cb64ea9cc9c828401d882
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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
|
Release files / pyi2c-0.3.1-py3-none-any.whl
| Download URL | pyi2c-0.3.1-py3-none-any.whl |
|---|---|
| Size | 5.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
064a92ddb0ec6ac6bfe32260717cf83bb9a716c0033e534d03d0e63eac36b2eb
|
|
BLAKE2b-256 checksum How to use checksums |
70c66e74d5f9ce40a36ba62d9ef29bcaf807b79d5ea60aa641e1f33421c99be5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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
|