如何在Micropython+ESP32环境中使用定时器来实现各种实用功能

电子说

1.3w人已加入

描述

引言

这个基础系列的是为了完成一个智能家居系统。

定时器,顾名思义就是用来计时的。我们常常会设定计时或闹钟,然后时间到了就告诉我们要做什么了。单片机也是这样,通过定时器可以完成各种预设好的任务。在这篇文章中,我们将介绍如何在Micropython+ESP32环境中使用定时器来实现各种实用的功能。

本次我们通过定时器让 LED 周期性每秒闪烁 1 次。

材料准备

  • ESP32开发板
  • LED灯
  • 220欧姆电阻
  • 面包板
  • USB数据线
  • 电脑

连接电路

ESP32

编写代码

## 定时器的基本原理

在单片机中,定时器是一种硬件设备,用于产生精确的时间间隔。当定时器到达设定的时间值时,它会触发一个事件,通知处理器执行相应的任务。在Micropython+ESP32中,我们可以使用machine.Timer类来创建和管理定时器。

ESP32-S3 内置 RTOS(实时操作系统)定时器,在 machine 的 Timer 模块中。通过 MicroPython 可以轻松编程使用。我们也是只需要了解其构造对象函数和使用方法即可。

代码

反转状态方法一:

ESP32

反转状态方法二:

ESP32
上面用两种不同的方法来实现状态的反转。

代码简说

代码中的注释很清晰了,还是分四步走,重点说明一下构造函数和使用方法。

*构造函数:
t=machine.Timer(id) 构建定时器对象
【id】ESP32-S3 有 2 路硬件定时器,id=0~1,也可以定义成-1,即RTOS 虚拟定时器
*使用方法:
tim.init(period,mode,callback) 定时器初始化

  • period:单位为 ms;
  • mode:2 种工作模式,Timer.ONE_SHOT(执行一次)、Timer.PERIODIC(周期
    性);
  • callback:定时器中断后的回调函数。

运行程序

定时器到了预设指定时间后,也会产生中断,因此跟外部中断的编程方式类似。我们已经创建了一个每隔1秒翻转一次引脚状态的定时器。你可以根据需要修改定时器的周期和回调函数来实现各种实用的功能。

总结

本节实验介绍了RTOS定时器的使用方式。虽然使用延时函数也可以实现类似的功能,但是相比于延时函数,定时器具有不占用CPU资源的优势。

在传统的程序设计中,我们常常使用延时函数来实现一些需要等待一段时间的操作。然而,这种方式会阻塞CPU的执行,导致其他任务无法得到及时的处理。而使用定时器可以解决这个问题。

定时器是一种硬件设备,它可以在指定的时间间隔后触发一个事件。通过设置定时器的周期和回调函数,我们可以实现在特定的时间点执行某个任务,而不需要占用CPU的资源。这样,其他的任务就可以在这段时间内继续执行,提高了系统的并发性和响应性。

在使用定时器时,我们需要先初始化一个定时器对象,并设置其周期和回调函数。然后,通过调用定时器的启动方法,使其开始计时。当定时器到达设定的时间值时,它会触发回调函数的执行,从而实现我们想要的功能。

相比于延时函数,定时器的好处在于它不会阻塞CPU的执行。即使定时器正在计时,CPU仍然可以继续处理其他的任务。这样可以提高系统的吞吐量和效率。此外,定时器还可以帮助我们实现更复杂的时间相关操作,如周期性的任务调度、事件触发等。

总之,使用RTOS定时器可以提高系统的性能和效率。通过合理地设置定时器的周期和回调函数,我们可以实现在特定时间点执行任务的需求,而不需要占用CPU的资源。这使得我们能够更好地管理系统的并发性和响应性,提高系统的可靠性和稳定性。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分