一、ESP32定时器的介绍
ESP32微控制器的每个核心都有2个定时器,可以选择做为通用的定时器、低功耗的定时器(仅工作在睡眠模式下)和高精度定时器(仅适用于算法加速器)等。
ESP32的定时器可以设置安装时间,在到达指定时间后,它可以自动开启或关闭外设,限制其工作模式和持续时间。ESP32还提供了两种不同类型的定时器-硬件定时器和软件定时器。
硬件定时器是ESP32微控制器里的标准定时器,是由硬件电路实现的,并且不会受到其他任务和中断的干扰。软件定时器是由软件实现的,其原理是使用中断信号驱动。软件定时器比硬件定时器的缺点在于,当系统有负载时,它们的准确性会下降。
二、使用ESP32定时器开关LED
// 引入 required 库 #include "Arduino.h" // 存储引脚信息 const int LED = 2; // 定义定时器相关的变量 unsigned long previousMillis = 0; const long interval = 1000; void setup() { pinMode(LED, OUTPUT); Serial.begin(9600); } void loop() { unsigned long currentMillis = millis(); // 获取当前系统的时间 if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; digitalWrite(LED, !digitalRead(LED)); } }
上面的示例程序使用ESP32定时器开关LED。首先,我们必须引入所需的库,在程序设定LED的针脚。然后定义两个变量:previousMillis,用于存储上一次切换LED时的时间,以及interval,即LED在开头和关闭之间所需要保持的时间。接下来,我们将针脚设置为输出,并开始Serial通信。
在主循环中,我们获得当前的系统时间(currentMillis)。如果过去的时间(currentMillis-previousMillis)已经达到interval的时间,那么previousMillis就会更新为当前时间(currentMillis)。然后,LED将翻转。
这个例子说明了ESP32定时器的简单用法。我们可以使用不同的时间间隔来控制其他外设的操作,比如音箱、电机和传感器。
三、使用ESP32定时器控制蜂鸣器
// 引入 required 库 #include "Arduino.h" // 定义蜂鸣器的针脚 const int buzzer = 24; void setup() { //将蜂鸣器的引脚设置为输出 pinMode(buzzer, OUTPUT); } void loop() { // 频率为262(Hz)声音 0.5 秒 tone(buzzer, 262); delay(500); // 停止声音 0.1 秒 noTone(buzzer); delay(100); // 频率为294(Hz)声音 0.5 秒 tone(buzzer, 294); delay(500); // 停止声音 0.1 秒 noTone(buzzer); delay(100); // 以此类推... }
上面的示例程序是在ESP32控制蜂鸣器的针脚。我们定义了一个蜂鸣器针脚,并将其设置为输出。然后,在主循环中,我们定义了一系列音乐,每个音乐的时长、惯性都不同。ESP32将使用tone()方法在指定的时间内播放音符。然后,使用noTone()停止音符播放。
通过这个例子,我们可以理解使用ESP32定时器可以非常灵活地控制蜂鸣器。
四、使用ESP32定时器控制电机
// 引入 required 库 #include// 定义电机的针脚 const int motorPin = 13; // 定义舵机库 Servo motor; void setup() { // 将电机针脚设置为输出 pinMode(motorPin, OUTPUT); // 将舵机应用于电机 motor.attach(motorPin); } void loop() { // 向前 1 秒 forward(); delay(1000); // 停止 1 秒 stop(); delay(1000); // 向后 1 秒 backward(); delay(1000); // 停止 1 秒 stop(); delay(1000); } void stop() { motor.write(90); // 停止 digitalWrite(motorPin, LOW); } void backward() { motor.write(0); // 向后 digitalWrite(motorPin, HIGH); } void forward() { motor.write(180); // 向前 digitalWrite(motorPin, HIGH); }
上面的示例程序是示范如何使用ESP32定时器控制电机。我们需要引入Servo库,并将电机的针脚设置为输出模式。
在主循环中,我们定义了几个运动,使用delay()方法设定时间,当然可以根据需要改变。然后我们又定义了三个函数,分别控制电机向前、向后和停止。ESP32使用舵机将电机引脚上的电机控制转化为机械运动。
五、结论
使用ESP32定时器可以提高项目功能。我们可以用它来控制LED、蜂鸣器和电机。可以发现,使用这种硬件方法比使用软件控制更加准确和准确性高。同时,ESP32提供了很多不同类型的定时器,可以适应不同项目的要求。通过这篇文章,相信你能够更好地理解ESP32定时器,并能够使用它来完成自己的项目。