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