【雕爷学编程】MicroPython手册之 ESP8266 WDT(看门狗定时器)

在这里插入图片描述
MicroPython是为了在嵌入式系统中运行Python 3编程语言而设计的轻量级版本解释器。与常规Python相比,MicroPython解释器体积小(仅100KB左右),通过编译成二进制Executable文件运行,执行效率较高。它使用了轻量级的垃圾回收机制并移除了大部分Python标准库,以适应资源限制的微控制器。

MicroPython主要特点包括:
1、语法和功能与标准Python兼容,易学易用。支持Python大多数核心语法。
2、对硬件直接访问和控制,像Arduino一样控制GPIO、I2C、SPI等。
3、强大的模块系统,提供文件系统、网络、图形界面等功能。
4、支持交叉编译生成高效的原生代码,速度比解释器快10-100倍。
5、代码量少,内存占用小,适合运行在MCU和内存小的开发板上。
6、开源许可,免费使用。Shell交互环境为开发测试提供便利。
7、内置I/O驱动支持大量微控制器平台,如ESP8266、ESP32、STM32、micro:bit、掌控板和PyBoard等。有活跃的社区。

MicroPython的应用场景包括:
1、为嵌入式产品快速构建原型和用户交互。
2、制作一些小型的可 programmable 硬件项目。
3、作为教育工具,帮助初学者学习Python和物联网编程。
4、构建智能设备固件,实现高级控制和云连接。
5、各种微控制器应用如物联网、嵌入式智能、机器人等。

使用MicroPython需要注意:
1、内存和Flash空间有限。
2、解释执行效率不如C语言。
3、部分库函数与标准版有差异。
4、针对平台优化语法,订正与标准Python的差异。
5、合理使用内存资源,避免频繁分配大内存块。
6、利用原生代码提升速度关键部位的性能。
7、适当使用抽象来封装底层硬件操作。

总体来说,MicroPython让Python进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。
在这里插入图片描述

ESP8266是一种低成本的Wi-Fi芯片,它可以用于开发物联网、智能家居、网络控制等应用。不同的ESP8266芯片或模块可能有不同的参数,因此在使用或购买时,需要注意选择合适的型号和版本。以下是一些常见的ESP8266参数:

1、尺寸:ESP8266芯片的尺寸为5x5 mm,ESP8266模块的尺寸根据外围电路和天线的不同而有所差异,一般在10x15 mm到25x50 mm之间。
2、工作温度:ESP8266芯片的工作温度范围为-40125℃,ESP8266模块的工作温度范围一般为-4085℃。
3、处理器:ESP8266芯片内置了一个32位的Tensilica L106 RISC处理器,最高时钟频率为160 MHz,支持实时操作系统和Wi-Fi协议栈。
4、内存:ESP8266芯片内置了64 KB的指令RAM和96 KB的数据RAM,以及64 KB的boot ROM。ESP8266模块还需要外接一个Flash存储器,一般为512 KB到16 MB之间。
5、电源:ESP8266芯片的供电电压为3.0~3.6 V,最大功耗为170 mA,最小功耗为20 uA。ESP8266模块的供电电压一般为3.3 V或5 V,最大功耗一般为200~300 mA,最小功耗一般为10~20 uA。
6、通信协议:ESP8266芯片支持IEEE 802.11 b/g/n标准的Wi-Fi协议,支持Station、SoftAP和Station+SoftAP三种模式。ESP8266芯片还支持多种数字外设接口,如GPIO、PWM、ADC、UART、I2C、SPI等。ESP8266芯片还可以使用socket模块或其他协议库来实现TCP/IP、UDP、HTTP、MQTT等协议。
在这里插入图片描述
MicroPython的ESP8266 WDT(看门狗定时器)是一种用于在应用程序崩溃或进入不可恢复状态时重新启动系统的内置硬件模块。

WDT的主要特点有:

WDT一旦启动,就不能停止或重新配置,应用程序必须定期“喂狗”(调用feed方法)来防止WDT超时并重置系统。
WDT的超时时间不能指定,由底层系统决定,一般为几秒到几十秒不等。
WDT可以通过中断请求(IRQ)机制实现对超时事件的监测和响应。

WDT的应用场景有:

WDT可以用于检测和处理应用程序的死循环、死锁、内存泄漏等异常情况,提高系统的稳定性和可靠性。
WDT可以用于实现系统的自动重启和恢复,避免人工干预和维护。
WDT可以用于实现系统的安全保护,防止恶意攻击或篡改。

WDT的注意事项有:

WDT的使用需要谨慎,避免误触发或无法触发的情况,导致系统重启或卡死。
WDT的使用需要合理,避免过于频繁或不必要的重启,影响系统的性能和效率。
WDT的使用需要协调,避免与其他模块或功能产生冲突或干扰。

MicroPython的ESP8266 WDT(看门狗定时器)的几个实际运用程序参考代码案例如下:

案例1:使用WDT监测一个可能死循环的函数:

# 导入相关模块
import machine
import time

# 创建WDT对象
wdt = machine.WDT()

# 定义一个可能死循环的函数
def risky_function():
    # 随机生成一个0到9的整数
    n = machine.rng() % 10
    # 如果n等于0,就进入死循环
    if n == 0:
        while True:
            pass
    # 否则,就打印n并返回
    else:
        print(n)
        return

# 循环调用risky_function函数
while True:
    # 调用risky_function函数
    risky_function()
    # 喂狗,防止WDT超时
    wdt.feed()
    # 等待一秒
    time.sleep(1)

案例2:使用WDT实现系统每隔一分钟自动重启:

# 导入相关模块
import machine
import time

# 创建WDT对象
wdt = machine.WDT()

# 循环执行一些任务
while True:
    # 打印当前日期和时间
    print(machine.RTC().datetime())
    # 执行一些其他任务(省略)
    # ...
    # 等待一秒
    time.sleep(1)
    # 如果运行时间超过一分钟,就不再喂狗,让WDT超时并重启系统
    if time.ticks_diff(time.ticks_ms(), start) > 60000:
        break

案例3:使用WDT和IRQ实现对超时事件的响应:

# 导入相关模块
import machine

# 创建WDT对象
wdt = machine.WDT()

# 定义一个处理WDT超时事件的回调函数
def handle_timeout():
    # 打印一条提示信息
    print('Watchdog timeout, system will reboot.')
    # 执行一些其他操作(省略)
    # ...

# 配置WDT的IRQ,设置回调函数为handle_timeout
wdt.irq(trigger=wdt.TIMEOUT, handler=handle_timeout)

# 执行一些可能导致系统卡死的操作(省略)
# ...

案例4:简单的看门狗定时器重启示例:

import machine

wdt = machine.WDT(timeout=5000)  # 设置看门狗定时器超时时间为5秒

while True:
    # 执行一些任务
    # ...

    wdt.feed()  # 喂狗,重置看门狗定时器

这个示例使用ESP8266的看门狗定时器(WDT)模块进行简单的重启任务。在主循环中执行一些任务,然后调用feed()方法重置看门狗定时器。如果主循环中的任务执行时间超过了设定的超时时间(5秒),看门狗定时器将会触发并重启ESP8266。

案例5:使用看门狗定时器实现软件重启:

import machine

wdt = machine.WDT(timeout=5000)  # 设置看门狗定时器超时时间为5秒

def check_reset_condition():
    # 检查重启条件
    # 返回True表示需要重启,False表示不需要重启
    # ...

while True:
    # 执行一些任务
    # ...

    if check_reset_condition():
        machine.reset()  # 软件重启

    wdt.feed()  # 喂狗,重置看门狗定时器

这个示例使用ESP8266的看门狗定时器(WDT)模块实现软件重启功能。在主循环中执行一些任务,并在适当的时候调用check_reset_condition()函数检查是否满足重启条件。如果满足重启条件,就调用machine.reset()进行软件重启。同时,还需要在主循环中调用wdt.feed()方法重置看门狗定时器,以避免看门狗定时器触发重启ESP8266。

案例6:禁用看门狗定时器:
i

mport machine

wdt = machine.WDT(timeout=5000)  # 设置看门狗定时器超时时间为5秒

# 禁用看门狗定时器
wdt.deinit()

while True:
    # 执行一些任务
    # ...

这个示例演示了如何禁用ESP8266的看门狗定时器(WDT)。通过调用wdt.deinit()方法,可以禁用看门狗定时器,从而停止看门狗定时器的运行。这在某些特定情况下可能是需要的,例如在进行调试或测试时暂时禁用看门狗定时器。这些示例展示了如何在MicroPython的ESP8266模块上使用看门狗定时器(WDT)进行重启和软件重启操作,以及如何禁用看门狗定时器。请注意,看门狗定时器是用于监控系统的运行状态,如果系统在设定的超时时间内没有被重置(喂狗),看门狗定时器将会触发并重启系统。因此,在使用看门狗定时器时需要小心处理,确保喂狗的频率和任务执行时间适当。

案例7:简单的看门狗定时器示例:

import machine

wdt = machine.WDT()  # 创建WDT对象

# 启动看门狗定时器并设置超时时间为5秒
wdt.feed()
wdt.timeout(5000)

# 停止看门狗定时器
wdt.stop()

在上述示例中,我们使用machine.WDT()创建一个WDT对象。通过调用WDT对象的feed()方法,可以喂狗,即重置看门狗定时器的计时。通过调用WDT对象的timeout()方法,可以设置看门狗定时器的超时时间,单位为毫秒。在示例中,我们设置超时时间为5秒(5000毫秒)。最后,通过调用WDT对象的stop()方法停止看门狗定时器。

案例8:使用看门狗定时器进行系统重启:

import machine

wdt = machine.WDT()  # 创建WDT对象

# 启动看门狗定时器并设置超时时间为10秒
wdt.feed()
wdt.timeout(10000)

# 模拟故障导致系统重启
while True:
    # 执行一些操作...
    wdt.feed()  # 在循环中喂狗,避免看门狗定时器超时

    # 模拟故障发生
    if some_fault_condition:
        machine.reset()  # 发生故障时,通过重启系统来恢复

在上述示例中,我们使用machine.WDT()创建一个WDT对象。通过调用WDT对象的feed()方法,可以喂狗,即重置看门狗定时器的计时。通过调用WDT对象的timeout()方法,可以设置看门狗定时器的超时时间,单位为毫秒。在示例中,我们设置超时时间为10秒(10000毫秒)。在主循环中,我们通过调用wdt.feed()方法喂狗,以避免看门狗定时器超时。然后,我们模拟故障发生的情况。当满足某个故障条件时,通过调用machine.reset()来重启系统以恢复正常运行。

案例9:嵌入式应用中使用看门狗定时器:

import machine
import time

wdt = machine.WDT()  # 创建WDT对象

# 启动看门狗定时器并设置超时时间为1秒
wdt.feed()
wdt.timeout(1000)

# 执行实时任务
while True:
    # 执行一些实时任务...
    wdt.feed()  # 在循环中喂狗,避免看门狗定时器超时

    # 任务完成后等待一段时间
    time.sleep(0.1)

在上述示例中,我们使用machine.WDT()创建一个WDT对象。通过调用WDT对象的feed()方法,可以喂狗,即重置看门狗定时器的计时。通过调用WDT对象的timeout()方法,可以设置看门狗定时器的超时时间,单位为毫秒。在示例中,我们设置超时时间为1秒(1000毫秒)。在主循环中,我们执行一些实时任务,并在循环中通过调用wdt.feed()方法喂狗,以避免看门狗定时器超时。在任务完成后,我们使用time.sleep()函数等待一段时间,以便进行下一次任务循环。这些示例提供了使用MicroPython控制ESP8266的看门狗定时器(WDT)的实际运用程序参考代码案例。请注意,具体的超时时间和喂狗的频率应根据实际需求进行调整,并确保喂狗的频率不超过超时时间,以避免看门狗定时器的触发。

请注意,以上示例仅供参考,具体的使用方法可能因不同的硬件平台和MicroPython版本而有所差异。在实际编程中,你需要根据你所使用的硬件和具体需求进行适当的调整。

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值