ESP32 таймери: Багатозадачність з апаратними таймерами

ESP32 — це потужний мікроконтролер з двоядерним процесором, підтримкою FreeRTOS та апаратними таймерами. Однією з його сильних сторін є можливість використовувати кілька таймерів одночасно. Це відкриває шлях до багатозадачності без застосування блокуючих функцій, таких як delay().

Особливості багатозадачності з таймерами

  • ESP32 має чотири апаратні таймери (по два на кожен таймерний блок).
  • Кожен таймер може працювати незалежно й викликати свій обробник переривань.
  • Можна виконувати паралельні завдання — наприклад, підрахунок імпульсів та керування LED.

Порівняння зі звичайними методами

В Arduino Uno/Nano багатозадачність досягається через хитре використання millis() та логіки в основному циклі. В ESP32 можна розвантажити головний цикл, передавши частину завдань апаратним таймерам.

Приклад 1. Два таймери: світлодіод і лічильник імпульсів

У цьому прикладі перший таймер керує миготінням світлодіода на GPIO 2, а другий підраховує імпульси на GPIO 4.


hw_timer_t *timerLED = NULL;
hw_timer_t *timerCounter = NULL;

volatile int pulseCount = 0;
const int ledPin = 2;
const int pulsePin = 4;

void IRAM_ATTR onTimerLED() {
  digitalWrite(ledPin, !digitalRead(ledPin)); // інвертуємо стан
}

void IRAM_ATTR onTimerCounter() {
  if (digitalRead(pulsePin) == HIGH) {
    pulseCount++;
  }
}

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(pulsePin, INPUT);

  // Таймер для миготіння LED: кожні 500 мс
  timerLED = timerBegin(0, 80, true); 
  timerAttachInterrupt(timerLED, &onTimerLED, true);
  timerAlarmWrite(timerLED, 500000, true);
  timerAlarmEnable(timerLED);

  // Таймер для лічильника імпульсів: перевірка кожну 1 мс
  timerCounter = timerBegin(1, 80, true);
  timerAttachInterrupt(timerCounter, &onTimerCounter, true);
  timerAlarmWrite(timerCounter, 1000, true);
  timerAlarmEnable(timerCounter);

  Serial.begin(115200);
}

void loop() {
  // Виводимо значення лічильника кожні 2 секунди
  static unsigned long lastPrint = 0;
  if (millis() - lastPrint > 2000) {
    Serial.print("Імпульсів: ");
    Serial.println(pulseCount);
    lastPrint = millis();
  }
}

Що відбувається

  • Таймер 0 кожні 500 мс перемикає стан піна зі світлодіодом.
  • Таймер 1 кожну 1 мс перевіряє рівень на pulsePin і збільшує лічильник при HIGH.
  • Основний цикл лишається вільним — він тільки виводить результат на екран раз на 2 секунди.

Приклад 2. Три завдання паралельно

У ESP32 можна задіяти більше таймерів. Наприклад:

  • Таймер 0 — керує миготінням LED.
  • Таймер 1 — підраховує імпульси.
  • Таймер 2 — вимірює інтервал часу і передає дані в Serial.

Це дозволяє будувати реактивні системи без блокувань, де кожне завдання обробляється окремо.

Висновок

Багатозадачність з апаратними таймерами ESP32 дозволяє запускати кілька незалежних функцій паралельно. Це зручно для проєктів, де потрібно одночасно працювати з датчиками, світлодіодами, моторами та комунікаційними протоколами. Використовуючи таймери, ви розвантажуєте основний цикл і підвищуєте стабільність роботи пристрою.

<< Проекти << Усі товари >> Статті, уроки >>

Написати відгук

Примітка: HTML размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Розробка систем моніторингу: температура, вага, витрата води, вологість

Розробка систем моніторингу: температура, вага, витрата води, вологість

Сучасний бізнес, сільське господарство та промисловість дедалі частіше потребують не просто електр..

Таймери Arduino UNO — Частина 1. Вступ

Таймери Arduino UNO — Частина 1. Вступ

Таймери Arduino UNO — Частина 1. Вступ Теорія Що таке таймер у мікроконтролері ATmega3..

Електро насос прозорий 12 В 100°С

Електро насос прозорий 12 В 100°С

Насос працює на основі діафрагми та може застосовуватися для перекачування харчових продуктівВитрата..

269.59грн.

Радіатор для транзистора 34х25х12мм

Радіатор для транзистора 34х25х12мм

Радіатор алюмінієвий для пасивного охолодження різноманітних напівпровідникових силових компонентів:..

29.78грн.

Універсальна монтажна плата на 400 отворів

Універсальна монтажна плата на 400 отворів

Макетна плата на 400 отворів для макетування любительських схемотехнічних проектів. Містить 4 лінії ..

85.85грн.

Рекомендовані товари

Переривання таймера ESP32: hw_timer_t, налаштування обробника та обмеження ISR

Переривання таймера ESP32: hw_timer_t, налаштування обробника та обмеження ISR

Переривання таймера ESP32: hw_timer_t, налаштування обробника та обмеження ISR ESP32 має ап..

0.00грн.

Таймери та FreeRTOS на ESP32

Таймери та FreeRTOS на ESP32

Таймери та FreeRTOS на ESP32 ESP32 працює під керуванням FreeRTOS, і окрім апаратних таймерів (hw..

0.00грн.