#include <ESP8266WiFi.h>
#include <ESPAsyncTCP.h>
#include <ESPAsyncWebServer.h>
// WiFi Zugangsdaten
const char* ssid = "Ihr SSID";
const char* password = "Ihr Passwort";
// Pin-Definitionen
const int IN1_PIN = D1;
const int IN2_PIN = D2;
const int IN3_PIN = D3;
const int IN4_PIN = D4;
// Schrittmotor-Parameter
const int stepsPerRevolution = 2048; // Schritte pro Umdrehung
const int stepsPerDegree = stepsPerRevolution / 360; // Schritte pro Grad
int currentPosition = 0; // aktuelle Position des Schrittmotors
int openPosition = 90; // Position, bei der die Klappe geöffnet ist
int closePosition = 0; // Position, bei der die Klappe geschlossen ist
// Erstelle den Webserver
AsyncWebServer server(80);
void setup() {
// Serielle Ausgabe starten
Serial.begin(9600);
// WiFi-Verbindung herstellen
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Verbindung wird hergestellt...");
}
Serial.println("WiFi-Verbindung hergestellt.");
// Schrittmotor-Pins als Ausgang definieren
pinMode(IN1_PIN, OUTPUT);
pinMode(IN2_PIN, OUTPUT);
pinMode(IN3_PIN, OUTPUT);
pinMode(IN4_PIN, OUTPUT);
// Webseite definieren
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
String html = "<html><head><title>Hühnerklappe</title></head><body>";
html += "<h1>Hühnerklappe</h1>";
html += "<p>Aktuelle Position: " + String(currentPosition) + " Grad</p>";
html += "<form method='post' action='/setposition'>";
html += "<input type='text' name='position' placeholder='Position in Grad'>";
html += "<input type='submit' value='Position setzen'>";
html += "</form>";
html += "<form method='post' action='/open'>";
html += "<input type='submit' value='Klappe öffnen'>";
html += "</form>";
html += "<form method='post' action='/close'>";
html += "<input type='submit' value='Klappe schließen'>";
html += "</form>";
html += "</body></html>";
request->send(200, "text/html", html);
});
// Aktionen definieren
server.on("/setposition", HTTP_POST, [](AsyncWebServerRequest *request){
String positionStr = request->getParam("position")->value();
int position = positionStr.toInt();
int stepsToMove = abs(position - currentPosition) * stepsPerDegree;
if (position > currentPosition) {
moveClockwise(stepsToMove);
} else {
moveCounterclockwise(stepsToMove);
}
currentPosition = position;
request->redirect("/");
});
server.on("/open", HTTP_POST, [](AsyncWebServerRequest *request){
int stepsToMove = abs(openPosition - currentPosition) * stepsPerDegree;
moveClockwise(stepsToMove);
currentPosition = openPosition;
request->redirect("/");
});
server.on("/close", HTTP_POST, [](AsyncWebServerRequest *request){
int stepsToMove = abs(closePosition - currentPosition) * stepsPerDegree;
moveCounterclockwise(stepsToMove);
currentPosition = closePosition;
request->redirect("/");
});
// Webserver starten
server.begin();
}
void loop() {
// Nichts zu tun
}
void moveClockwise(int steps) {
for (int i = 0; i < steps; i++) {
digitalWrite(IN1_PIN, HIGH);
digitalWrite(IN2_PIN, LOW);
digitalWrite(IN3_PIN, LOW);
digitalWrite(IN4_PIN, LOW);
delayMicroseconds(500);
digitalWrite(IN1_PIN, LOW);
digitalWrite(IN2_PIN, HIGH);
digitalWrite(IN3_PIN, LOW);
digitalWrite(IN4_PIN, LOW);
delayMicroseconds(500);
digitalWrite(IN1_PIN, LOW);
digitalWrite(IN2_PIN, LOW);
digitalWrite(IN3_PIN, HIGH);
digitalWrite(IN4_PIN, LOW);
delayMicroseconds(500);
digitalWrite(IN1_PIN, LOW);
digitalWrite(IN2_PIN, LOW);
digitalWrite(IN3_PIN, LOW);
digitalWrite(IN4_PIN, HIGH);
delayMicroseconds(500);
}
}
void moveCounterclockwise(int steps) {
for (int i = 0; i < steps; i++) {
digitalWrite(IN1_PIN, LOW);
digitalWrite(IN2_PIN, LOW);
digitalWrite(IN3_PIN, LOW);
digitalWrite(IN4_PIN, HIGH);
delayMicroseconds(500);
digitalWrite(IN1_PIN, LOW);
digitalWrite(IN2_PIN, LOW);
digitalWrite(IN3_PIN, HIGH);
digitalWrite(IN4_PIN, LOW);
delayMicroseconds(500);
digitalWrite(IN1_PIN, LOW);
digitalWrite(IN2_PIN, HIGH);
digitalWrite(IN3_PIN, LOW);
digitalWrite(IN4_PIN, LOW);
delayMicroseconds(500);
digitalWrite(IN1_PIN, HIGH);
digitalWrite(IN2_PIN, LOW);
digitalWrite(IN3_PIN, LOW);
digitalWrite(IN4_PIN, LOW);
delayMicroseconds(500);
}
}
hier nochmal der komplette code