ESP32 Voorbeelden

Eenvoudige voorbeeldprojecten om mee te starten

1. LED laten knipperen (Blink)

Het "Hello World" van embedded development. Laat de ingebouwde LED op GPIO 2 knipperen.

#include <Arduino.h>

#define LED_GPIO 2   // Ingebouwde LED op de meeste ESP32-borden

void setup() {
    pinMode(LED_GPIO, OUTPUT);
    Serial.begin(115200);
}

void loop() {
    digitalWrite(LED_GPIO, HIGH);
    Serial.println("LED aan");
    delay(500);

    digitalWrite(LED_GPIO, LOW);
    Serial.println("LED uit");
    delay(500);
}

2. WiFi verbinden

Verbind met een WiFi-netwerk en toon het IP-adres in de seriële monitor.

#include <WiFi.h>

const char* ssid     = "JouwWiFiNaam";
const char* password = "JouwWachtwoord";

void setup() {
    Serial.begin(115200);

    WiFi.begin(ssid, password);
    Serial.print("Verbinden met WiFi");

    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }

    Serial.println("\nVerbonden!");
    Serial.print("IP-adres: ");
    Serial.println(WiFi.localIP());
}

void loop() {
    // Blijf verbonden
}

3. Eenvoudige webserver

Draai een webserver op de ESP32 en bedien een LED via een browser.

#include <WiFi.h>
#include <WebServer.h>

const char* ssid     = "JouwWiFiNaam";
const char* password = "JouwWachtwoord";

WebServer server(80);

void handleRoot() {
    String html = R"rawliteral(
<!DOCTYPE html>
<html>
<head>
    <title>ESP32 LED</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        body { font-family: sans-serif; text-align: center; padding: 2rem; }
        button { font-size: 1.5rem; padding: 1rem 2rem; margin: 0.5rem;
                 border: none; border-radius: 8px; cursor: pointer; }
        .aan  { background: #4CAF50; color: white; }
        .uit  { background: #f44336; color: white; }
    </style>
</head>
<body>
    <h1>ESP32 LED Bediening</h1>
    <a href="/aan"><button class="aan">LED AAN</button></a>
    <a href="/uit"><button class="uit">LED UIT</button></a>
</body>
</html>
)rawliteral";
    server.send(200, "text/html", html);
}

void handleAan() {
    digitalWrite(2, HIGH);
    server.sendHeader("Location", "/");
    server.send(303);
}

void handleUit() {
    digitalWrite(2, LOW);
    server.sendHeader("Location", "/");
    server.send(303);
}

void setup() {
    Serial.begin(115200);
    pinMode(2, OUTPUT);

    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }
    Serial.println("\nVerbonden: " + WiFi.localIP().toString());

    server.on("/", handleRoot);
    server.on("/aan", handleAan);
    server.on("/uit", handleUit);
    server.begin();
}

void loop() {
    server.handleClient();
}

4. DHT22 temperatuur & luchtvochtigheid

Lees een DHT22-sensor uit en toon de waarden in de seriële monitor.

#include <DHT.h>

#define DHTPIN 4        // GPIO 4
#define DHTTYPE DHT22

DHT dht(DHTPIN, DHTTYPE);

void setup() {
    Serial.begin(115200);
    dht.begin();
}

void loop() {
    delay(2000);

    float temp = dht.readTemperature();
    float hum  = dht.readHumidity();

    if (isnan(temp) || isnan(hum)) {
        Serial.println("Fout bij lezen sensor");
        return;
    }

    Serial.print("Temperatuur: ");
    Serial.print(temp);
    Serial.print(" °C | Luchtvochtigheid: ");
    Serial.print(hum);
    Serial.println(" %");
}

5. MQTT — Publiceer sensorwaarden

Verbind met een MQTT-broker en publiceer periodiek sensorwaarden.

#include <WiFi.h>
#include <PubSubClient.h>

const char* ssid      = "JouwWiFiNaam";
const char* password  = "JouwWachtwoord";
const char* mqttServer = "192.168.1.100";
const int   mqttPort  = 1883;

WiFiClient espClient;
PubSubClient client(espClient);

void setup() {
    Serial.begin(115200);

    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }
    Serial.println("\nWiFi verbonden");

    client.setServer(mqttServer, mqttPort);
    while (!client.connected()) {
        if (client.connect("ESP32Client")) {
            Serial.println("MQTT verbonden");
        } else {
            delay(2000);
        }
    }
}

void loop() {
    client.loop();

    int waarde = random(0, 100);
    client.publish("sensor/temperatuur", String(waarde).c_str());
    Serial.print("Gepubliceerd: ");
    Serial.println(waarde);

    delay(5000);
}

6. GPIO input (drukknop)

Lees een drukknop op GPIO 0 (BOOT-knop op de meeste DevKits) en toon de status.

#include <Arduino.h>

#define KNOP_GPIO 0    // BOOT-knop (pull-up)
#define LED_GPIO  2

void setup() {
    Serial.begin(115200);
    pinMode(KNOP_GPIO, INPUT_PULLUP);
    pinMode(LED_GPIO, OUTPUT);
}

void loop() {
    int status = digitalRead(KNOP_GPIO);

    if (status == LOW) {   // Knop ingedrukt (pull-up = LOW)
        Serial.println("Knop ingedrukt!");
        digitalWrite(LED_GPIO, HIGH);
    } else {
        digitalWrite(LED_GPIO, LOW);
    }

    delay(50);
}

7. PWM — LED dimmen (LEDC)

Gebruik PWM om een LED te dimmen via de LEDC-periferie van de ESP32.

#include <Arduino.h>

#define LED_GPIO 2
#define LEDC_CH  0
#define LEDC_RES 8       // 8-bit resolutie (0-255)
#define LEDC_FREQ 5000   // 5 kHz

void setup() {
    ledcSetup(LEDC_CH, LEDC_FREQ, LEDC_RES);
    ledcAttachPin(LED_GPIO, LEDC_CH);
}

void loop() {
    // Van donker naar fel
    for (int duty = 0; duty <= 255; duty++) {
        ledcWrite(LEDC_CH, duty);
        delay(10);
    }
    // Van fel naar donker
    for (int duty = 255; duty >= 0; duty--) {
        ledcWrite(LEDC_CH, duty);
        delay(10);
    }
}

8. Diepe slaap (Deep Sleep)

Zet de ESP32 in deep sleep om batterij te sparen. Wordt na X seconden weer wakker.

#include <Arduino.h>

#define TIME_TO_SLEEP 10   // 10 seconden

void setup() {
    Serial.begin(115200);
    delay(1000);

    Serial.println("Wakker! Doe metingen...");
    delay(2000);

    Serial.print("Ga in deep sleep voor ");
    Serial.print(TIME_TO_SLEEP);
    Serial.println(" seconden");

    esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * 1000000ULL);
    esp_deep_sleep_start();
}

void loop() {
    // Komt nooit hier
}

platformio.ini voor deze voorbeelden

Gebruik dit configuratiebestand om alle voorbeelden te builden:

[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
lib_deps =
    adafruit/DHT sensor library
    knolleary/PubSubClient