Micropython RPI-PICO 随记-DS3231和RTC
开发环境
- MCU:Pico1(无wifi版)
- 时钟模块:DS3231
- 使用固件:自编译版本
- 开发环境:MacBook Pro Sonoma 14.5
- 开发工具:Thonny 4.1.6
- 开发语言:MicroPython 1.24.0
知识记录
-
DS3231是一款高精度的I2C实时时钟(RTC)器件,它采用二进制编码的十进制(BCD)格式来存储时间数据。需要进行双向转换:
'''
注意事项:
--这两个函数都假设输入的value是一个小于100的非负整数,因为它们只处理最后两位数字(个位和十位)。
--bcd2bin函数中,如果输入的BCD编码不正确(比如大于9的数字),那么转换结果也会不正确。
--bin2bcd函数中,如果输入的二进制值超过了99,那么只有最后两位数字会被转换,这可能会导致数据丢失。
chenph
'''
# 将BCD模式转换为十进制
def bcd2bin(self, value):
return (value or 0) - 6 * ((value or 0) >> 4)
# 将十进制转换为BCD模式
def bin2bcd(self, value):
return ((value % 100) // 10) << 4 | (value % 10)
- Pico接电脑调试的时候,获取当前时间为电脑时钟(写代码的时候是想先设置DS3231,再从DS3231取时间给Pico,程序运行过程中统一取Pico的时钟。当时没意识到接电脑调试会直接取电脑时钟,所以比如“Pico星期一到日对应的是0~6,DS3231对应的是1~7”以及“Pico会根据年月日自动设置星期”的实验可能是错误的,有时间会测试。)
# 获取时间很简单
from machine import RTC
rtc = RTC()
currT = rtc.datetime()
print(currT)
# 设置日期时间,是一个元组,年 月 日 星期 时 分 秒 微秒,微秒DS3231是没有的
datetime = (2024, 12, 17, 1, 20, 16, 00, 0)
rtc.datetime(datetime)