From: ladyada Date: Mon, 18 Jun 2018 12:34:30 +0000 (-0400) Subject: add i2c scanning X-Git-Tag: 0.1.0^2~9 X-Git-Url: https://git.ayoreis.com/Adafruit_Blinka-hackapet.git/commitdiff_plain/e7fee263ecca5ed166b9d3cef21c366d7c665b9f?ds=inline add i2c scanning --- diff --git a/examples/pi_i2c.py b/examples/pi_i2c.py new file mode 100644 index 0000000..cdafa95 --- /dev/null +++ b/examples/pi_i2c.py @@ -0,0 +1,20 @@ +import sys +import time +sys.path.append('/home/pi/Adafruit_Micropython_Blinka/src') +sys.path.append('/home/pi/Adafruit_Python_GPIO') + +import board +import digitalio +import busio + +print("hello blinka!") + + +i2c = busio.I2C(board.SCL, board.SDA) + +print([hex(i) for i in i2c.scan()]) + +led = digitalio.DigitalInOut(board.D4) +led.direction = digitalio.Direction.OUTPUT +led.value = True + diff --git a/src/adafruit_blinka/microcontroller/raspi_23/i2c.py b/src/adafruit_blinka/microcontroller/raspi_23/i2c.py index 5273fdd..a4647b6 100644 --- a/src/adafruit_blinka/microcontroller/raspi_23/i2c.py +++ b/src/adafruit_blinka/microcontroller/raspi_23/i2c.py @@ -1,9 +1,32 @@ import smbus import time - class I2C: - + MASTER = 0 + SLAVE = 1 + _baudrate = None + _mode = None _i2c_bus = None - def __init__(self, bus_num=0): - i2c_bus = smbus.SMBus(bus_num) + + def __init__(self, bus_num, mode=MASTER, baudrate=None): + if mode != self.MASTER: + raise NotImplementedError("Only I2C Master supported!") + _mode = self.MASTER + + if baudrate != None: + print("I2C frequency is not settable in python, ignoring!") + + try: + self._i2c_bus = smbus.SMBus(bus_num) + except FileNotFoundError: + raise RuntimeError("I2C Bus #%d not found, check if enabled in config!" % bus_num) + + def scan(self): + found = [] + for addr in range(0,0x7F): + try: + self._i2c_bus.read_byte(addr) + except OSError: + continue + found.append(addr) + return found diff --git a/src/adafruit_blinka/microcontroller/raspi_23/pin.py b/src/adafruit_blinka/microcontroller/raspi_23/pin.py index 8fecca9..236d635 100644 --- a/src/adafruit_blinka/microcontroller/raspi_23/pin.py +++ b/src/adafruit_blinka/microcontroller/raspi_23/pin.py @@ -18,6 +18,9 @@ class Pin: def __init__(self, bcm_number): self.id = bcm_number + def __repr__(self): + return "BCM #%d" % self.id + def init(self, mode=IN, pull=None): if mode != None: print("set %d to mode %d" % (self.id, mode)) @@ -91,6 +94,6 @@ uartPorts = ( ) i2cPorts = ( - (1, SDA, SCL), + (1, SCL, SDA), ) diff --git a/src/busio.py b/src/busio.py index 6c86c1b..3d786ac 100755 --- a/src/busio.py +++ b/src/busio.py @@ -23,7 +23,7 @@ class I2C(Lockable): from microcontroller.pin import i2cPorts for portId, portScl, portSda in i2cPorts: if scl == portScl and sda == portSda: - self._i2c = I2C(portId, mode=_I2C.MASTER, baudrate=frequency) + self._i2c = _I2C(portId, mode=_I2C.MASTER, baudrate=frequency) break else: raise NotImplementedError("No Hardware I2C on (scl,sda)={}\nValid UART ports".format( diff --git a/src/microcontroller/__init__.py b/src/microcontroller/__init__.py index 62a2baf..c22a03c 100755 --- a/src/microcontroller/__init__.py +++ b/src/microcontroller/__init__.py @@ -1,6 +1,7 @@ """Microcontroller pins""" from adafruit_blinka import Enum, agnostic +from adafruit_blinka.agnostic import board as board_id class Pin(Enum): """Reference Pin object""" @@ -26,7 +27,10 @@ if agnostic.microcontroller == "esp8266": from adafruit_blinka.microcontroller.esp8266 import * elif agnostic.microcontroller == "stm32": from adafruit_blinka.microcontroller.stm32 import * -elif agnostic.microcontroller == "raspi_3": - from adafruit_blinka.microcontroller.raspi_23 import * +elif agnostic.microcontroller == "linux": + if board_id == "raspi_3" or board_id == "raspi_2": + from adafruit_blinka.microcontroller.raspi_23 import * + else: + raise NotImplementedError("Board not supported: ", board_id) else: raise NotImplementedError("Microcontroller not supported: ", agnostic.microcontroller) diff --git a/src/microcontroller/pin.py b/src/microcontroller/pin.py index 2109544..b73545b 100755 --- a/src/microcontroller/pin.py +++ b/src/microcontroller/pin.py @@ -9,5 +9,11 @@ if agnostic.microcontroller == "esp8266": from adafruit_blinka.microcontroller.esp8266.pin import * elif agnostic.microcontroller == "stm32": from adafruit_blinka.microcontroller.stm32.pin import * +elif agnostic.microcontroller == "linux": + if agnostic.board == "raspi_3" or agnostic.board == "raspi_2": + print("import raspi23") + from adafruit_blinka.microcontroller.raspi_23.pin import * + else: + raise NotImplementedError("Board not supported: ", agnostic.board) else: raise NotImplementedError("Microcontroller not supported")