Bemerkung

Hallo, willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Vertiefen Sie sich mit anderen Enthusiasten in die Welt von Raspberry Pi, Arduino und ESP32.

Warum beitreten?

  • Expertenunterstützung: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.

  • Lernen & Teilen: Tauschen Sie Tipps und Tutorials aus, um Ihre Fähigkeiten zu verbessern.

  • Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.

  • Sonderangebote: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.

  • Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.

👉 Bereit, mit uns zu erkunden und zu kreieren? Klicken Sie auf [here] und treten Sie heute bei!

2.2 Analoge Ausgabe über PWM

Im vorherigen Projekt haben wir die LED durch Ein- und Ausschalten mithilfe eines digitalen Ausgangs gesteuert. In diesem Projekt werden wir einen Atemeffekt auf der LED erzeugen, indem wir die Pulsweitenmodulation (PWM) verwenden. PWM ist eine Technik, die es uns ermöglicht, die Helligkeit einer LED oder die Geschwindigkeit eines Motors zu steuern, indem wir das Tastverhältnis eines Rechtecksignals variieren.

Mit PWM werden wir anstelle des einfachen Ein- und Ausschaltens der LED die Zeit, in der die LED an ist, gegenüber der Zeit, in der sie aus ist, innerhalb jedes Zyklus anpassen. Durch schnelles Ein- und Ausschalten der LED in variierenden Intervallen können wir die Illusion erzeugen, dass die LED allmählich heller und dunkler wird, was einen Atemeffekt simuliert.

Durch die Nutzung der PWM-Funktionen des ESP32 WROOM 32E können wir eine reibungslose und präzise Steuerung der LED-Helligkeit erreichen. Dieser Atemeffekt fügt Ihren Projekten ein dynamisches und visuell ansprechendes Element hinzu und schafft ein auffälliges Display oder Ambiente.

Verfügbare Pins

Hier ist eine Liste der verfügbaren Pins auf dem ESP32-Board für dieses Projekt.

Verfügbare Pins

IO13, IO12, IO14, IO27, IO26, IO25, IO33, IO32, IO15, IO2, IO0, IO4, IO5, IO18, IO19, IO21, IO22, IO23

Benötigte Komponenten

In diesem Projekt benötigen wir die folgenden Komponenten.

KOMPONENTEN-BESCHREIBUNG

KAUFLINK

ESP32 WROOM 32E

BUY

ESP32 Kamera-Erweiterung

-

Breadboard

BUY

Mehrere Verbindungskabel

BUY

Widerstand

BUY

LED

BUY

Schaltplan

../_images/circuit_2.1_led.png

Dieses Projekt verwendet denselben Schaltkreis wie das erste Projekt 2.1 Digitaler Ausgang, aber der Signaltyp ist unterschiedlich. Im ersten Projekt wird ein digitales High- und Low-Signal (0&1) direkt von Pin 26 ausgegeben, um die LED ein- oder auszuschalten. In diesem Projekt wird ein PWM-Signal von Pin 26 ausgegeben, um die Helligkeit der LED zu steuern.

Verdrahtung

../_images/2.1_hello_led_bb.png

Code

  1. Laden Sie diesen Code herunter oder kopieren Sie ihn direkt in die Arduino IDE.

Nachdem der Code erfolgreich hochgeladen wurde, können Sie sehen, wie die LED atmet.

Wie es funktioniert

  1. Konstanten und Variablen definieren.

    const int ledPin = 26; // Der GPIO-Pin für die LED
    int brightness = 0;
    int fadeAmount = 5;
    
    • ledPin: Die GPIO-Pin-Nummer, an der die LED angeschlossen ist (in diesem Fall GPIO 26).

    • brightness: Der aktuelle Helligkeitsgrad der LED (initial auf 0 gesetzt).

    • fadeAmount: Der Betrag, um den sich die Helligkeit der LED bei jedem Schritt ändert (auf 5 gesetzt).

  2. Konfigurieren des LED-Pins.

    void setup() {
        ledcSetup(ledPin, 5000, 8); // Konfigurieren des PWM-Kanals (0) mit 5000Hz Frequenz und 8-Bit-Auflösung
    }
    

    Hier verwenden wir das LEDC (LED Control)-Peripheriegerät, das hauptsächlich zur Steuerung der Helligkeit von LEDs entwickelt wurde, aber auch zur Erzeugung von PWM-Signalen für andere Zwecke verwendet werden kann.

    • bool ledcAttach(uint8_t pin, uint32_t freq, uint8_t resolution_bits);: Diese Funktion wird verwendet, um die LEDC-Pins-Frequenz und -Auflösung einzustellen. Sie gibt die Frequenz zurück, die für den LEDC-Pins konfiguriert wurde. Wenn 0 zurückgegeben wird, ist ein Fehler aufgetreten und der LEDC-Pins wurde nicht konfiguriert.

      • pin: Wählt den GPIO-Pin aus.

      • freq: Wählt die PWM-Frequenz aus.

      • resolution_bits: Wählt die Auflösung für den LEDC-Pins aus. Der Bereich liegt zwischen 1-14 Bit (1-20 Bit für ESP32).

  3. Die Funktion loop() enthält die Hauptlogik des Programms und läuft kontinuierlich. Sie aktualisiert die Helligkeit der LED, invertiert die Fade-Menge, wenn die Helligkeit den Mindest- oder Höchstwert erreicht, und fügt eine Verzögerung ein.

    void loop() {
        ledcWrite(ledPin, brightness); // Schreiben des neuen Helligkeitswerts auf den PWM-Pins
        brightness = brightness + fadeAmount;
    
        if (brightness <= 0 || brightness >= 255) {
            fadeAmount = -fadeAmount;
        }
    
        delay(50); // Warten für 20 Millisekunden
        }
    
    • void ledcWrite(uint8_t pin, uint32_t duty);: Diese Funktion wird verwendet, um die Duty-Cycle für den LEDC-Pins einzustellen.

      • pin: Wählt den LEDC-Pins für die Duty-Cycle-Einstellung aus.

      • duty: Wählt die Duty-Cycle aus, die für den ausgewählten Pins eingestellt werden soll.