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