Таймери та 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.
Arduino SIM800 CBC рівень заряду
Привіт друзі! SIM800L має аналого-цифровий перетворювач, який призначений для вимірювання напруги жи..
Роз'ємний конектор JST SM
Слугує для швидкороз'эмного з'єднання. Наприклад, для монтажу датчиків, виконавчих механізмів, підве..
31.09грн.
Цифровий датчик температури та вологості DHT11 з підтягуючим резистором
Вимірювання відносної вологості в межах 20 ... 90 %Точність вимірювання вологості ± 5,0 %RHВимірюван..
74.11грн.
Гвинт М3х30мм оцинкований
Гвинт оцинкований з різьбою М3 для кріплення елементів любительських проектівДовжина різьби 30 мм..
2.17грн.
ESP32: Високоточні вимірювання сигналів за допомогою таймерів
ESP32: Високоточні вимірювання сигналів за допомогою таймерів ESP32 оснащений потужними апаратним..







