ESP32 Tutorial – Eine Einführung

Kategorien:
ESP32 ProjekteTutorial
Teile diesen Beitrag

In meinem ESP32 Tutorial erkläre ich dir die Grundlagen mit dem NodeMCU ESP32 – ähnlich wie schon in meinem NodeMCU ESP8266 Einführungstutorial. Dazu zeige ich dir, wie du mit der Arduino IDE den ESP32 programmieren kannst und stelle dir ein kleines Programm vor. In diesem simplen Programm werden die beiden Kerne des ESP32 genutzt, um zwei LED in unterschiedlichen Intervallen Blinken zu lassen.

Auf die Bluetooth-Fähigkeiten des ESP32 wird in einem eigenen Tutorial eingegangen.

Der ESP32 unterscheidet sich vom ESP8266 darin, dass er unter anderem zusätzlich Bluetooth und einen weiteren Prozessorkern besitzt. Alle Unterschiede und Gemeinsamkeiten habe ich bereits in meinem Artikel ESP32 vs ESP8266 erläutert.

Der NodeMCU ESP32.

Der NodeMCU ESP32.

Im Vergleich zum ESP8266 ist der ESP32 etwas teurer, jedoch immer noch sehr günstig.

Amazon Prime7,99 € 8,78 €
Stand: 26. September 2020 5:35 Uhr
Auf Amazon ansehen

ESP32: Arduino IDE vorbereiten

Damit du den ESP32 mit der Arduino IDE programmieren kannst, muss die Arduino IDE erst einmal vorbereitet werden. Falls du die Arduino IDE noch nicht installiert hast, kannst du sie hier herunterladen.

Wenn du die Arduino IDE gestartet hast, kannst du unter dem Menüpunkt „Datei“ die Voreinstellungen öffnen.

Als erstes öffnest du die Voreinstellungen.

Als erstes öffnest du die Voreinstellungen.

Hier muss nun die Boardverwalter-URL für den ESP32 eingetragen werden, damit du ihn mit der Arduino IDE programmieren kannst.

Hier muss der ESP32 hinzugefügt werden.

Hier muss der ESP32 hinzugefügt werden.

Bei „Zusätzliche Boardverwalter-URLs“ klickst du nun rechts auf den Button und trägst die folgende Adresse ein:

https://dl.espressif.com/dl/package_esp32_index.json
Für das ESP32 Tutorial muss hier die URL eingetragen werden.

Für das ESP32 Tutorial muss hier die URL eingetragen werden.

Füge die URL einfach in das Textfeld ein und klicke auf „Ok“.

Um den NodeMCU ESP32 nun endgültig hinzuzufügen, klickst du unter „Werkzeuge“ -> „Board“ auf Bordverwalter und suchst dort nach „ESP32“. Klicke bei „ESP32“ auf installieren.

Jetzt kann die Plattform des ESP32 installiert werden.

Jetzt kann die Plattform des ESP32 installiert werden.

Um den ESP32 programmieren zu können, muss das entsprechende Gerät in der Arduino IDE ausgewählt werden. Klicke dazu auf „Werkzeuge“ und gehe mit der Maus auf „Board“. Dort kannst du dann „ESP32 Dev Module“ auswählen.

Um den ESP32 programmieren zu können, muss er hier ausgewählt werden.

Um den ESP32 programmieren zu können, muss er hier ausgewählt werden.

ESP32 Tutorial: Die Schaltung

In dem Programm, das im nächsten Schritt erstellt wird, werden die beiden Prozessorkerne des ESP32 dazu genutzt, zwei LEDs in unterschiedlichen Intervallen blinken zu lassen. Das wäre zwar auch mit nur einem Prozessorkern möglich, jedoch möchte ich dir damit zeigen, wie du den zweiten Prozessorkern für eigene Programme nutzen kannst.

Im folgenden Bild siehst du den Schaltplan für das Tutorial. Zwei farbige LEDs werden an den ESP32 angeschlossen. Ich habe eine rote und eine grüne LED verwendet. Zwischen die Anoden der LEDs und den entsprechenden GPIO-Pin wird jeweils ein 100 Ohm-Widerstand geschaltet, damit die LEDs nicht beschädigt werden. Die LEDs vertragen die 3,3 Volt der GPIO-Pins nämlich nicht – daher die Widerstände.

Die grüne LED liegt bei mir an GPIO22 und die rote an GPIO21.

Für das ESP32 Tutorial werden zwei LEDs an das Board angeschlossen.

Für das ESP32 Tutorial werden zwei LEDs an das Board angeschlossen.

Ich habe die LEDs mit Jumper-Kabeln verlötet und die Widerstände mit Schrumpfschläuchen versteckt. Das ganze sieht bei mir so aus:

So sieht die Schaltung bei mir aus.

So sieht die Schaltung bei mir aus.

ESP32 Tutorial-Programm

Jetzt wird das Programm erstellt, um die beiden LEDs unterschiedlich blinken zu lassen. Füge dazu den folgenden Code in die Arduino IDE ein:

const int greenLedPin = 22;
const int redLedPin = 21;

TaskHandle_t blinkTask;

int counter = 0;

void setup() {
  pinMode(redLedPin, OUTPUT);
  pinMode(greenLedPin, OUTPUT);

  xTaskCreatePinnedToCore(blink, "blink", 500, NULL, 1, &blinkTask, 0);
}

void loop() {  
  digitalWrite(greenLedPin, HIGH);
  delay(1000);
  digitalWrite(greenLedPin, LOW);
  delay(1000);

  if(counter == 10){
    vTaskDelete(blinkTask);
  }

  counter++;
}

void blink(void* parameter){
  while(true){      
    digitalWrite(redLedPin, HIGH);
    delay(750);
    digitalWrite(redLedPin, LOW);
    delay(750);
  }
}

Zu beginn des Programms werden die GPIO-Pins für die LEDs gesetzt – GPIO22 für die grüne LED und GPIO21 für die rote. Außerdem wird ein Objekt für den Task deklariert. Mit diesem Objekt lässt sich der Task beispielsweise stoppen. Zusätzlich dazu wird eine Integer-Variable namens „counter“ mit dem Wert 0 initialisiert.

In der Setup-Funktion werden die Pin-Modi für die genannten GPIOs auf „OUTPUT“ gesetzt. Anschließend wird mit der Funktion „xTaskCreatePinnedToCore()“ ein zweiter Prozess erstellt. Als ersten Parameter erhält diese Funktion den Namen der Funktion, die der Prozess ausführen soll (in diesem Fall „blink“). Der zweite Parameter ist ein Name zum Debugging des Tasks. Ich nenne diesen Task einfach „blink“. Anschließend wird die Stack-Tiefe in Bytes angegeben. Hier habe ich den Wert 500 gewählt. Der nächste Parameter gibt die Parameter an, die an die auszuführende Methode übergeben werden sollen. In meinem Fall ist das „NULL“, da die Methode „blink()“ keine Parameter annimmt. Danach wird die Priorität des Tasks angegeben – in meinem Fall „1“. Damit der Task auch wieder gestoppt werden kann, wird nun ein Zeiger auf das Task-Objekt übergeben („&blinkTask“). Der letzte Parameter gibt an, auf welchem Kern der Task ausgeführt werden soll. Ich lasse den Task auf Kern 0 laufen. Das Hauptprogramm wird standardmäßig auf Kern 1 ausgeführt. Wenn hier der Wert „tskNO_AFFINITY“ angegeben wird, entscheidet der Scheduler des Systems, auf welchem CPU-Kern der Task ausgeführt wird.

In der Loop-Funktion wird die grüne LED eingeschaltet und nach einer Sekunde wieder ausgeschaltet. Danach wird eine Sekunde gewartet und danach geprüft, ob der Counter den Wert 10 hat. Falls ja, wird der Task zum Blinken der roten LED gestoppt. Danach wird der Counter inkrementiert.

Außerdem muss noch die Methode „blink()“ erstellt werden, mit der die rote LED zum blinken gebracht wird. Die Methode gibt nichts zurück und erhält keine Eingabeparameter. Innerhalb der Methode wird eine while-Schleife endlos durchlaufen. In der Schleife wird der GPIO-Pin der roten LED eingeschaltet, 750 Millisekunden gewartet und der GPIO-Pin wieder ausgeschaltet. Danach wird wieder 750 Millisekunden gewartet und dann die Schleife erneut durchlaufen.

Code auf den ESP32 flashen

Jetzt kannst du den ESP32 flashen. Dazu klickst du in der Arduino IDE in der Leiste oben auf den Pfeil nach rechts.

Klicke auf den Pfeil um den Flashvorgang zu starten.

Klicke auf den Pfeil um den Flashvorgang zu starten.

Der Flashvorgang sollte jetzt starten. Dabei wird der Code kompiliert und anschließend auf den ESP32 geschrieben.

Während dem Flashvorgang gibt die die Arduino IDE am unteren Rand einige Meldungen aus. Damit der ESP32 programmiert werden kann, musst du einen Knopf drücken, wenn die Arduino IDE die Meldung „Connecting…“ anzeigt, wie im folgenden Bild zu sehen.

Die Arduino IDE zeigt dir einige Meldungen an.

Wenn die Meldung „Connecting…“ angezeigt wird, musst du den Boot-Knopf auf deinem ESP32-Board gedrückt halten. Kurz darauf sollte der Flashvorgang erfolgreich abgeschlossen sein. Wo du den Boot-Knopf findest, sieht du in der Abbildung.

Der Boot-Knopf befindet sich neben dem microUSB-Anschluss.

Der Boot-Knopf befindet sich neben dem microUSB-Anschluss.

Jetzt sollten die LEDs am ESP32 in ungleichen Intervallen blinken und nach dem 10. Leuchten der grünen LED sollte die rote LED mit dem blinken aufhören.

Nachdem du dieses Tutorial abgeschlossen hast, solltest du wissen, wie man einen Prozess auf dem ESP32 startet, ihn auf einem Prozessorkern ausführt und den Prozess gegebenenfalls wieder beendet.

Teile diesen Beitrag
Vorheriger Beitrag
Raspberry Pi Alexa Steuerung
Nächster Beitrag
ESP8266 Deep Sleep Tutorial
Menü