ESP8266 Проблема // wdt reset load 0x4010f000, len 1392, room 16
- Войдите на сайт для отправки комментариев
Пнд, 22/06/2020 - 17:56
Добрый день !
имею ESP-01s работает с данным скетчем уже месяца 2 без проблем. начал собирать второе устройство но пришло к сожалению ESP-01 и на нем постоянно падает подключение вылетает вот такая ошибка:
wdt reset
load 0x4010f000, len 1392, room 16
tail 0
chksum 0xd0
csum 0xd0
v3d128e5c
~ld
Вот скетч:
#include <ESP8266WiFi.h> #include <PubSubClient.h> const char *ssid = "****"; //название сети const char *password = "****"; //пароль сети const char *mqtt_server = "****"; //адрес mqtt брокера WiFiClient espClient; //инициализация вифи PubSubClient client(espClient); //инициализация mqtt клиента #define LEDPIN 2 //устанавливаем пин с лед лентой int need_val; int old_val; // функция получения топиков от брокера void callback(char* topic, byte* payload, unsigned int length) { Serial.println(); Serial.print(topic); // выводим в сериал порт название топика Serial.print(" => "); for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); } // выводим в сериал порт значение полученных данных String strTopic = String(topic); //получаем название топика if (strTopic == "ESP02/led") //проверяем из нужного ли топика пришли данные { payload[length] = 0; //чистим от мусора, длинна строки String strPayload = String((char*)payload); //считываем значение топика need_val = map(strPayload.toInt(), 0, 100, 1023, 0); //приводим значение 0-100 в значение 1000-0 if (need_val>old_val) { for(int i=old_val; i<=need_val; i++) //то плавно включаем свет { analogWrite(LEDPIN, i); delay(10); //каждые 10мс увелияение на 1 } } else { for(int i=old_val; i>=need_val; i++) //то плавно включаем свет { analogWrite(LEDPIN, i); delay(10); //каждые 10мс увелияение на 1 } } old_val=need_val; //analogWrite(LEDPIN, stled); //устанавливаем уровень шим сигнала Serial.print(" => "); Serial.print(need_val); // для отладки } } void setup() { pinMode(LEDPIN, OUTPUT); //устанвливаем ка выход Serial.begin(115200); } void loop() { if (WiFi.status() != WL_CONNECTED) //если нет подключения к вифи { WiFi.begin(ssid, password); //конектимся if (WiFi.waitForConnectResult() != WL_CONNECTED) return; //если не получилось то повторяем } if (WiFi.status() == WL_CONNECTED) //если подключились { if (!client.connected()) //если нет mqtt { // то подключаемся к mqtt client.setServer(mqtt_server, 1883); client.setCallback(callback); client.connect("ESP02led"); //id клиента(должно быть уникальным в сети) client.subscribe("ESP02/led"); //подписываемся на топик } if (client.connected()) { // если подключились client.loop(); // то запускаем цикл получения топиков))) } } }
Строки 73-75, очередность удивляет - сначала вызываем функцию получения топиков от брокера, а потом connect и cubscribe
я и прошу помощи, единственное что вычитал что тут нельзя использовать delay, когда комментирую 35 и 41 строчку вроде бы начинает работать но все равно периодически wdt reset срабатывает ну и не работает плавное изменения значения....
А касаемо очередности немного не понял как вы имеете ввиду написать нужно.
я и прошу помощи, единственное что вычитал что тут нельзя использовать delay, когда комментирую 35 и 41 строчку вроде бы начинает работать но все равно периодически wdt reset срабатывает ну и не работает плавное изменения значения....
дело не в том, что нельзя использовать delay (хотя это верно) - не надо вообще всю программу запихивать в колбек сервера, как это сделано у вас. Получили топик, считали значение, запомнили - и закрывайте процедуру. А обработку значения уже делайте в основной программе
Получается из колбек с 16 -40 строчку во внешнюю обработку убрать так получается ?
Все ж пример смотреть надо для PubSubClient.h. Там по другому. Посмотрите этот пример - https://github.com/knolleary/pubsubclient/blob/master/examples/mqtt_esp8266/mqtt_esp8266.ino
здесь все как вам надо, только изменение значения делайте в лупе.
К сожалению моих познаний не хватает запилить в луп. текущий скетч писал исходя из ролика на ютубе... а вот именно сделать так что бы в лупе устанавливался уровень сигнала на пине не получилось (