|
发表于 2020-5-9 01:02:12
|
显示全部楼层
测试了十几天了,没有问题。micropython的不知能否帮到你。
- from machine import Pin, I2C
- import time ,ntptime,network
- class AT24C02():
- def __init__(self, i2c):
- self.i2c = i2c
- self.addr = 0x50
-
- def write_byte(self, addr, dat):
- self.i2c.writeto(self.addr, bytearray([addr, dat])) #AT24C02地址是一个8位,与24C32不同,特别要注意
- def read_byte(self, addr):
- self.i2c.writeto(self.addr, bytearray([addr])) #AT24C02地址是一个8位,与24C32不同,特别要注意
- t = self.i2c.readfrom(self.addr, 1)
- return t[0]
- def read_mem(self,addr,nub): #存储器内部地址,读出的数量
- return i2c.readfrom_mem(self.addr, addr,nub)
- def write_mem(self,addr,buf): #存储器内部地址,写入的buff(lis,tub 用bytearray()转换一下就可 )
- i2c.writeto_mem(self.addr, addr,buf)
- class RX8025T():
- def __init__(self, i2c):
- self.i2c = i2c
- self.addr = 0x32
- def _dec2bcd(self, value):
- """Convert decimal to binary coded decimal (BCD) format"""
- return (value // 10) << 4 | (value % 10)
- def _bcd2dec(self, value):
- """Convert binary coded decimal (BCD) format to decimal"""
- return ((value >> 4) * 10) + (value & 0x0F)
- def get(self):#数据格式符合 8元组:(年、月、日、小时、分钟、秒、一周中某日 mon = 0 、一年中某日)。
- buf = self.i2c.readfrom_mem(self.addr, 0x0, 7)
- ss = self._bcd2dec(buf[0])# second
- mm = self._bcd2dec(buf[1]) # minute
- hh = self._bcd2dec(buf[2]) # hour
- wday = buf[3] # weekday
- dd = self._bcd2dec(buf[4]) # day
- MM = self._bcd2dec(buf[5]) # month
- yy = self._bcd2dec(buf[6]) + 2000 # year
- yday = 88 #yearday 一年中的某天没有定义这里返回个88代替
- for i in range(7):
- if wday == 0x01 << i:
- wday = i -1
- if wday < 0 :
- wday = 6
- return yy, MM, dd, hh, mm, ss, wday,yday # wday in esp8266 0 == Monday, 6 == Sunday
- def set(self,datetime): ##数据格式符合 8元组:(年、月、日、小时、分钟、秒、一周中某日 mon = 0 、一年中某日)。
- buf = bytearray(7) #yearday 一年中的某天,8025没有直接丢弃,这里只要7位
- buf[0] = self._dec2bcd(datetime[5]) # second
- buf[1] = self._dec2bcd(datetime[4]) # minute
- buf[2] = self._dec2bcd(datetime[3]) # hour
- buf[3] = datetime[6] + 1 # weekday 这里改了顺序,8025 周一是第二个位bit1 置一,所以这里先加一
- buf[4] = self._dec2bcd(datetime[2]) # day
- buf[5] = self._dec2bcd(datetime[1]) # month
- buf[6] = self._dec2bcd(datetime[0] - 2000) # year
- if buf[3] == 7 : # micropython 周日是 6 上面加一后得到7
- buf[3] = 0
- buf[3] = 0x01 << buf[3] #周日不移位 bit0 置一 周一 bit1 置一 周六bit6 置一
- self.i2c.writeto_mem(self.addr, 0x00, buf)
- i2c = I2C(scl=Pin(14), sda=Pin(16), freq=100000)
- rtc = RX8025T(i2c)
- #ram = AT24C02(i2c)
- MY_SSID ="home88888888"
- MY_PASSWORD ="xxxxxxxx"
- nic = network.WLAN(network.STA_IF)
- nic.active(True)
- nic.connect(MY_SSID,MY_PASSWORD)
- time.sleep(5) #等待5秒让其联网
- ntptime.NTP_DELTA = 3155673600 - (8* 60 * 60) #东8区
- ntptime.host = 'ntp.ntsc.ac.cn'
- ntptime.settime()
- (yy, MM, mday, hh, mm, ss, wday,yday) = rtc.get()
- print('RTC_Time: {:0>2d}-{:0>2d}-{:0>2d} {:0>2d}:{:0>2d}:{:0>2d} \t Day:{} [0:Mon 6:Sun]'.format(yy, MM, mday, hh, mm, ss,wday))
- (yy, MM, mday, hh, mm, ss, wday) = time.localtime()[:-1]
- print('NTP_Time: {:0>2d}-{:0>2d}-{:0>2d} {:0>2d}:{:0>2d}:{:0>2d} \t Day:{} [0:Mon 6:Sun]'.format(yy, MM, mday, hh, mm, ss,wday))
- now_time = time.localtime()
- #这里设置RTC时间为8266内部时间(已经NTC校准的)
- rtc.set(now_time)
- (yy, MM, mday, hh, mm, ss, wday,yday) = rtc.get()
- print('RTC_Time: {:0>2d}-{:0>2d}-{:0>2d} {:0>2d}:{:0>2d}:{:0>2d} \t Day:{} [0:Mon 6:Sun]'.format(yy, MM, mday, hh, mm, ss,wday))
复制代码
|
|