]> Repositories - Adafruit_Blinka-hackapet.git/commitdiff
add i2c scanning
authorladyada <limor@ladyada.net>
Mon, 18 Jun 2018 12:34:30 +0000 (08:34 -0400)
committerScott Shawcroft <scott@tannewt.org>
Wed, 27 Jun 2018 20:00:19 +0000 (13:00 -0700)
examples/pi_i2c.py [new file with mode: 0644]
src/adafruit_blinka/microcontroller/raspi_23/i2c.py
src/adafruit_blinka/microcontroller/raspi_23/pin.py
src/busio.py
src/microcontroller/__init__.py
src/microcontroller/pin.py

diff --git a/examples/pi_i2c.py b/examples/pi_i2c.py
new file mode 100644 (file)
index 0000000..cdafa95
--- /dev/null
@@ -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
+
index 5273fdd8b4a466e42dc433baba9cc6c5447f2735..a4647b69978003af533f17820d9f498fdff083c5 100644 (file)
@@ -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
index 8fecca98df99c2dea08097a16fd14b99c37ffaf2..236d635b7a9b7b0da6f5dd63d4589d8f768075ee 100644 (file)
@@ -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),
 )
 
index 6c86c1b72566d8c17feb00178b083eec5e609a28..3d786acefbf3e043ef4f8e73df578608b32d68be 100755 (executable)
@@ -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(
index 62a2baf03b65601b08426f08b40e92ab41a840c3..c22a03c9c11a18eab70304cfd6a0c1b05f72ff37 100755 (executable)
@@ -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)
index 210954463f8f888226ea900fd6a7483f972af2df..b73545bdc1ca138daeb1638faa8a8eff5448d314 100755 (executable)
@@ -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")