Reset

Reset(复位)功能用于重启 MicroPython 设备,类似于手动按下复位按钮。

  • 可以通过软件触发系统复位
  • 常用于系统初始化、错误恢复、配置更新后等场景

基本用法

import machine

# 软件复位
machine.reset()

复位类型

复位类型 说明 适用场景
软复位 通过软件触发的复位 程序错误恢复、配置更新
硬复位 通过硬件触发的复位 系统完全重启
深度复位 包括外设在内的完全复位 严重错误恢复

常用操作

1. 基本复位
import machine

print('准备复位...')
# 延迟 2 秒后复位
import time
time.sleep(2)
machine.reset()
2. 条件复位
import machine
import time

# 检查条件后复位
def check_reset_condition():
    # 这里可以添加复位条件检查
    # 例如:检查配置文件是否需要更新
    return True  # 模拟需要复位

print('系统运行中...')

if check_reset_condition():
    print('满足复位条件,准备复位...')
    time.sleep(1)
    machine.reset()
else:
    print('无需复位,继续运行')
3. 复位前的清理工作
import machine
import time

print('系统准备复位...')

# 执行清理工作
print('执行清理工作...')
# 关闭文件
# 释放资源
# 保存配置等

print('清理完成,准备复位...')
time.sleep(2)

# 复位
machine.reset()

示例1:定时复位

import machine
import time

# 运行时间(秒)
runtime = 300  # 5分钟

print(f'系统将在 {runtime} 秒后自动复位')

start_time = time.time()

while True:
    current_time = time.time()
    elapsed = current_time - start_time

    if elapsed >= runtime:
        print('运行时间到,准备复位...')
        time.sleep(2)
        machine.reset()

    print(f'已运行 {elapsed:.0f} 秒')
    time.sleep(10)

示例2:错误恢复复位

import machine
import time

print('系统启动')

try:
    # 执行可能出错的代码
    print('执行任务...')
    # 模拟错误
    # x = 1 / 0

    print('任务执行成功')

except Exception as e:
    print(f'发生错误: {e}')
    print('准备复位以恢复...')
    time.sleep(2)
    machine.reset()

# 正常运行
while True:
    print('系统正常运行')
    time.sleep(1)

示例3:远程复位触发

from machine import Pin, reset
import time

# 假设有一个远程触发引脚
reset_pin = Pin(14, Pin.IN, Pin.PULL_UP)

print('系统运行中,等待复位触发...')

while True:
    # 检查复位引脚
    if reset_pin.value() == 0:  # 引脚被拉低
        print('检测到复位触发信号')
        print('准备复位...')
        time.sleep(2)
        reset()

    print('系统正常运行')
    time.sleep(1)

注意事项

  • 复位影响:复位会导致程序从头开始执行,所有变量和状态都会丢失
  • 清理工作:复位前应完成必要的清理工作,如关闭文件、保存配置等
  • 复位原因:记录复位原因有助于故障排查
  • 使用场景:
    • 系统初始化失败
    • 程序进入死循环
    • 配置更新后需要重启
    • 远程管理需要

不同板子的复位差异

板子 复位特性
Raspberry Pi Pico 支持软件复位,复位后从 main.py 开始执行
ESP32 支持多种复位模式,包括软复位和硬复位
Arduino boards 部分型号支持软件复位
STM32 支持软件复位,功能丰富

常见问题

Q: 复位后程序从哪里开始执行? A: 复位后通常从 main.py 开始执行,或者从 REPL 启动。

Q: 复位会影响文件系统吗? A: 复位不会影响文件系统,文件会保持不变。

Q: 如何区分复位和首次启动? A: 可以通过检查复位原因或使用 RTC 来判断是否是首次启动。

Q: 复位前如何保存数据? A: 可以在复位前将重要数据写入文件系统或 RTC 的备份寄存器。