Веб-клиент FastLED, щелчок на странице для включения и выключения для ws2812
Веб-клиент FastLED, при нажатии на который все элементы RGB отображаются красным цветом. Выключен, все RGB выключено/черно. но не работать. Вот полный код, я не знаю, почему он всегда зацикливается, а веб-клиент зависает, когда я нажимаю кнопку на веб-странице
Я не могу включить все светодиоды или выключить все светодиоды.
#include <ESP8266WiFi.h>
#include <FastLED.h>
#define DATA_PIN 5
#define NUM_LEDS 300
CRGB leds[NUM_LEDS];
#define COLOR_ORDER GRB
#define BRIGHTNESS 254
#define FRAMES_PER_SECOND 30
// Введите имя вашей сети Wi-Fi и пароль Wi-Fi
const char* ssid = "";
const char* password = "";
// Установить номер порта веб-сервера на 80
WiFiServer server(80);
// Переменная для хранения HTTP-запроса
String header;
// Эти переменные хранят текущее состояние выхода светодиода
String outputRedState = "off";
// Назначаем выходные переменные контактам GPIO
const int redLED = 5;
// Текущее время
unsigned long currentTime = millis();
// Прошлый раз
unsigned long previousTime = 0;
// Определить время ожидания в миллисекундах (пример: 2000 мс = 2 с)
const long timeoutTime = 2000;
void setup() {
Serial.begin(115200);
//FastLED.addLeds<WS2812, DATA_PIN, GRB>(leds, NUM_LEDS);
LEDS.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS); // 初始化光带
FastLED.setBrightness(BRIGHTNESS); // Устанавливаем яркость световой полосы
set_max_power_in_volts_and_milliamps(5, 2000); //Управление питанием световой полосы (установить световую полосу 5 вольт, 500 мА)
// Подключаемся к сети Wi-Fi с SSID и паролем
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
// Выводим локальный IP-адрес и запускаем веб-сервер
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
server.begin();
}
void loop() {
WiFiClient client = server.available(); // Слушаем входящих клиентов
if (client) { // Если подключается новый клиент,
Serial.println("New Client."); // вывести сообщение в последовательный порт
String currentLine = ""; // создаем строку для хранения входящих данных от клиента
currentTime = millis();
previousTime = currentTime;
while (client.connected() && currentTime - previousTime <= timeoutTime) { // цикл, пока клиент подключен
currentTime = millis();
if (client.available()) { // если есть байты для чтения от клиента,
char c = client.read(); // прочитать байт, затем
Serial.write(c); // вывести его на серийный монитор
header += c;
if (c == '\n') { // если байт является символом новой строки
// если текущая строка пуста, вы получили два символа новой строки подряд.
// это конец клиентского HTTP-запроса, поэтому отправьте ответ:
if (currentLine.length() == 0) {
// Заголовки HTTP всегда начинаются с кода ответа (например, HTTP/1.1 200 OK)
// и тип контента, чтобы клиент знал, что придет, затем пустая строка:
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println("Connection: close");
client.println();
// включает и выключает GPIO
if (header.indexOf("GET /2/on") >= 0) {
Serial.println("RED LED is on");
outputRedState = "on";
fill_solid(leds, 300, CRGB::Red);
FastLED.show();
} else if (header.indexOf("GET /2/off") >= 0) {
Serial.println("RED LED is off");
outputRedState = "off";
fill_solid(leds, 300, 0);
FastLED.show();
}
// Отображение веб-страницы в формате HTML
client.println("<!DOCTYPE html><html>");
client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
client.println("<link rel=\"icon\" href=\"data:,\">");
// CSS для оформления кнопок включения/выключения
client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");
client.println(".buttonRed { background-color: #ff0000; border: none; color: white; padding: 16px 40px; border-radius: 60%;");
client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}");
client.println(".buttonOff { background-color: #77878A; border: none; color: white; padding: 16px 40px; border-radius: 70%;");
client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}</style></head>");
// Заголовок веб-страницы
client.println("<body><h1>My LED Control Server</h1>");
// Отображение текущего состояния и кнопки ВКЛ/ВЫКЛ для GPIO 2 Красный светодиод
client.println("<p>Red LED is " + outputRedState + "</p>");
// Если outputRedState выключен, отображается кнопка OFF
if (outputRedState == "off") {
client.println("<p><a href=\"/2/on\"><button class=\"button buttonOff\">OFF</button></a></p>");
} else {
client.println("<p><a href=\"/2/off\"><button class=\"button buttonRed\">ON</button></a></p>");
}
client.println("</body></html>");
// Ответ HTTP заканчивается еще одной пустой строкой
client.println();
// Выход из цикла while
break;
} else { // если вы получили новую строку, то очищаем currentLine
currentLine = "";
}
} else if (c != '\r') { // если вы получили что-то еще, кроме символа возврата каретки,
currentLine += c; // добавляем его в конец currentLine
}
}
}
// Очистить переменную заголовка
header = "";
// Закрыть соединение
client.stop();
Serial.println("Client disconnected.");
Serial.println("");
}
}
@user2470155, 👍1
Обсуждение0
Смотрите также:
- WS2812B работает только пока измеряю напряжение
- WS2812B только белые на нестандартной плате
- Arduino для запуска и светодиодная лента длиной до 100 м
- Улучшенное циклическое переключение цветов RGB.
- Библиотека FastLED: Как настроить яркость одного пикселя в абсолютном масштабе?
- Управление цифровой адресной светодиодной лентой RGB 12 В с помощью Arduino
- Управлять несколькими полосками WS2812B с разным количеством светодиодов.
- Как управлять встроенными светодиодами Arduino Nano 33 BLE Sense?
но не работает
... что это значит?, @jsotolaвсе RGB в красном цвете
... какой цвет должен быть?, @jsotolaпожалуйста, очистите свой код ... он не имеет правильного отступа, что делает ошибки очень трудными для выявления ... сделайте себе одолжение и избавьте себя от боли, научившись правильно форматировать свой код, @jsotola
посмотрите код на https://arduinoprosto.ru/q/91113/improve-sd-logger-0-02-of-data-isnt-logged-at-desired-rate.... вот что правильно отформатированный код выглядит так, @jsotola
Что я хочу сделать, так это получить доступ к веб-ссылке, http://xxxx/2/on, включить светодиодную ленту из 300 NUM_LED, а затем, если нажать кнопку выключения, вся светодиодная лента выключится. Но я столкнулся с тем, что устройство застряло, когда я нажал, иногда светодиоды не все включаются, и сеть, кажется, не отвечает, затем подождите несколько секунд, попробуйте снова нажать, иногда светодиод может гореть полностью. Но выключенный светодиод совершенно не работает., @user2470155
люди не будут тратить время на просмотр вашего кода, когда он представлен неформатированным... его должно быть легко читать здесь, на этой странице... людям не нужно копировать ваш код и вставлять его в редактор, форматировать его, а затем прочитай это, @jsotola
это может помочь... https://www.martyncurrey.com/esp8266-and-the-arduino-ide-part-6-javascript-and-ajax.... посмотрите на последний скетч в
AJAX With Acknowledgement
................... вот еще https://startingelectronics.org/tutorials/arduino/ethernet-shield-web-server-tutorial/web-server-read- переключение-использование-AJAX/, @jsotolaпросто переформатировать. Благодарю. Извините за мою ошибку, @user2470155
Я ожидаю, что все 300 светодиодов включаются, когда я нажимаю кнопку, но иногда горит только светодиод [0], затем мне нужно обновить «xxxx/2/on» несколько раз, а затем, наконец, горят все светодиоды., @user2470155