ESP-IDF: Erste Schritte – LED-Blink-Programm

Programmbeispiele

Programmbeispiele werden von Espressif etwas verschachtelt im Espressif-Ordner mitgeliefert. Diese befinden sich im get-started Ordner.

C:\Espressif\frameworks\esp-idf-v5.5\examples

screenshot 2025 11 02 120857
Abb. 1 – Beispielprogramme

Die ESP-IDF stellt unter C:\Espressif\frameworks\esp-idf-v5.5\examples\get-started verschiedene Beispielprojekte bereit, darunter das Blink-Beispiel. Beim Öffnen des Projekts und der .c-Dateien im main-Ordner wird deutlich, dass der Code zwar technisch korrekt ist, für Einsteiger jedoch wenig selbsterklärend wirkt und zusätzliche Schritte wie das Anschließen einer LED voraussetzt. Das Projekt eignet sich daher vor allem zum Überprüfen der Installation. Für ein klareres Einstiegsszenario wird das Blink-Projekt lediglich als Vorlage verwendet und der ursprüngliche Code durch eine vereinfachte eigene Variante ersetzt.

/* 
    Blinkende LED
*/

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "sdkconfig.h"

#define LED1 2                                       // LED an Pin 2 anschließen.

void Blink()                                         // LED blinkt jede Sekunde
{
    gpio_set_level(LED1, 1);
    vTaskDelay(500 / portTICK_PERIOD_MS);
    gpio_set_level(LED1, 0);
    vTaskDelay(500 / portTICK_PERIOD_MS);
}

void app_main(void)                                  // Hier startet das Programm
{
    gpio_set_direction(LED1, GPIO_MODE_OUTPUT);      // Pin 2 als Ausgang definieren
    
    while(1)
    {
       Blink();
    }
}

Beispielcode – einfache blinkende LED

Nächster Schritt: Neues Projekt erstellen und das Beispielprogramm auf den ESP32 flashen.

 

Projekt erstellen

Zunächst erstellen wir unter C:\ einen Projekt Ordner, in dem wir unsere neu erstellten Projekte ablegen können. Ich nenne ihn hier C:\esp_projekte.

screenshot 2025 11 02 181930
Abb. 2 – Projektordner

Der einfachste und schnellste Weg ein Projekt zu erstellen ist, ein bestehendes Projekt zu verwenden. Das machen wir, in dem wird den gesamten Ordner blink aus dem get-startedOrdner (siehe oben) in unseren neuen esp_projekte-Ordner kopieren.

screenshot 2025 11 02 182202

Abb. 3 – Projekt einfügen

Jetzt können wir das Projekt schon bauen und flashen. Aber vorher möchten wir noch gerne das vorhandene Projekt von Espressif gegen unser einfacheres Projekt ersetzen. Dazu öffnen wir den Ordner blink und den darin enthaltenen Ordner main. Dort ist eine Datei mit der Endung .c. In diesem Beispiel heißt sie blink_example_main.c.

screenshot 2025 11 02 182836
Abb. 4 – blink_example_main.c

Diesen öffnen wir einfach per Doppelklick im Editor unseres Vertrauens. Ich verwende Notepad++, es geht aber auch mit dem Standard Editor der in Windows integriert ist.

Den gesamten Inhalt der Textdatei löschen, z.B. mit strg+A und dann entf. Dann unseren vereinfachten Beispielcode von oben in die Datei kopieren, speichern und schließen. Bitte beachtet, dass ihr alles gelöscht und auch vollständig kopiert habt, mit allen #includes.

screenshot 2025 11 02 183715
Abb. 5 – Copy to Clipboard

Verwendet dazu am besten das Copy-to-clipboard Button oben rechts in der Abbildung, da dann der Code schön formattiert in die Datei kopiert wird. Was dann folgendermaßen aussehen sollte.

screenshot 2025 11 02 183859
Abb. 6 – blink_example_main.c

Ihr seht schon, wie schön der Code in Notepad++ hervorgehoben wird (Syntax-Highlightning). Es loht sich dieses kostenlose tool herunter zu laden.

 

Projekt bauen

Zum Bauen und flashen des Projektes öffnen wir jetzt die installierte ESP-IDF in der Kommandozeile. Bei der Installation wurde die ESP-IDF 5.5 CMD auf dem Desktop abgelegt. Wenn nicht, gebt ihr einfach ESP in die Suche ein und dann solltet ihr das schon angezeigt bekommen.

screenshot 2025 11 02 185303
Abb.7 – ESP-IDF ausführen

Folgendes Fenster erscheint, welches wir bereits bei der Installation des ESP-IDF kennengelernt haben:

screenshot 2025 11 01 195527
Abb. 8 – ESP-IDF erfolgreich ausgeführt

An dieser Stelle macht es Sinn, ein paar grundlegende Befehle der CMD zu kennen, wie z.B.

  • cd       Verzeichnis wechseln
  • cd..     Ein Verzeichnis/Ordner nach oben
  • cd\     Zum Stammverzeichnis, hier C:\
  • dir      Dateien und Ordner im aktuellen Verzeichnis auflisten

Mehr benötigen wir gar nicht.

Einfach cd\ eingeben und Enter drücken, dann den Ordner in dem unser blink Projekt ist, mit cd davor eingeben und wieder Enter drücken und das gleiche für den blink Ordner, also cd blink und dann Enter. Oder einfacher, ganz am Anfang den vollständigen Pfad cd C:\esp_projects\blink ohne cd\ eingeben.

Dann erscheint folgendes:

screenshot 2025 11 02 191135
Abb. 9 – in den Arbeitsordner wechseln

Jetzt befinden wir uns in unserem Projekte Ordner. Von hier können wir bauen und flashen. Da wir ein bereits vorhandens Projekt gewählt hatten, müssen wir das zunächst bereinigen, was ganz einfach mit dem Befehl idf.py fullclean erfolgt.

screenshot 2025 11 04 223601<
Abb. 9.1 – fullclean

Wenn fullclean erfolgt ist, idf.py build eingeben und Enter drücken.

screenshot 2025 11 02 191628
Abb. 10 – build

Das Projekt wird jetzt gebaut. Dieser Vorgang kann bei neu angelegten Projekten im ersten Durchlauf durchaus ein paar Minuten dauern, je nach Größe.

screenshot 2025 11 02 191817
Abb. 11 – Projekt wird gebaut

War der Build-Vorgang erfolgreich, seht ihr folgendes:

screenshot 2025 11 02 192207
Abb. 12 – Projekt erfolgreich erstellt

Hier steht unter anderem, dass der Vorgang erfolgreich war mit dem Hinweis, dass ihr das Projekt jetzt flashen könnt.

 

Projekt flashen

Jetzt ist der Zeitpunkt gekommen, an dem wir das ESP32-Board an die USB-Buchse anschließen können. Zum Flashen ist es erforderlich den COM-Port zu kennen, an dem der ESP32 angeschlossen ist. Den COM-Port finden wir im Geräte-Manager, unter Anschlüsse. Wenn das Board angeschlossen und erkannt wurde, muss etwas mit CP210x stehen, da auf dem ESP32 Board ein CP2102-Chip für die Kommunikation verbaut ist.

In meinem Fall ist das ESP32 Modul an den COM5 Port angeschlossen.

screenshot 2025 11 03 184725
Abb. 13 – ESP32 an USB Port anschließen

Wenn das Projekt erfolgreich gebaut wurde, dann können wir, wie Abb. 12 zu sehen, in unser Projekt gehen und den Befehl idf.py -p com5 flash ausführen.

screenshot 2025 11 03 185726
Abb. 14 – Flashen

Wenn euer ESP32 Board z.B. an COM3 erkannt wurde, gebt ihr idf.py -p com3 flash ein. Dann mit Enter bestätigen und das Board wird geflasht.

Das Flashen kann man ganz gut am Blinken der kleinen roten LED auf dem Board erkennen.

unbenannt
Abb. 15 – Flash Vorgang

Jetzt sollte die LED langsam jede Sekunde blinken.

20251103 194842
Abb. 16 – Blinkende LED

Jetzt kann man die Werte im Beispielprojekt (Abb. 6 – blink_example_main.c) verändern, und statt den 500 ms in vTaskDelay, 100 ms eintragen, speichern, bauen und flashen. Wenn die LED jetzt viel schneller blinkt, wurde alles richtig gemacht.

 

LED richtig anschließen und Vorwiderstand richtig dimensionieren

Wie man die LED richtig anschließt, könnt ihr im folgenden Bild gut erkennen.

screenshot 2025 11 03 203245
Abb. 17 – Bild erstellt mit Fritzing — Teile lizenziert unter CC-BY-SA 3.0
https://fritzing.org

Der ESP32 hat, gemessen, eine Ausgangsspannung von ca. UO = 3,3 V. Eine rote LED hat eine Durchflusspannung von ca. UF = 2 V. Somit müssen am Widerstand R, UR = 1,3 V abfallen, bzw. in Wärme umgewandelt werden.

Weiße und blaue LEDs haben wesentlich höhere Durchflussspannungen, bei ca. UF = 3 V! Dann müssten wir einen wesentlich kleineren Widerstand wählen um die LEDs ausreichen hell leuchten zu lassen. Das kann zu viel zu hohen Ausgangsströmen an den Ausgangspinnen führen! Aus diesem Grund habe ich eine rote LED gewählt.

Das kurze Beinchen der LED ist meist die Kathode, also Minus. Schließt also das lange Beinchen an dem ESP32 Board am Pin 2 an.

Die IO-Pins des ESP32 können maximal 40 mA treiben. Für eine LED reichen ca. IF = 10 – 20 mA. Damit ich den ESP nicht unnötig belaste bin ich auf ca. IF = 5 mA runtergegangen.
Dafür reicht dann ein Vorwiderstand von Rvor = 220 Ohm. Die LED leuchtet mit IF = 5 mA ausreichend hell, wie man in Abb. 16 erkennen kann.

 

Weiterführende Links

Blog Artikel