Время от времени ESP8266 зависает... Похоже, виноват WifiClient
Этот код работает отлично, без зависаний:
#include <ESP8266WiFi.h>
#include <Servo.h>
#include <WiFiClient.h>
#include <ESP8266WiFiMulti.h>
Servo turn;
ESP8266WiFiMulti wifiMulti;
const char* host = "192.168.1.148";
WiFiClient client;
int turnPos = 90;
unsigned long ts = 0;
void setup() {
startWiFi();
turn.attach(14);
turn.write(90);
}
void loop() {
if (millis() - ts > 500 && millis() - ts < 1000) {
turnPos = 160;
}
else if (millis() - ts >= 1000) {
ts = millis();
}
else {
turnPos = 20;
}
/*if (client.connected()) {
}
else {
if (!client.connect(host, 3000)) {
}
}*/
turn.write(turnPos);
yield();
}
void startWiFi() {
wifiMulti.addAP("DVW3201BE8", "###"); // password is filled in on mny version
while (wifiMulti.run() != WL_CONNECTED) { // Wait for the Wi-Fi to connect: scan for Wi-Fi networks, and connect to the strongest of the networks above
delay(250);
Serial.print('.');
}
}
В то время как этот код (с закомментированным битом wificlient) время от времени зависает:
#include <ESP8266WiFi.h>
#include <Servo.h>
#include <WiFiClient.h>
#include <ESP8266WiFiMulti.h>
Servo turn;
ESP8266WiFiMulti wifiMulti;
const char* host = "192.168.1.148";
WiFiClient client;
int turnPos = 90;
unsigned long ts = 0;
void setup() {
startWiFi();
turn.attach(14);
turn.write(90);
}
void loop() {
if (millis() - ts > 500 && millis() - ts < 1000) {
turnPos = 160;
}
else if (millis() - ts >= 1000) {
ts = millis();
}
else {
turnPos = 20;
}
if (client.connected()) {
}
else {
if (!client.connect(host, 3000)) {
}
}
turn.write(turnPos);
yield();
}
void startWiFi() {
wifiMulti.addAP("DVW3201BE8", "###"); // password is filled in on mny version
while (wifiMulti.run() != WL_CONNECTED) { // Wait for the Wi-Fi to connect: scan for Wi-Fi networks, and connect to the strongest of the networks above
delay(250);
Serial.print('.');
}
}
Единственное отличие в том, что в рабочем коде закомментирован кусок кода WifiClient. Как WifiClient может вызывать эту проблему?
@Murey Tasroc, 👍0
Обсуждение1 ответ
Лучший ответ:
▲ 2
Это ошибка, и она была исправлена в пакете ядра Arduino esp8266 версии 2.4.2, опубликованном 2 дня назад.
см. первую строку в разделе ESP8266WiFi списка изменений
2.4.2 ESP8266WiFi: Исправлена утечка памяти при повторном использовании объекта WiFiClient (#4497, #4516, #4549)
,
@Juraj
Смотрите также:
- Обнаружение ESP8266 в сети
- Безопасный HTTPS-запрос не выполняется в 90 % случаев.
- ESP8266 — Как получить многоадресный пакет UDP?
- Невозможно установить связь между модулем ESP-12E и мобильным устройством через маршрутизатор ESP-12E.
- ESP8266 Одноранговая сеть с AP и STA — кэширование клиентов AP, очистка их запросов?
- Веб-сервер Arduino и ESP8266.
- Мобильная точка доступа с wemos d1 mini
- Wi-Fi-подключения теряются при сбросе подключения
весело с esp8266. попробуйте новый основной пакет 2.4.2, @Juraj
Я вижу, что вы используете
String
ужасным образом. Если судить по этому фрагменту, вы, вероятно, делаете то же самое в другом месте и делаете из своей кучи швейцарский сыр., @MajenkoПроблема по-прежнему возникает без бита String — я отредактировал свой вопрос, включив в него весь свой код., @Murey Tasroc
да, и это исправлено в последней версии ядра arduino esp8266, @Juraj
Вы уверены? Как я могу проверить версию? Потому что я думаю, что у меня самая последняя версия., @Murey Tasroc