ESP12 serveur web problème temps de chargement

Le problème exposé dans ce sujet a été résolu.

Bonjour

Je commence par le code :

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
//ajout neopixel
    #include <Adafruit_NeoPixel.h>
    #include "header.h"
    #include "footer.h"
    #define PIN            D3
    #define NUMPIXELS      106
    Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
    bool oldState = HIGH;
    int showType = 0;
    int brithness = 25;
    int arc_ciel = 0;
    
//ajout neopixel FIN
const char* ssid = "";
const char* password = "";

ESP8266WebServer server(80);

const int led = 13;


void handleRoot() {
  
  String msg = HEADER_page;
  msg += brithness;
  msg += "\" ><input type=\"submit\"></form><h2>Couleur uni</h2><a href=\"?r=255&g=255&b=255\" class=\"img\" id=\"blanc\"></a><a href=\"?r=0&g=0&b=0\" class=\"img\" id=\"black\"></a><a href=\"?r=255&g=0&b=0\" class=\"img\" id=\"rouge\"></a><br><a href=\"?r=255&g=255&b=0\" class=\"img\" id=\"jaune\"></a><a href=\"?r=255&g=100&b=0\" class=\"img\" id=\"orange\"></a><a href=\"?r=255&g=0&b=255\" class=\"img\" id=\"violet\"></a><br><a href=\"?r=0&g=255&b=0\" class=\"img\" id=\"vert\"></a><a href=\"?r=0&g=0&b=255\" class=\"img\" id=\"bleu_royal\"></a><a href=\"?r=0&g=191&b=255\" class=\"img\" id=\"bleu_ciel\"></a><h2>Sénarios</h2><ul><li><a href=\"?fondu=1\">Couleurs fondu</a></li><li><a href=\"?ciel=1\">Arc-en-ciel</a></li><li><a href=\"?fr=1\">France</a></li><li><a href=\"?disco=1\">Disco !</a></li></ul></body></html>";
  server.send(200, "text/html", msg);
}

void handleNotFound() {
  digitalWrite(led, 1);
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET) ? "GET" : "POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";
  for (uint8_t i = 0; i < server.args(); i++) {
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }
  server.send(404, "text/plain", message);
  digitalWrite(led, 0);
}

void setup(void) {
  pixels.begin();
  pixels.setBrightness(brithness);
  pixels.show();
  pinMode(led, OUTPUT);
  digitalWrite(led, 0);
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  if (MDNS.begin("esp8266")) {
    Serial.println("MDNS responder started");
  }

  

  server.on("/", []() {
   
    if(server.argName(0) == "r" && server.argName(1) == "g" && server.argName(2) == "b"){
          int r = server.arg("r").toInt();
          int g = server.arg("g").toInt();
          int b = server.arg("b").toInt();
        
          for(int i=0;i<NUMPIXELS;i++){
              pixels.setPixelColor(i, pixels.Color( r,g,b ));
              pixels.show();
           }
      }
      if(server.argName(0) == "puissance")
      {
        brithness = server.arg("puissance").toInt();
        pixels.setBrightness(brithness);
        pixels.show();
      }
      if(server.argName(0) == "ciel")
      {
        rainbowCycle(100);
      }
      if(server.argName(0) == "fondu")
      {
        arc_ciel = 1;
      }
      handleRoot();
  });

  server.onNotFound(handleNotFound);

  server.begin();
  Serial.println("HTTP server started");
  
}

void loop(void) {
  server.handleClient();
  if(arc_ciel == 1) rainbow(20);
}
void rainbow(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256; j++) {
    for(i=0; i<pixels.numPixels(); i++) {
      pixels.setPixelColor(i, Wheel((i+j) & 255));
    }
    pixels.show();
    delay(wait);
  }
}
void rainbowCycle(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
    for(i=0; i< pixels.numPixels(); i++) {
      pixels.setPixelColor(i, Wheel(((i * 256 / pixels.numPixels()) + j) & 255));
    }
    pixels.show();
    delay(wait);
  }
}
uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if(WheelPos < 85) {
    return pixels.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  if(WheelPos < 170) {
    WheelPos -= 85;
    return pixels.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  WheelPos -= 170;
  return pixels.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

Je connais assez mal ce langage c’est donc une compilation de divers code des exemples de l’IDE arduino.

Le but est de commander via une page web une ruban led.

Pas de problème avec un changement de couleur simple.

Mais si j’utilise une fonction qui boucle ou prend un "delay" alors le serveur attend la fin du script et bloc le chargement de la page web.

Comme avec rainbow par exemple.

Comment envoyer une commande et exécuter de celle-ci sans bloqué le serveur ?

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte