ESP8266 — веб-сервер не работает в цикле
У меня есть простой пример, где в цикле вызывается веб-сервер для обработки клиентов, а также для рисования текста на дисплее. Дело в том, что веб-сервер не отвечает, но когда я удаляю вторую часть цикла - рисование текста для отображения, веб-сервер начинает работать нормально.
Сервер не отвечает:
void loop() {
server.handleClient();
unsigned long timeNow = millis();
if ((timeNow > screenChangeTime)) {
display.clear();
display.setFont(ArialMT_Plain_16);
display.setTextAlignment(TEXT_ALIGN_CENTER);
display.drawString(12, 20,"Loaded: "+String(particles));
screenChangeTime= timeNow + delay;
display.display();
}
}
Сервер отвечает:
void loop() {
server.handleClient();
}
@Ľubomír, 👍0
Обсуждение1 ответ
Я предполагаю, что вы тратите слишком много времени на рисование.
Какое значение имеет delay
? Я предполагаю, что вы выбрали слишком низкое число здесь. И вы действительно должны установить это новое время после обновления отображения с помощью display.display();
.
Ваш веб-сервер не отвечает, потому что он недостаточно часто вызывается внутри этого кода.
Цель оператора if — не рисовать каждый раз, это также не блокирующая функция., @Tvde1
- Несколько клиентских серверов через Wi-Fi
- Как получить параметры запроса от ESPAsyncWebServer?
- контент» не захватывается
- Как разрешить междоменные запросы на ESP8266 WebServer
- Почему мы используем client.flush() в коде, когда мы подключаем Esp8266 к Интернету или серверу?
- Создание веб-сервера на Wemos D1 mini pro
- Управление реле 5В с помощью Wemos D1 R1
- ESP8266 отправляет веб-страницу клиенту, но html-коды отображаются в браузере вместо веб-страницы
возможно, сторожевой таймер срабатывает из-за того, что цикл() занимает слишком много времени., @Juraj
Ваш способ обработки миллисекунд неверен; на рулоне счетчика миллис у вас будут проблемы. Лучше использовать обычный способ (
if ((millis() - предыдущее время) >= screenChangeTime) { предыдущее время += screenChangeTime; ... }
), @frarugi87@ frarugi87, хотя это может быть проблемой в долгосрочной перспективе (примерно через 49 дней и 17 часов после включения питания), вряд ли это будет проблемой здесь., @Phil Haigh
@Phil, если переменная
screenChangeTime
не являетсяunsigned long
(даже если я сомневаюсь, что это не так), проблемы возникают гораздо раньше. В любом случае, я знаю, что это не проблема, и на самом деле это был комментарий, а не ответ., @frarugi87Я видел такую проблему на устройствах с поддержкой Arduino, таких как Adafruit Trinket, когда не хватает памяти. Я понимаю, что вы используете чип ESP8266, но все же проверьте, есть ли у вас ограничения памяти., @barrypicker