为什么我们需要这个 ESP8266TimerInterrupt 库
Features
此库使您能够在基于 ESP8266 的开发的系统中使用来自硬件计时器的中断。
由于硬件定时器是罕见的,并且是任何板卡的非常宝贵的资产,因此该库现在使您能够使用多达 16 个基于 ISR 的定时器,同时仅消耗 1 个硬件定时器。计时器的间隔很长(ulong 毫秒)。
现在,有了这些新的16个基于ISR的计时器,最大间隔几乎是无限的(仅受无符号长毫秒的限制),而与软件计时器相比,精度几乎是完美的。
最重要的功能是它们是基于 ISR 的计时器。因此,它们的执行不会被行为不良的函数/任务阻止。这个重要功能对于关键任务是绝对必要的。
ISR_Timer_Complex示例将通过打印每种类型的计时器的实际经过毫秒数来展示与软件计时器相比几乎完美的精度。
作为基于 ISR 的计时器,它们的执行不会被行为不良的功能/任务阻止,例如连接到 WiFi、Internet 和 Blynk 服务。您还可以使用许多(最多 16 个)计时器。
这种不被阻塞的重要功能对于关键任务是绝对必要的。
您会看到 blynkTimer 软件在系统连接到 WiFi / Internet / Blynk 时被阻止,以及在 loop() 中阻止任务,以 delay() 函数为例。那么,经过的时间是非常不准确的。
为什么使用基于 ISR 的硬件定时器中断更好
想象一下,您有一个具有关键任务功能的系统,测量水位并控制污水泵或做更重要的事情。您通常使用软件计时器来轮询,甚至将函数放在 loop() 中。但是,如果另一个函数阻塞了 loop() 或 setup() 怎么办?
因此,您的函数可能无法执行,结果将是灾难性的。
你更愿意调用你的函数,无论其他函数(忙循环、bug 等)发生什么。
正确的选择是使用带中断功能的硬件计时器来调用函数。
这些使用中断的硬件计时器即使其他功能阻塞,仍然可以工作。此外,它们比其他使用 millis() 或 micros() 的软件计时器更精确(当然取决于时钟频率精度)。如果您需要测量一些需要更高准确性的数据,那么这是必要的。
如果 loop() 或 setup() 被某些操作阻塞,则使用普通软件计时器的函数(依赖于 loop() 并调用 millis(),将无法工作。例如,某些功能在连接到 WiFi 或某些服务时被阻止。
问题是您的函数现在是 ISR(中断服务程序)的一部分,并且必须精简/平均,并遵循某些规则。更多阅读内容:
预先准备
- Arduino 1.8.19+
- ESP8266 Core 3.0.2+
- SimpleTimer library
安装
用Arduino库管理器
The best and easiest way is to use Arduino Library Manager. Search for ESP8266TimerInterrupt, then select / install the latest version. You can also use this link arduino-library-badge for more detailed instructions.
手动安装
另一种安装方式:
- 导航到TimerInterrupt页面
- 下载