Esp8266 Programme de ruban led interrompu à cause du serveur web

Bonjour,
J'ai actuellement un problème avec mon esp8266.
Au départ, j'ai simplement essayé de faire une petite animation avec ma bande LED et la librairie FastLED, j'ai ensuite décidé de créer un serveur web pour contrôler tout avec simplement 2 types de requêtes:

  • /LEDOn
  • /LEDOff
    Seulement, au moment de mettre les deux codes ensemble, il y a un petit soucis bizarre, le programme se connecte au Wifi, puis la bande LED clignote normalement 5 fois mais après... seulement la 1ere LED de la bande se met à clignoter
    Si je met en commentaire le code du serveur, tout marche parfaitement.
    Il n'y a rien dans le port série indiquant une requête
    Voici le code:
#include <FastLED.h>
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#define LED_PIN 0
#define NUM_LEDS 60

CRGB leds[NUM_LEDS];

const char* ssid = "SSID";
const char* password = "PASSWORD";

String header;

ESP8266WebServer server(80);

bool ledState = true;

// Current time
unsigned long currentTime = millis();
// Previous time
unsigned long previousTime = 0; 
// Define timeout time in milliseconds (example: 2000ms = 2s)
const long timeoutTime = 2000;

void setup() {
  FastLED.addLeds<WS2812, LED_PIN, RGB>(leds, NUM_LEDS);
  FastLED.setBrightness(32);
  FastLED.clear();
  FastLED.show();
  
  Serial.begin(115200);
  WiFi.begin(ssid, password); //begin WiFi connection

  // 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());
  server.on("/LEDOn", [](){
    server.send(200, "text/html", "OK Led on");
    ledState = true;
    delay(1000);
  });
  server.on("/LEDOff", [](){
    server.send(200, "text/html", "Ok Led off");
    ledState = false;
    delay(1000); 
  });
  
  Serial.println("Web server started!");

  
}

void loop() {  
  server.stop();
  FastLED.clear();
  for(int led; led<NUM_LEDS; led++) {
    delay(10);
    leds[led] = CRGB(0, 255, 0);
  }
  FastLED.show();
  delay(1000);
  FastLED.clear();
  for(int led; led<NUM_LEDS; led++) {
    delay(10);
    leds[led] = CRGB(255, 0, 0);
  }
  FastLED.show();
  delay(1000);
  server.begin();
  server.handleClient();
}

Merci d'avance

Bonjour

L'ESP8266 est présent sur quelle carte ?

Comment est faite l'alimentation de l'ensemble ? (rubans de LED et WiFi , ça fait deux gros consommateurs de courant....)

L'ESP8266 est présent sur quelle carte ?

C'est un esp8266 NodeMCU, c'est lui même le microcontrolleur

Comment est faite l'alimentation de l'ensemble ? (rubans de LED et WiFi , ça fait deux gros consommateurs de courant....)

Le ruban LED est alimenté par un USB 5V seulement pour lui, et l'esp8266 NodeMCU avec un second USB

Merci de votre réponse

Quelqu'un aurait une solution ?

Tu devrais mettre des affichages sur le port série aussi dans le corps principal de ton programme.
Pourquoi la bande LED clignote 5 fois, je ne vois pas de code correspondant?

Les GND sont reliés ?

Tu mets : server.stop(); dans la loop, donc ton serveur est désactivé juste après son lancement. Il faut mettre server.handleClient();
De plus, tu mets à jour la variable ledState dans tes fonctions mais elle n'est pas utilisée dans ton code. Enfin, pas besoin de delay dans ces fonctions. Et surtout, éviter les delay dans la loop, qui doit surveiller le serveur à tout moment.

Je pense que ta loop doit ressembler à ça :

void loop() {
  server.handleClient();
  if (ledState) fill_solid(leds, NUM_LEDS, CRGB(0, 255, 0));
  else FastLED.clear();
  FastLED.show();
}

Ce n'est pas la même chose que ton code, mais ça te donne un exemple.

pourquoi est-ce que tu stoppes puis démarre le serveur à chaque passage dans le loop() ?
tu cherches des ennuis ?

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.