Wemos D1 mini зависает через несколько минут
Я использую мини-плату Wemos D1 для управления светодиодной лентой RGB и запрограммировал простой код с помощью Arduino IDE. Wemos подключается к моему Интернету просто отлично, и с помощью IP-адреса я могу изменить значения RGB полосы. Все работает, но через несколько минут плата зависает, и ничего не работает. После сброса он снова работает.
Я также подключил простую схему к плате только для того, чтобы управлять RGB-светодиодной лентой с несколькими транзисторами, ничего такого, что могло бы вызвать проблему, а также если я ничего не подключаю к плате, возникает проблема.
Я также протестировал пример из библиотеки Wemos, но там та же проблема. Вот мой код, который я использовал (И извините, если код не так хорошо запрограммирован, я новичок ;)):
#include <ESP8266WiFi.h>
const char* ssid = "my SSID";
const char* pass = "my password";
void setup() {
pinMode(D1, OUTPUT);
pinMode(D2, OUTPUT);
pinMode(D5, OUTPUT);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) delay(500);
Serial.begin(9600);
//Serial.println(WiFi.localIP());
server.begin();
}
void setColor(String rgb)
{
String rgb_val = rgb.substring(4, rgb.lastIndexOf('H'));
String red_val = rgb_val.substring(1,rgb_val.indexOf(':'));
String green_val = rgb_val.substring(rgb_val.indexOf(':') + 1,rgb_val.indexOf(':',rgb_val.indexOf(':') + 1));
String blue_val = rgb_val.substring(rgb_val.lastIndexOf(':') + 1);
int redval = red_val.toInt();
int greenval = green_val.toInt();
int blueval = blue_val.toInt();
analogWrite(D5, redval);
analogWrite(D2, greenval);
analogWrite(D1, blueval);
redval = redval >= 1023 ? 1023 : redval <= 0 ? 0 : redval;
if (redval == 0)
analogWrite(D5, 0);
greenval = greenval >= 1023 ? 1023 : greenval <= 0 ? 0 : greenval;
if (greenval == 0)
analogWrite(D1, 0);
blueval = blueval >= 1023 ? 1023 : blueval <= 0 ? 0 : blueval;
if (blueval == 0)
analogWrite(D2, 0);
return;
}
void loop() {
//delay(50) //just a test if there are not so many updates
WiFiClient client = server.available();
if (!client) return;
while (!client.available()) delay(1);
String request = client.readStringUntil('\r');
client.flush();
//Serial.print(request);
setColor(request);
client.stop();
client.print("HTTP/1.1 200 OK\r\n");
client.flush();
return;
}
Есть ли кто-нибудь, кто знает, что я сделал не так?
@rlcmtzc, 👍-1
Обсуждение1 ответ
Я сомневаюсь, что в этом проблема, но этот код выглядит неправильно.
int redval = red_val.toInt();
analogWrite(D5, redval);
redval = redval >= 1023 ? 1023 : redval <= 0 ? 0 : redval;
if (redval == 0)
analogWrite(D5, 0);
Я думаю, что это должно быть больше похоже на это:
int redval = red_val.toInt();
if (redval > 1023) // Если это>1023, вам нужно установить его на 1023.
redval= 1023;
else if (redval < 0)
redval = 0;
analogWrite(D5, redval);
Встроенный оператор if слишком уродлив и на самом деле ничего не добавляет.
Честно говоря, я бы посмотрел на то, чтобы включить этот код в функции, чтобы его было легче читать, и я подозреваю, что вы обнаружите проблему.
Когда эти микропроцессоры через некоторое время останавливаются, это обычно память, тепло или электричество. Если вы проверили электрику и она довольно быстро остановилась, вероятно, это утечка памяти. Таким образом, рефакторинг вашего кода может помочь людям легче определить проблему.
Возможно, вы захотите заменить вызов setColour()
вызовом Serial.println()
и посмотреть, устранит ли это проблему. Если это не так, то ваша проблема в том, как вы звоните клиенту.
Хорошо, я просто отредактировал код, как вы сказали, а также заменил функцию вызова на Serial.println (), но проблема снова возникла через несколько секунд, @rlcmtzc
- esp8266 WiFi не может подключиться к PHP- серверу
- Как разрешить междоменные запросы на ESP8266 WebServer
- Почему мы используем client.flush() в коде, когда мы подключаем Esp8266 к Интернету или серверу?
- Управление реле 5В с помощью Wemos D1 R1
- Создать один сервер в режиме точки доступа, а другой - в режиме станции.
- Веб-сервер ESP8266 недоступен через 2 минуты после сброса
- Веб-сервер ESP8266 отображает только текст, даже если тип контента — текст/HTML.
- Веб-сервер ESP8266 не отвечает
Вы уверены, что это фактический код, который вы используете? Он не компилируется, потому что вы вызываете server.begin (), но не объявили сервер., @jose can u c
Сначала вы останавливаете клиента, а затем продолжаете писать ему. Я понятия не имею, как именно реализован клиент, но вы можете себе представить, как это может привести к проблемам с памятью., @tttapa