Hallo zusammen,
ich arbeite gerade an einem kleinen Projekt mit einem Wemos D1 Mini.
Ich will über GET Requests ein paar Relais schalten. Diese müssen zwingend zeitverzögert geschaltet werden, und genau da beginnt das Problem. Sobald ich ein delay verwende, funktioniert der Webserver nicht mehr. Ich habe mich jetzt durch gefühlt 10 verschiedene Beispiel-Sketche gelesen und jeder dieser Sketche sieht komplett anders aus. Ich weiß nicht mehr, was nun mittlerweile der richtige Ansatz ist und was ich falsch mache ich blick überhaupt nicht mehr durch.
Hier mein Code:
#define FASTLED_ALLOW_INTERRUPTS 0
#include <ESP8266WiFi.h>
#include <ESPAsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include <FastLED.h>
const char* ssid = "*****";
const char* password = "*****";
IPAddress local_IP (192, 168, 2, 150);
IPAddress gateway (192, 168, 2, 1);
IPAddress subnet (255, 255, 255, 0);
AsyncWebServer server(80);
CRGB leds[2];
void setup() {
pinMode(D2, OUTPUT);
pinMode(D5, OUTPUT);
pinMode(D6, OUTPUT);
pinMode(D7, OUTPUT);
digitalWrite(D2, HIGH);
digitalWrite(D5, HIGH);
digitalWrite(D6, HIGH);
digitalWrite(D7, HIGH);
FastLED.addLeds<WS2812, D1, GRB>(leds, 2);
FastLED.setBrightness(255);
WiFi.mode(WIFI_STA);
WiFi.setSleepMode(WIFI_NONE_SLEEP);
WiFi.setAutoReconnect(true);
WiFi.persistent(true);
WiFi.config(local_IP, gateway, subnet);
WiFi.begin(ssid, password);
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(200, "text/plain", "I am root");
});
server.on("/A", HTTP_GET, [] (AsyncWebServerRequest *request) {
mode_A();
request->send(200, "text/plain", "OK");
});
server.on("/B", HTTP_GET, [] (AsyncWebServerRequest *request) {
mode_B();
request->send(200, "text/plain", "OK");
});
server.begin();
blank();
leds[0] = CRGB::Blue;
leds[1] = CRGB::Blue;
FastLED.show();
delay(1000);
blank();
}
void loop() {
delay(1);
}
void blank() {
leds[0] = CRGB::Black;
leds[1] = CRGB::Black;
FastLED.show();
}
void mode_A() {
digitalWrite(D2, HIGH);
digitalWrite(D5, HIGH);
digitalWrite(D6, HIGH);
digitalWrite(D7, HIGH);
delay(500);
digitalWrite(D2, LOW);
delay(100);
digitalWrite(D5, LOW);
delay(100);
digitalWrite(D6, LOW);
delay(100);
digitalWrite(D7, LOW);
blank();
leds[0] = CRGB::Blue;
leds[1] = CRGB::Black;
FastLED.show();
}
void mode_B() {
digitalWrite(D2, HIGH);
digitalWrite(D5, HIGH);
digitalWrite(D6, HIGH);
digitalWrite(D7, HIGH);
delay(500);
digitalWrite(D6, LOW);
delay(100);
digitalWrite(D7, LOW);
blank();
leds[0] = CRGB::Black;
leds[1] = CRGB::Blue;
FastLED.show();
}
Sobald ich die delay's rausnehme, funktioniert alles reibungslos.