import machine, time
class DS_RTC:
second: int
minute: int
hour: int
dayOfWeek: int = 6
dayOfMonth: int = 1
month: int = 1
year: int
def __decToBcd(self, val):
return (value or 0) + 6 * ((value or 0) // 10)
def __bcdToDec(self, val):
return (val or 0) - 6 * ((val or 0) >> 4)
def init(self, sda_pin=16, scl_pin=17, port=0, speed=100000, address=0x68, register=0x00):
self.rtc_address = address
self.rtc_register = register
sda = machine.Pin(sda_pin)
scl = machine.Pin(scl_pin)
self.i2c = machine.I2C(port, sda=sda, scl=scl, freq=speed)
def readTime(self):
buffer = self.i2c.readfrom_mem(self.rtc_address, self.rtc_register, 7)
self.second = self.__bcdToDec(buffer[0] & 0x7f)
self.minute = self.__bcdToDec(buffer[1])
self.hour = self.__bcdToDec(buffer[2] & 0x3f)
self.dayOfWeek = self.__bcdToDec(buffer[3])
self.dayOfMonth = (buffer[4])
self.month = self.__bcdToDec(buffer[5])
self.year = self.__bcdToDec(buffer[6])
def setTime(self, ss,mm,hh,ww,d,m,y):
buffer = [ 0x00 , __decToBcd(ss), __decToBcd(mm),__decToBcd(hh),__decToBcd(ww),__decToBcd(d),__decToBcd(m),__decToBcd(y)]
self.i2c.writeto_mem(int(self.rtc_address), int(self.rtc_register), buffer)
rtc = DS_RTC()
rtc.init()
while True:
rtc.readTime()
print(rtc.year+2000)
print(rtc.month)
print(rtc.dayOfMonth)
print(rtc.dayOfWeek)
print(rtc.hour)
print(rtc.minute)
print(rtc.second)
time.sleep(1)