ESP32: Servo über HTTP-JSON-API / Webbrowser steuerbar
Dieser Sketch für PlatformIO ermöglicht es, den ESP32 als Servo-Controller (Servo an Pin D25) zu verwenden, der sich mit WLAN verbindet und über eine einfache HTTP-API gesteuert werden kann. Der Webserver ist mit ESPAsyncWebserver implementiert. Siehe auch ESP32: JSON-Webserver-Minimalbeispiel für PlatformIO (ESPAsyncWebserver) falls man mit dieser Bibliothek nicht vertraut ist. Dieses Beispiel ist keine fertige Anwendung, sondern ein minimaler Ausgangspunkt zum Aufbau einer eigenen Anwendung.
main.cpp
#include <Arduino.h>
#include <Arduino.h>
#include <WiFi.h>
#include <ESP32Servo.h>
#include <ESPAsyncWebServer.h>
#include <ArduinoJson.h>
AsyncWebServer server(80);
/**
* Auf WiFi-Verbindung warten, und falls nicht verbunden, neu starten
*/
void waitForWiFiConnectOrReboot(bool printOnSerial=true) {
uint32_t notConnectedCounter = 0;
while (WiFi.status() != WL_CONNECTED) {
delay(100);
if(printOnSerial) {
Serial.println("Wifi connecting...");
}
notConnectedCounter++;
if(notConnectedCounter > 50) { // Board zurücksetzen, wenn nach 5s nicht verbunden
if(printOnSerial) {
Serial.println("Resetting due to Wifi not connecting...");
}
ESP.restart();
}
}
if(printOnSerial) {
// WiFi-IP-Adresse ausgeben
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
}
Servo servo;
void setup() {
ESP32PWM::allocateTimer(0);
ESP32PWM::allocateTimer(1);
ESP32PWM::allocateTimer(2);
ESP32PWM::allocateTimer(3);
Serial.begin(115200);
WiFi.config(INADDR_NONE, INADDR_NONE, INADDR_NONE);
WiFi.setHostname("ESP-Servo");
WiFi.begin("MyWifiSSID", "MyWifiPassword");
waitForWiFiConnectOrReboot();
// Servo an Pin 25 anschließen
servo.attach(25, 1000, 2000);
// HTTP-Routen konfigurieren
server.on("/api/set-servo", HTTP_GET, [](AsyncWebServerRequest *request) {
float value = request->arg("value").toFloat();
servo.write(value);
// {status: "ok"} senden
AsyncResponseStream *response = request->beginResponseStream("application/json");
DynamicJsonDocument json(1024);
json["status"] = "ok";
serializeJson(json, *response);
request->send(response);
});
// Webserver starten
server.begin();
}
void loop() {
}platformio.ini
[env:nodemcu-32s]
platform = espressif32
board = nodemcu-32s
framework = arduino
monitor_speed = 115200
lib_deps =
ESP Async [email protected]
[email protected]
ESP32ServoVerwendung
WLAN-Zugangsdaten in der Zeile eintragen
WiFi.begin("MyWifiSSID", "MyWifiPassword");und die Firmware hochladen. Nun http://[IP-Adresse des ESP32]/api/set-servo?value=0.0 öffnen. Beachten, dass in der aktuellen Version der Firmware nicht value=10 verwendet werden kann, sondern value=10.0 verwendet werden muss.