适用于带看门狗定时器(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」功能重新刷固件(刷固件会清空板载文件,记得提前备份)。
三、分离看门狗与主程序代码
把看门狗逻辑单独封装成模块,开发时可快速禁用:
- 创建
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()
- 在
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
相关产品推荐
相关产品推荐

