如何在不重置RTC时钟的情况下重启设备?

问题描述 投票:0回答:3

嗨,重启设备而不重置 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 micropython
3个回答
1
投票

ESP32 内部 RTC 不保留硬重置的设置,但 ESP32 RTC 时间深度睡眠期间被保留。

如果您想“保留”RTC 时间:

  1. 使用外部RTC模块;
  2. 使用外置GPS模块(需要在室外);
  3. 重置后调用NTP服务设置时间;
  4. 不要拔掉插头或重置它,将其置于深度睡眠模式。

0
投票

你不能。 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 内存来存储其他数据,但您应该使用文件或数据库等非易失性存储来存储要保留的数据。


0
投票

ESP32 的技术手册中提到有 3 个复位源,分别是 CPU 复位、Core 复位和系统复位。系统复位会导致所有寄存器(包括 RTC 寄存器)被清除。看门狗定时器和掉电复位也会导致系统复位。如果您的系统是电池供电的设备,您可以在一定程度上避免系统重置,但使用外部 RTC 会更值得信赖。

© www.soinside.com 2019 - 2024. All rights reserved.