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

Муфта на кроковий двигун 8x8x25мм

Ця муфта слугує перехідником між валами 8 мм та 8 мм. Тобто містить з обох боків отвір діаметром 8 м..

61.62грн.

Термопара K-типу -100...1250°C 5х50мм

Термопара K-типу -100...1250°C 5х50мм

Термопара купить ТХА хромель-алюмель використовується для вимірювання екстремально високих температу..

203.04грн.

Припой з каніфоллю 0,5мм 30г

Припой з каніфоллю 0,5мм 30г

Нитка припою для тонкої пайки мілких радіодеталей, що містить флюсСвинця 40 %Олова 60 %Флюса 1,2 %На..

211.57грн.

Драйвер крокового двигуна RAMPS 1.4 для CNC або 3D-принтера

Драйвер крокового двигуна RAMPS 1.4 для CNC або 3D-принтера

Драйвер A4988 під шилд RAMPS 1.4Є можливість налаштовувати робочий струм двигуна за допомогою з..

60.91грн.

Arduino 4-20 мА підключення датчика рівня

Arduino 4-20 мА підключення датчика рівня

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

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

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

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

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

0.00грн.

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

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

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

0.00грн.