Skip to content

Instantly share code, notes, and snippets.

@boochow
Created May 30, 2018 14:50
Show Gist options
  • Save boochow/620d3e84d208348e49f92ed2a18f2077 to your computer and use it in GitHub Desktop.
Save boochow/620d3e84d208348e49f92ed2a18f2077 to your computer and use it in GitHub Desktop.
def decimal2num(b):
return ((b & 0xf) + 10 * (b >> 4))
def num2decimal(d):
return (d % 10) | (d // 10) << 4
def hour_value(b):
result = decimal2num(b & 0x1f)
if (b & 0x20):
result += 12
if (b & 0x40) == 0:
result += 8
return result
class DS3231:
def __init__(self, i2c, addr=0x68):
self.i2c = i2c
self.addr = addr
def read_reg(self, reg, num=1):
self.i2c.writeto(self.addr, bytearray([reg]), False)
return self.i2c.readfrom(self.addr, num)
def write_reg(self, reg, value):
self.i2c.writeto(self.addr, bytearray([reg]), False)
self.i2c.writeto(self.addr, value)
def read(self):
date = self.read_reg(0, 7)
result = [2000 + decimal2num(date[6])] # year
result.append(decimal2num(date[5] & 0x7f)) # month
result.append(decimal2num(date[4])) # day
result.append(hour_value(date[2])) # hour
result.append(decimal2num(date[1])) # min
result.append(decimal2num(date[0])) # sec
result.append(decimal2num(date[3])) # day of week
return result
def write(self, date):
data = [num2decimal(date[5])]
data.append(num2decimal(date[4]))
data.append(num2decimal(date[3]))
data.append(date[6] & 7)
data.append(num2decimal(date[2]))
data.append(num2decimal(date[1]))
data.append(num2decimal(date[0] - 2000))
print(data)
self.write_reg(0, bytearray(data))
def temperature(self):
t = self.read_reg(0x11, 2)
return 0.25 * (t[1] >> 6) + t[0]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment