Створення простого таймера на ESP32: приклад періодичного виклику функції

Під час розробки проєктів на ESP32 часто виникає потреба викликати функцію через рівні проміжки часу. Для цього можна використовувати апаратні таймери, які працюють незалежно від основного циклу loop(). Вони дозволяють організувати точне виконання завдань без блокування програми, на відміну від функції delay().

Чому не варто використовувати delay()

  • delay() повністю зупиняє виконання коду на заданий час;
  • у цей момент не обробляються інші події (наприклад, датчики, зв’язок по Wi-Fi);
  • таймери дозволяють запускати функцію паралельно, без блокувань.

Простий приклад: миготіння світлодіода без delay()

У прикладі нижче використовується апаратний таймер ESP32. Ми налаштуємо його так, щоб він викликав функцію onTimer() кожні 500 мс. Усередині функції відбувається перемикання стану світлодіода.


#define LED_PIN 2  // вбудований світлодіод на багатьох платах ESP32

// Вказівник на таймер
hw_timer_t *timer = NULL;

// Прапорець для перемикання стану
volatile bool ledState = false;

// Функція, яку викликатиме таймер
void IRAM_ATTR onTimer() {
  ledState = !ledState;  
  digitalWrite(LED_PIN, ledState);
}

void setup() {
  pinMode(LED_PIN, OUTPUT);

  // Налаштування таймера:
  // 0 – номер таймера (усього 4 в ESP32),
  // true – рахувати вгору,
  // 80 – переділювач (80 МГц / 80 = 1 МГц → 1 такт = 1 мкс).
  timer = timerBegin(0, 80, true);

  // Прив’язка обробника переривання
  timerAttachInterrupt(timer, &onTimer, true);

  // Налаштування періоду (500000 мкс = 500 мс)
  timerAlarmWrite(timer, 500000, true);

  // Запуск таймера
  timerAlarmEnable(timer);
}

void loop() {
  // Основний цикл вільний для інших завдань
}

Як працює цей код

  • Таймер рахує мікросекунди й кожні 500 000 мкс викликає функцію onTimer().
  • У перериванні ми змінюємо стан змінної ledState і перемикаємо світлодіод.
  • Основний цикл loop() залишається вільним для інших завдань (мережі, датчиків, логіки програми).

Висновок

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

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

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

Примітка: HTML размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Мотор безщіточний A2212 1000KV

Мотор безщіточний A2212 1000KV

Мотор трьохфазний безколекторний для мультикоптерів 1000KVKV: 1000 обертів на вольтМаксимальна ..

360.40грн.

Двигун 12В з редуктором 150RPM

Двигун 12В з редуктором 150RPM

Двигун постійного струму з потужним редуктором для використання в різноманітній робототехніці, елект..

575.28грн.

Підключення крокового двигуна

Підключення крокового двигуна

Привіт друзі! Пропоную вам практичний алгоритм, як правильно підключити обмотки крокового двигуна ..

Калькулятори для електронщиків та радіоаматорів

Калькулятори для електронщиків та радіоаматорів

Онлайн-калькулятори для розрахунку напруги, струму, опору, дільника напруги, резистора для світлодіо..

Модуль 4 реле I2C на DIN-рейку без корпусу

Модуль 4 реле I2C на DIN-рейку без корпусу

Плата продається без коробкиМодуль 4-х релейних виходів I2C для побудови домашньої або промислової с..

766.68грн.

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

Вступ до таймерів ESP32: приклади використання та налаштування

Вступ до таймерів ESP32: приклади використання та налаштування

Вступ до таймерів ESP32 Мікроконтролер ESP32 оснащений потужними апаратними таймерами, які дозвол..

0.00грн.

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

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

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

0.00грн.