You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

适用于带看门狗定时器(WDT)主循环的退出方案推荐

针对MicroPython ESP32/Pico看门狗开发的安全方案

一、开发阶段预留安全窗口

在main.py开头加一段延迟检测逻辑,开机后给你留足够时间跳过看门狗初始化,避免短超时导致的锁死:

import machine
import time
import sys

# 开机等待5秒,按`s`键跳过看门狗
print("Press 's' to skip WDT setup...")
start_time = time.ticks_ms()
skip_wdt = False
while time.ticks_diff(time.ticks_ms(), start_time) < 5000:
    if sys.stdin.read(1) == 's':
        skip_wdt = True
        print("WDT setup skipped.")
        break
    time.sleep(0.1)

if not skip_wdt:
    # 正常初始化看门狗(比如3秒超时)
    wdt = machine.WDT(timeout=3000)
    print("WDT initialized.")

# 业务代码
while True:
    if not skip_wdt:
        wdt.feed()
    print("Running...")
    time.sleep(1)

开发时打开Thonny的串口终端,上电后快速按s就能跳过看门狗,直接修改代码。

二、硬件触发安全模式救砖

如果已经锁死,直接用硬件方式进入安全模式修改文件:

  • Raspberry Pi Pico:按住BOOTSEL按钮再上电,电脑会识别出U盘,直接删除里面的main.py,断电重启后即可正常开发。
  • ESP32:按住BOOT按钮(部分板子需同时按RESET+BOOT,先松RESET)上电,进入下载模式,用Thonny的「安装或更新MicroPython」功能重新刷固件(刷固件会清空板载文件,记得提前备份)。

三、分离看门狗与主程序代码

把看门狗逻辑单独封装成模块,开发时可快速禁用:

  1. 创建wdt_manager.py:
# wdt_manager.py
import machine

wdt = None

def init_wdt(timeout=3000):
    global wdt
    wdt = machine.WDT(timeout=timeout)

def feed_wdt():
    if wdt:
        wdt.feed()
  1. 在main.py中按需调用:
# main.py
import time
# 开发时注释以下两行,上线前取消注释
# from wdt_manager import init_wdt, feed_wdt
# init_wdt(3000)

while True:
    # feed_wdt()  # 开发时注释
    print("Working...")
    time.sleep(1)

新手注意事项

  • 测试看门狗时先从长超时(比如10秒)开始,确认逻辑没问题再缩短时间;
  • 每次修改main.py前建议在本地备份一份,避免意外锁死无法恢复。

内容的提问来源于stack exchange,提问作者flyboy_CW12

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 07:25:34