Last Updated on 15. Oktober 2026 by sfambachLink-Status: OK
Ein beliebtes Beispiel in der Arduino Umgebung ist Blink. Hier wird eine LED mit einer kurzen Pause an und aus geschaltet. Zu Gpio Aktionen kommen wir im nächsten Kapitel, um das Blinken kümmern wir uns hier. Auch in der Arduino Umgebung wird immer geraten, Codeunterbrechungen mit Delay zu vermeiden. Dort gibt es einige Konstrukte mit selbst gestrickten Timern oder ganzen Bibliotheken. In der IDF gibt es als Bestandteil des RTOS Timerfunktionen, diese ermöglichen Funktionsaufrufe zu terminieren. Es gibt zwei Optionen: periodisch und einmalig.
Was benötigt man für einen IDF Timer?
Eine Funktion, welche die folgende Signatur haben muss:
static void timer_callback(void* arg){
}
Die Timerargumente, welche einen Pointer auf die Timerfunktion (s.o.) und einen frei wählbaren Namen enthalten.
const esp_timer_create_args_t periodic_timer_args = {
/* Pointer auf die Funktion */
.callback = &timer_callback,
/* Der name ist optional*/
.name = "periodic"
};
Jetzt noch den Timer erstellen.
esp_timer_handle_t periodic_timer;
ESP_ERROR_CHECK(
esp_timer_create(&periodic_timer_args, &periodic_timer)
);
Dann noch entscheiden, ob dieser periodisch oder nur einmal gestartet werden soll. Der zweite Parameter ist die Auslösezeit in Mikrosekunden (Millisekunden * 1000)
//** periodisch
ESP_ERROR_CHECK(
esp_timer_start_periodic(periodic_timer, 5000000)
);
//** Nur einmal
ESP_ERROR_CHECK(
esp_timer_start_single(periodic_timer, 5000000)
);
Im Beispiel wird die periodische Ausgabe des Textes aus der Übung 1 alle 5 Sekunden realisiert.
Quellcode main.c (GitHubLink-Status: OK)
/** idf example
*
* Timed hello world example with output every 5 seconds on the console
*
* Some parts are copied from the official idf examples found on
* https://docs.espressif.com/projects/esp-idf/en/latest/esp32/
*
* Modified by SteFam @ http://www.fambach.net
*
* GPLv3
* Blah blah blah, free to use.
* I invested some time and mony in those examples if you want to delete this header
* please do not forget to mention at least my website, thanks!
*/
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
// method declaration for timer callbacks
static void timer_callback(void* arg);
void app_main(void)
{
//* setup timer
//** create arguments for timer task
const esp_timer_create_args_t periodic_timer_args = {
/* name of the callback function defined before */
.callback = &timer_callback,
/* name is optional, but may help identify the timer when debugging */
.name = "periodic"
};
//** create time itself
esp_timer_handle_t periodic_timer;
ESP_ERROR_CHECK(esp_timer_create(&periodic_timer_args, &periodic_timer));
//** start the timer periodic
ESP_ERROR_CHECK(esp_timer_start_periodic(periodic_timer, 5000000));
//** for a single shot do this
// ESP_ERROR_CHECK(esp_timer_start_single(periodic_timer, 5000000));
}
static void timer_callback(void* arg)
{
// single console output
printf("www.fambach.net\n");
}

Fazit
Es gibt noch viele weitere Optionen in der IDF, um Timer zu nutzen. Hier habe ich nur die Oberfläche der Thematik angekratzt. Für weitere Informationen sei deshalb auf die IDF Dokumentation verwiesen.
Verwandte Beiträge
HauptbeitragLink-Status: Kaputt
Quellen
IDF-RTOSLink-Status: OK
IDF-Timer ApiLink-Status: OK
| Datum | Änderung | Autor |
|---|---|---|
| 15.10.2026 | Beispielcode als Code-Block eingefügt (Einbettung über gist-it.appspot.com funktionierte nicht mehr) | sfambach |
| 04.10.2026 | Rechtschreibung korrigiert: Tippfehler, Kommas, Grammatik | sfambach |
| 03.10.2026 | Log-Liste eingefügt | sfambach |
| 07.01.2021 | Beitrag erstellt | sfambach |