i2cデバイス用クラス

Raspberry PiのPythonでi2cデバイスを幾つか操作する必要があるので、自前でクラスを作成してみることにした。後々に便利に使い回せるように必要な機能を用意しておくことにする。取り敢えず動作確認をしてみたクラスのソース「i2c.py」はこんな感じになった。

# i2c.py coding: utf-8
import smbus
import time

# ================================================
# =   I2C Class                                  =
# ================================================
class I2C():

    i2c = None
    bus = None
    adr = None

    # Constructor
    def __init__(self, bus, adr):
        if bus not in [0, 1]:
            raise Exception("i2c bus is 0 or 1.")
        if adr < 0x03 or adr > 0x77:
            raise Exception("i2c adr is between 0x03 and 0x77.")

        self.bus = bus
        self.adr = adr
        self.i2c = smbus.SMBus(bus)

    # Write Byte Data
    def write_byte(self, reg, val):
        self.i2c.write_byte_data(self.adr, reg, val)

    # Read Byte Data
    def read_byte(self, reg):
        return self.i2c.read_byte_data(self.adr, reg)

    # Read Signed Short Data
    def read_signed_short(self, rh, rl):
        h = self.i2c.read_byte_data(self.adr, rh)
        l = self.i2c.read_byte_data(self.adr, rl)
        n = h * 256 + l
        if h > 127:
            n = (h - 256) * 256 + l
        return n

    # Read Unsigned Short Data
    def read_unsigned_short(self, rh, rl):
        h = self.i2c.read_byte_data(self.adr, rh)
        l = self.i2c.read_byte_data(self.adr, rl)
        n = h * 256 + l
        return n

    # Read Block Data
    def read_block_data(self, reg, len):
        return self.i2c.read_i2c_block_data(self.adr, reg, len)

    # Sleep MS
    def sleep_ms(self, ms):
        time.sleep(ms * 0.001)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください