Введение в таймеры ESP32
Микроконтроллер ESP32 оснащён мощными аппаратными таймерами, которые позволяют выполнять задачи с высокой точностью и без блокировки работы программы. Эти таймеры называются General Purpose Timers и входят в состав двух Timer Groups — каждая группа содержит по 2 таймера, всего 4 таймера доступно пользователю.
Аппаратные таймеры ESP32
- Всего доступно 4 таймера (по 2 в каждой группе Timer Group0 и Timer Group1).
- Точность до 80 МГц (в зависимости от источника тактирования).
- Могут работать в режиме однократного или периодического запуска.
- Поддержка прерываний: можно вызвать функцию при каждом срабатывании таймера.
Отличие от millis() и delay()
Функции millis() и delay() удобны для простых проектов, но имеют ограничения:
millis()иmicros()дают доступ только к текущему времени, но не могут напрямую запускать действия.delay()полностью блокирует выполнение кода, что мешает многозадачности.- Аппаратные таймеры позволяют запускать функции в фоне, без остановки основной программы.
Преимущества аппаратных таймеров ESP32
- Высокая точность: микросекундные интервалы.
- Возможность параллельного запуска нескольких таймеров.
- Работа в фоне — основной цикл
loop()остаётся свободным. - Можно реализовать задачи «реального времени» — например, измерение частоты, генерация сигналов или циклический опрос датчиков.
Пример 1. Простой таймер с прерыванием
Этот код вызывает функцию каждые 1 секунду.
hw_timer_t *timer = NULL;
void IRAM_ATTR onTimer() {
Serial.println("Таймер сработал!");
}
void setup() {
Serial.begin(115200);
// Создаём таймер: (номер, предделитель, считать вверх)
timer = timerBegin(0, 80, true);
// Предделитель 80 => частота 1 МГц (1 мкс на тик)
// Привязываем обработчик прерывания
timerAttachInterrupt(timer, &onTimer, true);
// Настраиваем таймер: каждые 1 000 000 мкс = 1 секунда
timerAlarmWrite(timer, 1000000, true);
// Запускаем
timerAlarmEnable(timer);
}
void loop() {
// Основной цикл свободен
}
Пример 2. Несколько таймеров
Можно запустить несколько таймеров для разных задач.
hw_timer_t *timer1 = NULL;
hw_timer_t *timer2 = NULL;
void IRAM_ATTR onTimer1() {
Serial.println("Таймер 1: мигаем светодиодом");
digitalWrite(2, !digitalRead(2));
}
void IRAM_ATTR onTimer2() {
Serial.println("Таймер 2: задача опроса датчика");
}
void setup() {
pinMode(2, OUTPUT);
Serial.begin(115200);
// Таймер 1: каждые 500 мс
timer1 = timerBegin(0, 80, true);
timerAttachInterrupt(timer1, &onTimer1, true);
timerAlarmWrite(timer1, 500000, true);
timerAlarmEnable(timer1);
// Таймер 2: каждые 2 секунды
timer2 = timerBegin(1, 80, true);
timerAttachInterrupt(timer2, &onTimer2, true);
timerAlarmWrite(timer2, 2000000, true);
timerAlarmEnable(timer2);
}
void loop() {
// Всё работает в прерываниях
}
Пример 3. Однократный таймер
Иногда нужно выполнить действие только один раз с задержкой.
hw_timer_t *timer = NULL;
void IRAM_ATTR onTimer() {
Serial.println("Сработал однократный таймер!");
}
void setup() {
Serial.begin(115200);
timer = timerBegin(0, 80, true);
timerAttachInterrupt(timer, &onTimer, true);
timerAlarmWrite(timer, 3000000, false); // 3 секунды, без автоповтора
timerAlarmEnable(timer);
}
void loop() {
// Однократный запуск, после чего таймер отключается
}
Заключение
Аппаратные таймеры ESP32 позволяют реализовывать более надёжные и гибкие проекты по сравнению с использованием delay() или millis(). Они обеспечивают высокую точность, параллельное выполнение задач и отсутствие блокировок — это особенно важно в проектах IoT и в реальном времени.
ЧТО ТАКОЕ ТРАНЗИСТОР?
Термин «биполярный транзистор» связан с тем, что в этих транзисторах используются носители зарядов д..
Модуль блока питания 5В 700мА
Миниатюрный безкорпусный трансформаторный блок питания для любительских проектов.Входное напряжение ..
70.15грн.
Твердотельное реле 10А
Реле без механических контактов на 10 А. Силовым элементом данного реле является симистор.Гальваниче..
281.48грн.
Обмен данными между двумя Arduino при помощи программного UART
Обмен данными между двумя Arduino при помощи программного UARTКоммуникация по последовательному порт..
Автоматическое управление твердотопливным котлом Arduino Nano
Предмет проекта домашней автоматики Вашему вниманию представлен большой проект - автоматический щит..






