Esempio n. 1
0
def read_y():
    i2c.write(MMA8653_ADDR, bytes([MMA8653_OUT_Y_MSB]), repeat=True)
    result = i2c.read(MMA8653_ADDR, 1)
    # Unpack it as a signed char
    result = ustruct.unpack('b', result)[0]
    # Scale it to 0 to +/- 2000 and set orientation
    return result * 16 * -1
Esempio n. 2
0
def check_device():
    i2c.write(MMA8653_ADDR, bytes([MMA8653_WHOAMI]), repeat=True)
    read_data = i2c.read(MMA8653_ADDR, 1)
    if read_data[0] != MMA8653_WHOAMI_VALUE:
        raise Exception(
            'Invalid WHO_AM_I value 0x{:02X}, expected 0x{:02X}'.format(
                read_data[0], MMA8653_WHOAMI_VALUE))
Esempio n. 3
0
 def i2cRead(self, reg, byte):
     writeBuf = bytearray(1)
     readBuf = bytearray(byte)
     writeBuf[0] = reg
     i2c.write(0x76, writeBuf, False)
     readBuf = i2c.read(0x76, byte, False)
     return readBuf
Esempio n. 4
0
def oled_initialize():

    for c in ([0xae], [0xa4], [0xd5, 0xf0], [0xa8, 0x3f], [0xd3, 0x00],
              [0 | 0x0], [0x8d, 0x14], [0x20, 0x00], [0x21, 0, 127],
              [0x22, 0, 63], [0xa0 | 0x1], [0xc8], [0xda, 0x12], [0x81, 0xcf],
              [0xd9, 0xf1], [0xdb, 0x40], [0xa6], [0xd6, 1], [0xaf]):
        i2c.write(OLED_ADDR, b'\x00' + bytearray(c))
Esempio n. 5
0
 def servo_write(self, Servo: Servos, degrees):
     # sets the requested servo to the reguested angle.
     # if the PCA has not yet been setup calls the initialisation routine
     # @param Servo Which servo to set
     # @param degrees the angle to set the servo to
     if self.INITALISED is False:
         self._secret_incantation(self)
     buf = bytearray(2)
     HighByte = False
     PWMVal = degrees + 180
     #deg100 = degrees * 100
     #PWMVal100 = deg100 * self.SERVO_MULTIPLIER
     #PWMVal = PWMVal100 / 10000
     #PWMVal = PWMVal + self.SERVO_ZERO_OFFSET
     #print(self.SERVO_ZERO_OFFSET)
     #print(PWMVal)
     if (PWMVal > 0xFF):
         HighByte = True
     buf[0] = Servo
     buf[1] = int(PWMVal)
     i2c.write(self.BOARD_1, buf, False)
     if (HighByte):
         buf[0] = Servo + 1
         buf[1] = 0x01
     else:
         buf[0] = Servo + 1
         buf[1] = 0x00
     i2c.write(self.BOARD_1, buf, False)
 def char(self, ch, x=0, y=0, c=1):
     ind = x + y * 128 + 1
     n = (min(127, max(ord(ch), 32)) - 32) * 5
     for i in range(5):
         screen[ind + i] = Font_5x7[n + i] if c else Font_5x7[n + i] ^ 0xFF
     screen[ind + 5] = 0 if c else 0xFF
     self.set_pos(x, y)
     i2c.write(ADDR, b'\x40' + screen[ind:ind + 6])
 def pixel(self, x, y, color=1):
     page, shift_page = divmod(y, 8)
     ind = x + page * 128 + 1
     b = screen[ind] | (
         1 << shift_page) if color else screen[ind] & ~(1 << shift_page)
     screen[ind] = b
     self.set_pos(x, page)
     i2c.write(ADDR, bytearray([0x40, b]))
Esempio n. 8
0
 def readTime(self):
     i2c.write(self._addr, b'\x04')
     rdata = i2c.read(self._addr, 7)
     return (self._bcdToDec(rdata[6]) + 2000, self._bcdToDec(rdata[5]),
             self._bcdToDec(rdata[4]),
             DAYS_OF_WEEK[self._bcdToDec(rdata[3])],
             self._bcdToDec(rdata[2]), self._bcdToDec(rdata[1]),
             self._bcdToDec(rdata[0] & 0x7f))
Esempio n. 9
0
 def show(self):
     self.cmd(SET_COL_ADDR)
     self.cmd(0)
     self.cmd(127)
     self.cmd(SET_PAGE_ADDR)
     self.cmd(0)
     self.cmd(7)
     i2c.write(0x3c, self.buffer)
Esempio n. 10
0
def motor(Spin, Speed):
    TM1 = int(Speed % 256)
    TM2 = int(Speed / 256)
    CH = (Spin - 1) * 4 + 8
    CH1 = int((CH << 8) + TM1)
    CH2 = int(((CH + 1) << 8) + TM2)
    i2c.write(64, struct.pack('>H', CH1))
    i2c.write(64, struct.pack('>H', CH2))
Esempio n. 11
0
def volt():
    """
    Returns the voltage level of the batteries.

    :returns: Voltage level of the batteries.
    """
    i2c.write(0x04, b'\x04')
    return unpack('>H', i2c.read(0x04, 2))[0] / 1000.0
Esempio n. 12
0
 def set_px(self, x, y, s, d=1):
     p, sp = divmod(y, 8)
     i = x * 2 + p * 128 + 1
     b = self._s[i] | (1 << sp) if s else self._s[i] & ~(1 << sp)
     pack_into(">BB", self._s, i, b, b)
     if d:
         self.set_pos(x, p)
         i2c.write(0x3c, bytearray([0x40, b, b]))
def init():
    i2c.init()
    while not _ADDR in i2c.scan():
        print("Crickit not found!")
        time.sleep(1)
    reg_buf[0] = 0x7F
    reg_buf[1] = 0xFF
    i2c.write(_ADDR, reg_buf)
Esempio n. 14
0
    def motor_stop(self, motor):

        buffer = bytearray([motor, FORWARDS, 0])

        try:
            i2c.write(0x10, buffer)
        except OSError:
            display.show(Image.SAD)
Esempio n. 15
0
 def measure(self,cmd):
   value=0
   if not self.isPreheated:self.preheated()
   i2c.write(self.addr,cmd)
   sleep(10)
   data=i2c.read(self.addr,4)
   for i in range(4):value+=data[i]<<(8*i)
   return value
Esempio n. 16
0
def show_bitmap(filename):
    set_pos()
    command([0xae])
    with open(filename, 'rb') as my_file:
        for i in range(0, 16):
            i2c.write(ADDR, b'\x40' + my_file.read(64))
    set_zoom(0)
    command([0xaf])
Esempio n. 17
0
 def __init__(self):
  cmd = [
   [0xAE],[0xA4],[0xD5, 0xF0],[0xA8, 0x3F],[0xD3, 0x00],[0 | 0x0],[0x8D, 0x14],
   [0x20, 0x00],[0x21, 0, 127],[0x22, 0, 63],[0xa0 | 0x1],[0xc8],[0xDA, 0x12],
   [0x81, 0xCF],[0xd9, 0xF1],[0xDB, 0x40],[0xA6],[0xd6, 1],[0xaf]]
  for c in cmd:
   i2c.write(self.ADDR, b'\x00' + bytearray(c))
  self.clear_display()
Esempio n. 18
0
def set_px(x, y, color, draw=1):
    page, shift_page = divmod(y, 8)
    ind = x * 2 + page * 128 + 1
    b = screen[ind] | (
        1 << shift_page) if color else screen[ind] & ~(1 << shift_page)
    pack_into(">BB", screen, ind, b, b)
    if draw:
        set_pos(x, page)
        i2c.write(0x3c, bytearray([0x40, b, b]))
Esempio n. 19
0
 def getRawData(self):
     if ticks_us() - self.lastSample > 10000:
         while (self.read(0xF3) & 0x08):
             t = ticks_us()
             while t - ticks_us() > 2:
                 pass
         self.lastSample = ticks_us()
         i2c.write(BME280_ADDRESS, bytearray([0xF7]))
         self.currentRawData = i2c.read(BME280_ADDRESS, 8)
Esempio n. 20
0
	def	getReg(self, reg):
        i2c.write(BMP280_I2C_ADDR, bytearray([reg]))
        t = i2c.read(BMP280_I2C_ADDR, 1)
        return t[0]

	# get two reg
	def	get2Reg(self, reg):
        i2c.write(BMP280_I2C_ADDR, bytearray([reg]))
        t = i2c.read(BMP280_I2C_ADDR, 2)
        return t[0] + t[1]*256

	def get(self):
		adc_T = (self.getReg(0xFA)<<12) + (self.getReg(0xFB)<<4) + (self.getReg(0xFC)>>4)
		var1 = (((adc_T>>3)-(self.dig_T1<<1))*self.dig_T2)>>11
		var2 = (((((adc_T>>4)-self.dig_T1)*((adc_T>>4) - self.dig_T1))>>12)*self.dig_T3)>>14
		t = var1+var2
		self.T = ((t * 5 + 128) >> 8)/100
		var1 = (t>>1) - 64000
		var2 = (((var1>>2) * (var1>>2)) >> 11 ) * self.dig_P6
		var2 = var2 + ((var1*self.dig_P5)<<1)
		var2 = (var2>>2)+(self.dig_P4<<16)
		var1 = (((self.dig_P3*((var1>>2)*(var1>>2))>>13)>>3) + (((self.dig_P2) * var1)>>1))>>18
		var1 = ((32768+var1)*self.dig_P1)>>15
		if var1 == 0:
			return  # avoid exception caused by division by zero
		adc_P = (self.getReg(0xF7)<<12) + (self.getReg(0xF8)<<4) + (self.getReg(0xF9)>>4)
		p=((1048576-adc_P)-(var2>>12))*3125
		if p < 0x80000000:
			p = (p << 1) // var1
		else:
			p = (p // var1) * 2
		var1 = (self.dig_P9 * (((p>>3)*(p>>3))>>13))>>12
		var2 = (((p>>2)) * self.dig_P8)>>13
		self.P = p + ((var1 + var2 + self.dig_P7) >> 4)
		return [self.T, self.P]

	# get Temperature in Celsius
	def getTemp(self):
		self.get()
		return self.T

	# get Pressure in Pa
	def getPress(self):
		self.get()
		return self.P

	# Calculating absolute altitude
	def	getAltitude(self):
		return 44330*(1-(self.getPress()/101325)**(1/5.255))

	# sleep mode
	def poweroff(self):
		self.setReg(0xF4, 0)

	# normal mode
	def poweron(self):
		self.setReg(0xF4, 0x2F)
Esempio n. 21
0
 def __init__(self):
     self._s = bytearray(513)
     self._s[0] = 0x40
     C = [[0xAE], [0xA4], [0xD5, 0xF0], [0xA8, 0x3F], [0xD3, 0x00],
          [0 | 0x0], [0x8D, 0x14], [0x20, 0x00], [0x21, 0, 127],
          [0x22, 0, 63], [0xa0 | 0x1], [0xc8], [0xDA, 0x12], [0x81, 0xCF],
          [0xd9, 0xF1], [0xDB, 0x40], [0xA6], [0xd6, 1], [0xaf]]
     for c in C:
         i2c.write(0x3C, b'\x00' + bytearray(c))
Esempio n. 22
0
 def init(self, state=False):
     self.writePin(0, state)
     self.writePin(1, state)
     self.writePin(2, state)
     self.writePin(3, state)
     self.writePin(4, state)
     i2c.write(self.addr,
               bytearray([PCA9554A_REG_CONFIG, PCA9554A_CONF_OUTPUT]))
     return True
 def clear_px(self, x, y):
  x = 127 if x > 127 else x
  y = 63 if y > 63 else y
  page, shift_page = y >> 3, y % 8
  ind = x + page * 128 + 1
  screenPixel = (self.screen[ind] & ~ (1 << shift_page))
  pack_into(">B", self.screen, ind, screenPixel)
  self.set_pos(x, page)
  i2c.write(self.ADDR, bytearray([0x40, screenPixel]))
Esempio n. 24
0
 def getTemperature(self):
     i2c.write(I2CADR, bytearray([BME280_REG_TEMPDATA]))
     t = i2c.read(I2CADR,3)
     adc_T = (t[0]*65536 + t[1]*256 + t[2]) >> 4 
     t1 = (((adc_T >> 3) - (self.dig_T1 << 1)) * self.dig_T2) >> 11
     t2 = (((((adc_T >> 4)-self.dig_T1)*((adc_T >> 4)-self.dig_T1)) >> 12)*self.dig_T3) >> 14
     self.t_fine = t1 + t2
     T = (self.t_fine * 5 + 128) >> 8
     return T
Esempio n. 25
0
 def set_pwm(self, channel, on, off):
     if on is None or off is None:
         i2c.write(self.address, bytearray([0x06 + 4 * channel]))
         distance = i2c.read(self.address, 4)
         return ustruct.unpack('<HH', distance)
     i2c.write(self.address, bytearray([0x06 + 4 * channel, on & 0xFF]))
     i2c.write(self.address, bytearray([0x07 + 4 * channel, on >> 8]))
     i2c.write(self.address, bytearray([0x08 + 4 * channel, off & 0xFF]))
     i2c.write(self.address, bytearray([0x09 + 4 * channel, off >> 8]))
Esempio n. 26
0
def _exe(s, b, l=0, r=0):
    try:
        i2c.write(s, b)
        if l:
            d = i2c.read(s, l)
            if not r:
                d = int.from_bytes(d, 'big')
            return d
    except:
        pass
 def setPwm(self, channel, on, off):
     if not (0 <= channel <= 15):
         return
     buf = [0] * 5
     buf[0] = self.LED0_ON_L + 4 * channel
     buf[1] = on & 0xFF
     buf[2] = (on >> 8) & 0xFF
     buf[3] = off & 0xFF
     buf[4] = (off >> 8) & 0xFF
     i2c.write(self.PCA9685_ADDRESS, bytes(buf))
Esempio n. 28
0
 def clear_px(self, x, y):
  x = 63 if x > 63 else x
  y = 31 if y > 31 else y
  page, shift_page = y >> 3, y % 8
  #page, shift_page = divmod(y, 8)
  ind = x * 2 + page * 128 + 1
  screenPixel = (self.screen[ind] & ~ (1 << shift_page))
  pack_into(">B", self.screen, ind, screenPixel, screenPixel)
  self.set_pos(x, page)
  i2c.write(self.ADDR, bytearray([0x40, screenPixel, screenPixel]))
Esempio n. 29
0
 def read(self, reg, num_bytes=1, signed=False, le=False):
     i2c.write(0x60, bytearray([reg]))
     n = 0
     for x in reversed(i2c.read(0x60, num_bytes)):
         n <<= 8
         n |= x
     if signed:
         mask = 2**((num_bytes * 8) - 1)
         n = -(n & mask) + (n & ~mask)
     collect()
     return n
Esempio n. 30
0
    def motor_run(self, motor, direction, speed):

        speed = 255 if speed > 255 else speed
        speed = 0 if speed < 0 else speed

        buffer = bytearray([motor, direction, speed])

        try:
            i2c.write(0x10, buffer)
        except OSError:
            display.show(Image.SAD)