Таймери та FreeRTOS на ESP32
ESP32 працює під керуванням FreeRTOS, і окрім апаратних таймерів (hw_timer_t) у ньому доступні програмні таймери FreeRTOS. Вони дозволяють запускати функції за розкладом, керувати періодичними подіями та при цьому економити апаратні ресурси.
Що таке програмні таймери FreeRTOS
Програмні таймери FreeRTOS створюються та керуються за допомогою спеціальних функцій ядра. На відміну від апаратних таймерів, вони не залежать від «заліза», а працюють у контексті задач ОС. Основні особливості:
- Не використовують апаратні таймерні блоки ESP32 — звільняють ресурси.
- Можуть бути одноразовими (one-shot) або періодичними (auto-reload).
- Виконують обробник (callback) в окремій службовій задачі FreeRTOS.
Основні функції API
xTimerCreate()— створення таймера.xTimerStart()— запуск таймера.xTimerStop()— зупинка таймера.xTimerDelete()— видалення таймера.
Приклад: миготіння світлодіода через FreeRTOS таймер
#include
#define LED_PIN 2
// Дескриптор таймера
TimerHandle_t blinkTimer;
// Обробник таймера
void blinkCallback(TimerHandle_t xTimer) {
static bool ledState = false;
digitalWrite(LED_PIN, ledState);
ledState = !ledState;
}
void setup() {
pinMode(LED_PIN, OUTPUT);
// Створюємо таймер: ім’я, період 500 мс, auto-reload = true, ID = 0, callback
blinkTimer = xTimerCreate("BlinkTimer", pdMS_TO_TICKS(500), pdTRUE, 0, blinkCallback);
if (blinkTimer != NULL) {
xTimerStart(blinkTimer, 0); // Запускаємо таймер
}
}
void loop() {
// Основний цикл порожній — усе робить таймер
}
Що відбувається: кожні 500 мс виконується callback, і світлодіод на GPIO 2 змінює свій стан.
Порівняння з апаратними таймерами
| Характеристика | Апаратні таймери (hw_timer_t) | Програмні таймери FreeRTOS |
|---|---|---|
| Залежність від заліза | Працюють напряму з блоками таймерів ESP32 | Виконуються в задачах ОС |
| Точність | Висока, до мікросекунд | Мілісекундний діапазон, залежить від системного тика |
| Швидкість виконання | ISR — працює дуже швидко | Є затримка на планування задач |
| Навантаження на CPU | Мінімальне | Трохи вище, ніж у hw_timer |
| Зручність | Потрібно писати обробник ISR | Callback у звичайному коді, легше відлагоджувати |
Коли використовувати програмні таймери
- Коли точність у мікросекундах не критична.
- Для керування подіями в мілісекундному діапазоні (миготіння, оновлення інтерфейсу, періодичні завдання).
- Коли апаратні таймери вже зайняті.
Висновок
Таймери FreeRTOS на ESP32 — зручний інструмент для періодичних завдань. Якщо потрібна висока точність, використовуйте апаратні hw_timer_t. Якщо ж важлива простота і гнучкість — підійдуть програмні таймери FreeRTOS.
Ніжки для лазерного гравера CNC 4 шт. с кріпленням
Ніжки з МДФ для побудови CNC лазерного гравера. Виконують роль власне ніжок, а також повноцінного кр..
179.78грн.
Що таке широтно-імпульсна модуляція (ШІМ) і як вона використовується в Arduino?
Що таке широтно-імпульсна модуляція (ШІМ) і як вона використовується в Arduino? Широт..
ESP32: незалежне керування двома кроковими двигунами NEMA17
ESP32: незалежне керування двома кроковими двигунами NEMA17 Коротко: нижче — два готових варіанти: (..
Ремінь зубчастий 6 мм для 3D-принтера
Відрізок зубчастого ременя шириною 6 мм.Застосовується для переміщення каретки 3D-принтера або CNC п..
49.26грн.
Модуль на DIN-рейку для Arduino Nano — 8 дискретних входів, I2C, SPI, UART
Головний модуль автоматизації для створення домашніх і промислових систем управління на базі Arduino..
557.49грн.






