In deze tutorial laten we u zien hoe u PWM-signalen kunt genereren met de ESP32 met behulp van Arduino IDE. Als voorbeeld bouwen we een eenvoudig circuit dat een LED dimt met behulp van de LED PWM controller van de ESP32. We laten u ook zien hoe u hetzelfde PWM-signaal op verschillende GPIO ‘ s tegelijkertijd kunt krijgen.
voordat u verder gaat met deze handleiding moet u de ESP32 add-on geïnstalleerd hebben in uw Arduino IDE., Volg een van de volgende tutorials om de ESP32 op de Arduino IDE te installeren, als je dat nog niet hebt gedaan.
- het ESP32-bord installeren in Arduino IDE (Windows-instructies)
- het ESP32-bord installeren in Arduino IDE (Mac-en Linux-instructies)
we raden ook aan om de volgende bronnen te bekijken:
- aan de slag met de ESP32 Dev-Module
- ESP32 Pinout referentie: welke GPIO-pinnen moet u gebruiken?
bekijk de Video Tutorial
Deze tutorial is beschikbaar in videoformaat (Bekijk hieronder) en in geschreven formaat (Lees verder).,
parts Required
om deze tutorial te volgen heb je deze parts nodig:
- ESP32 DOIT DEVKIT V1 Board – read best ESP32 development boards
- 3x 5mm LED
- 3x 330 Ohm weerstand
- Breadboard
- Jumper wires
u kunt de vorige links gebruiken of direct naar MakerAdvisor.com/tools om alle onderdelen voor uw projecten tegen de beste prijs te vinden!,
ESP32 LED PWM Controller
de ESP32 heeft een LED PWM controller met 16 onafhankelijke kanalen die kunnen worden geconfigureerd om PWM-signalen met verschillende eigenschappen te genereren.
Hier zijn de stappen die u moet volgen om een LED met PWM te dimmen met behulp van de Arduino IDE:
1. Eerst moet je een PWM-kanaal kiezen. Er zijn 16 kanalen van 0 tot 15.
2. Vervolgens moet u de PWM-signaalfrequentie instellen. Voor een LED is een frequentie van 5000 Hz prima te gebruiken.
3., Je moet ook de duty cycle resolutie van het signaal instellen: Je hebt resoluties van 1 tot 16 bits. We zullen 8-bit resolutie gebruiken, wat betekent dat je de LED helderheid kunt regelen met een waarde van 0 tot 255.
4. Vervolgens moet u aangeven op welke GPIO of GPIOs het signaal verschijnt. Hiervoor gebruik je de volgende functie:
ledcAttachPin(GPIO, channel)
Deze functie accepteert twee argumenten. De eerste is de GPIO die de output van het signaal, en de tweede is het kanaal dat het signaal zal genereren.
5., Tot slot, om de LED helderheid te regelen met PWM, gebruik je de volgende functie:
ledcWrite(channel, dutycycle)
Deze functie accepteert als argumenten het kanaal dat het PWM signaal genereert, en de duty cycle.
dimmen van een LED
laten we een eenvoudig voorbeeld bekijken om te zien hoe de ESP32 LED PWM controller te gebruiken met behulp van de Arduino IDE.
schema
draad een LED naar uw ESP32 zoals in het volgende schema. De LED moet worden aangesloten op GPIO 16.,
(Dit schema gebruikt de ESP32 DEVKIT v1 module versie met 30 GPIO ‘ s – als u een ander model gebruikt, controleer dan de pinout voor het board dat u gebruikt.)
Opmerking: U kunt elke pin gebruiken die u wilt, zolang het als uitvoer kan dienen. Alle spelden die als output kunnen dienst doen kunnen als PWM spelden worden gebruikt. Voor meer informatie over de ESP32 GPIOs, lees: ESP32 Pinout referentie: welke GPIO pins moet u gebruiken?
Code
Open uw Arduino IDE en kopieer de volgende code.,
bekijk ruwe code
u begint met het definiëren van de pin waaraan de LED is gekoppeld. In dit geval is de LED bevestigd aan GPIO 16.
const int ledPin = 16; // 16 corresponds to GPIO16
vervolgens stelt u de PWM-signaaleigenschappen in. U definieert een frequentie van 5000 Hz, kiest kanaal 0 om het signaal te genereren en stelt een resolutie van 8 bits in. U kunt andere eigenschappen kiezen, anders dan deze, om verschillende PWM-signalen te genereren.,
const int freq = 5000; const int ledChannel = 0; const int resolution = 8;
In de setup () moet u LED PWM configureren met de eigenschappen die u eerder hebt gedefinieerd met behulp van de ledcsetup() functie die accepteert als argumenten, het ledkanaal, de frequentie en de resolutie, als volgt:
ledcSetup(ledChannel, freq, resolution);
volgende moet u de GPIO kiezen die u het signaal krijgt van. Voor dat gebruik maken van de ledcattachpin () functie die accepteert als argumenten de GPIO waar u wilt het signaal te krijgen, en het kanaal dat is het genereren van het signaal. In dit voorbeeld, we krijgen het signaal in de ledPin GPIO, dat overeenkomt met GPIO 16., Het kanaal dat het signaal genereert is het ledkanaal, dat overeenkomt met kanaal 0.
ledcAttachPin(ledPin, ledChannel);
in de lus zult u de duty cycle variëren tussen 0 en 255 om de LED helderheid te verhogen.
en dan tussen 255 en 0 om de helderheid te verminderen.
om de helderheid van de LED in te stellen, hoeft u alleen maar de ledcWrite() functie te gebruiken die het kanaal dat het signaal genereert en de duty cycle als argumenten accepteert.
ledcWrite(ledChannel, dutyCycle);
omdat we 8-bits resolutie gebruiken, zal de duty cycle worden bestuurd met een waarde van 0 tot 255., Merk op dat we in de ledcWrite() functie het kanaal gebruiken dat het signaal genereert, en niet de GPIO.
test het voorbeeld
Upload de code naar uw ESP32. Zorg ervoor dat je de juiste board en COM poort hebt geselecteerd. Kijk naar je circuit. U moet een dimmer LED hebben die de helderheid verhoogt en verlaagt.
hetzelfde signaal ontvangen op verschillende GPIO ‘s
u kunt hetzelfde signaal krijgen van hetzelfde kanaal in verschillende GPIO’ s., Om dat te bereiken, hoef je alleen maar die GPIO ‘ s te koppelen aan hetzelfde kanaal op de setup().
laten we het vorige voorbeeld aanpassen om 3 LEDs te dimmen met hetzelfde PWM signaal van hetzelfde kanaal.
schema
voeg nog twee LEDs toe aan uw circuit door het volgende schema te volgen:
(Dit schema gebruikt de ESP32 DEVKIT v1 module versie met 30 GPIOs – als je een ander model gebruikt, controleer dan de pinout voor het board dat je gebruikt.,)
Code
kopieer de volgende code naar uw Arduino IDE.
bekijk ruwe code
Dit is dezelfde code als de vorige, maar met enkele wijzigingen. We hebben gedefinieerd twee variabelen voor twee nieuwe LED ‘ s, die verwijzen naar GPIO 17 en GPIO 5.
const int ledPin2 = 17; // 17 corresponds to GPIO17 const int ledPin3 = 5; // 5 corresponds to GPIO5
vervolgens hebben we in de setup () de volgende regels toegevoegd om beide GPIO ‘ s toe te wijzen aan kanaal 0. Dit betekent dat we hetzelfde signaal krijgen, dat wordt gegenereerd op Kanaal 0, op beide GPIO ‘ s.
ledcAttachPin(ledPin2, ledChannel); ledcAttachPin(ledPin3, ledChannel);
het project testen
Upload de nieuwe schets naar uw ESP32., Zorg ervoor dat je de juiste board en COM poort hebt geselecteerd. Kijk nu eens naar je circuit:
alle GPIO ‘ s voeren hetzelfde PWM-signaal uit. Dus, alle drie de LED ‘ s verhogen en verlagen de helderheid tegelijkertijd, wat resulteert in een gesynchroniseerd effect.
Wrapping
samengevat, in dit bericht heb je geleerd hoe je de LED PWM controller van de ESP32 met de Arduino IDE kunt gebruiken om een LED te dimmen., De aangeleerde Concepten kunnen worden gebruikt om andere uitgangen met PWM te controleren door de juiste eigenschappen op het signaal in te stellen.
we hebben andere tutorials gerelateerd aan ESP32 die u misschien ook leuk vindt:
- ESP32 webserver – Arduino IDE
- ESP32 Data Logging Temperature to MicroSD Card
- ESP32 webserver with BME280 – Mini Weerstation
- ESP32 vs ESP8266 – voors en tegens
Dit is een uittreksel uit onze cursus: leer ESP32 met Arduino id. Als je van ESP32 houdt en je wilt meer leren, raden wij je aan om je in te schrijven voor de cursus ESP32 met Arduino IDE.