Im Juni (2024) wurde die Version 3 der Board-Software des ESP32 für die Arduino IDE freigegeben. Diese enthält ein paar wichtige Änderungen für die auf dieser Webseite vorgestellten Projekte, da insbesondere die PWM Erzeugung nicht abwärtskompatible Änderungen beinhaltet.
Nach und nach werde ich die hier vorgestellten Projekte und Tutorials auf die Version 3 anpassen.
Welche Version habe ich?
Mit einem Klick links auf das Platinen-Symbol in der Arduino IDE öffnet sich der Board-Manager. Danach oben in die Suchleiste „ESP32“ eingeben. Erscheinen sollte ein Eintrag von Espressif Systems mit einer Versionsangabe. (Falls nicht, ist möglicherweise noch gar kein Software Paket für den ESP32 installiert. In diesem Fall bitte diesen Beitrag lesen Teil 1: „Hello world“ – das ESP32 how-to )
Änderungen der PWM Erzeugung (LEDC)
Der ESP32 nutzt ein Peripherie-Modul namens LEDC (da ursprünglich zur Ansteuerung/Dimmung von LEDs gedacht) zur Erzeugung der PWM Signale. Mehr dazu unter Teil 2: PWM und MOSFET für eine einfache Motorsteuerung. Die Logik, wie GPIO-Pins des Controllers zu den LEDC Channels zugeordnet werden, hat sich mit Version 3 grundlegend geändert.
In Version 2.xx wurde zunächst per ledcSetup() ein LEDC-Channel mit einer bestimmten Frequenz und Auflösung vorbereitet. Mittels ledcAttachPin() wurden dann ein oder meherere Pins diesem Channel zugeordnet.
In Version 3 sind beide Befehle nun als ledcAttach() zusammengeführt: Als Argumente werden Pin, Frequenz und Auflösung übergeben. Ein LEDC Channel wird im Hintergrund automatisch ausgewählt.
// VERSION 2
const int enPin = 27;
const int freq = 19531;
const int ledChannel = 0;
const int resolution = 8;
void setup() {
// Start Serial
Serial.begin(115200);
ledcSetup(0, freq, resolution);
ledcAttachPin(enPin, 0);
ledcWrite(enPin, 150);
}
void loop() {
//empty
}
// Version 3
const int enPin = 27;
const int freq = 19531;
const int resolution = 8;
void setup() {
// Start Serial
Serial.begin(115200);
ledcAttach(enPin, freq, resolution);
ledcWrite(enPin, 150);
}
void loop() {
//empty
}
In Version 3 kann nun auch anstelle von ledcWrite() der Befehl analogWrite() – wie bei klassischen Arduino-Boards – genutzt werden.
Alle Änderungen in der Original-Übersicht
Für weitere Änderungen, die über das auf dieser Webseite benötigte hinausgehen, empfehle ich den Migrations-Leitfaden von Espressif: https://docs.espressif.com/projects/arduino-esp32/en/latest/migration_guides/2.x_to_3.0.html