嗨,重启设备而不重置 RTC 时钟。例如,当我跑步时:
import machine
print(str(time.localtime()))
# Set the datetime
machine.RTC().datetime((...))
print(str(time.localtime()))
machine.reset()
print(str(time.localtime()))
这样的输出
(2000, 1, 1, 0, 2, 4, 5, 1)
(2052, 11, 10, 10, 26, 45, 6, 315)
# Resets
(2000, 1, 1, 0, 2, 4, 5, 1)
我想重置除 RTC 时间之外的所有内容
ESP32 内部 RTC 不保留硬重置的设置,但 ESP32 RTC 时间在深度睡眠期间被保留。
如果您想“保留”RTC 时间:
你不能。 RTC 是一个硬件设备,当您重置微控制器时,它不会重置。您只能通过取出电池或使用 RTC 芯片上的复位引脚来复位 RTC。
但如果您仍想保留RTC,您可以使用RTC内存来存储当前时间,然后在复位后恢复它。例如:
import machine
import time
# Save the current time in RTC memory
rtc = machine.RTC()
rtc.memory(str(time.localtime()))
# Set the datetime
rtc.datetime((...))
# Reset the device
machine.reset()
# Restore the time from RTC memory
rtc = machine.RTC()
time.localtime(eval(rtc.memory()))
print(str(time.localtime()))
eval() 函数用于将字符串计算为 Python 表达式。对不受信任的输入使用 eval() 是不安全的,但在这种情况下它是安全的,因为字符串是由程序本身生成的。
请注意,RTC 内存是易失性的,因此如果取出电池或设备断电,RTC 内存将会丢失。您可以使用 RTC 内存来存储其他数据,但您应该使用文件或数据库等非易失性存储来存储要保留的数据。
ESP32 的技术手册中提到有 3 个复位源,分别是 CPU 复位、Core 复位和系统复位。系统复位会导致所有寄存器(包括 RTC 寄存器)被清除。看门狗定时器和掉电复位也会导致系统复位。如果您的系统是电池供电的设备,您可以在一定程度上避免系统重置,但使用外部 RTC 会更值得信赖。