Створення простого таймера на 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 размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Налаштування струму драйвера A4988

Налаштування струму драйвера A4988

Мікросхеми - драйвера крокових двигунів такі, як A4988, відрізняються від звичайних H-мостів, або по..

Модуль блока питания 3,3В 1А

Модуль блока питания 3,3В 1А

Зручний модуль живлення з 220В AC в 3,3В постійного струму. Розроблений для встановлення на друкован..

153.96грн.

Спортивне табло таймер своїми руками

Спортивне табло таймер своїми руками

Постановка задачі Задачею проекту є виготовлення спортивного таймеру для міні-футбольного турні..

Измерение уровня шума Arduino Nano

Измерение уровня шума Arduino Nano

Знадобилось мені заміряти фоновий рівень звуку для проекту розумного дому і виявилось, що це не прос..

Модуль термопари К-типу MAX6675 0...+1024 °C для Arduino

Модуль термопари К-типу MAX6675 0...+1024 °C для Arduino

Цей модуль на основі спеціалізованої мікросхеми MAX6675 призначений для точного вимірювання високих ..

168.35грн.

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

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

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

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

0.00грн.

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

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

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

0.00грн.