From: ladyada Date: Wed, 20 Jun 2018 21:37:43 +0000 (-0400) Subject: completed busio i2c demo X-Git-Tag: 0.1.0^2~8 X-Git-Url: https://git.ayoreis.com/Adafruit_Blinka-hackapet.git/commitdiff_plain/777a446080c6654846c6f19944e3c28180ca6c19 completed busio i2c demo --- diff --git a/examples/pi_busio_i2c.py b/examples/pi_busio_i2c.py new file mode 100644 index 0000000..6e8e0ac --- /dev/null +++ b/examples/pi_busio_i2c.py @@ -0,0 +1,33 @@ +import sys +import time +sys.path.append('/home/pi/Adafruit_Micropython_Blinka/src') +sys.path.append('/home/pi/Adafruit_Python_GPIO') +sys.path.append('/home/pi/Adafruit_Python_PureIO') + +import board +import digitalio +import busio + +print("hello blinka!") + +i2c = busio.I2C(board.SCL, board.SDA) + +print("I2C devices found: ", [hex(i) for i in i2c.scan()]) + +if not 0x18 in i2c.scan(): + print("Didn't find MCP9808") + exit() + +def temp_c(data): + value = data[0] << 8 | data[1] + temp = (value & 0xFFF) / 16.0 + if value & 0x1000: + temp -= 256.0 + return temp + +while True: + i2c.writeto(0x18, bytes([0x05]), stop=False) + result = bytearray(2) + i2c.readfrom_into(0x18, result) + print(temp_c(result)) + time.sleep(0.5) diff --git a/examples/pi_i2c.py b/examples/pi_i2c.py index cdafa95..6e8e0ac 100644 --- a/examples/pi_i2c.py +++ b/examples/pi_i2c.py @@ -2,6 +2,7 @@ import sys import time sys.path.append('/home/pi/Adafruit_Micropython_Blinka/src') sys.path.append('/home/pi/Adafruit_Python_GPIO') +sys.path.append('/home/pi/Adafruit_Python_PureIO') import board import digitalio @@ -9,12 +10,24 @@ import busio print("hello blinka!") - i2c = busio.I2C(board.SCL, board.SDA) -print([hex(i) for i in i2c.scan()]) +print("I2C devices found: ", [hex(i) for i in i2c.scan()]) + +if not 0x18 in i2c.scan(): + print("Didn't find MCP9808") + exit() -led = digitalio.DigitalInOut(board.D4) -led.direction = digitalio.Direction.OUTPUT -led.value = True +def temp_c(data): + value = data[0] << 8 | data[1] + temp = (value & 0xFFF) / 16.0 + if value & 0x1000: + temp -= 256.0 + return temp +while True: + i2c.writeto(0x18, bytes([0x05]), stop=False) + result = bytearray(2) + i2c.readfrom_into(0x18, result) + print(temp_c(result)) + time.sleep(0.5) diff --git a/src/adafruit_blinka/microcontroller/raspi_23/i2c.py b/src/adafruit_blinka/microcontroller/raspi_23/i2c.py index a4647b6..6e9f31c 100644 --- a/src/adafruit_blinka/microcontroller/raspi_23/i2c.py +++ b/src/adafruit_blinka/microcontroller/raspi_23/i2c.py @@ -1,4 +1,4 @@ -import smbus +import Adafruit_PureIO.smbus as smbus import time class I2C: @@ -22,11 +22,20 @@ class I2C: raise RuntimeError("I2C Bus #%d not found, check if enabled in config!" % bus_num) def scan(self): + """Try to read a byte from each address, if you get an OSError it means the device isnt there""" found = [] - for addr in range(0,0x7F): + for addr in range(0,0x80): try: self._i2c_bus.read_byte(addr) except OSError: continue found.append(addr) return found + + def writeto(self, address, buffer, stop=True): + self._i2c_bus.write_i2c_block_data(address, buffer[0], buffer[1:]) + + def readfrom_into(self, address, buffer, stop=True): + readin = self._i2c_bus.read_bytes(address, len(buffer)) + for i in range(len(buffer)): + buffer[i] = readin[i]