ESP8266 Проблема // wdt reset load 0x4010f000, len 1392, room 16

sergei_a88@bk.ru
Offline
Зарегистрирован: 22.09.2019

Добрый день !

имею 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();            // то запускаем цикл получения топиков)))
    }
  }
}

 

 

Maka
Offline
Зарегистрирован: 24.10.2015

Строки 73-75, очередность удивляет - сначала вызываем функцию получения топиков от брокера, а потом connect и cubscribe

sergei_a88@bk.ru
Offline
Зарегистрирован: 22.09.2019

я и прошу помощи, единственное что вычитал что тут нельзя использовать delay, когда комментирую 35 и 41 строчку вроде бы начинает работать но все равно периодически wdt reset срабатывает ну и не работает плавное изменения значения....

 

А касаемо очередности немного не понял как вы имеете ввиду написать нужно.

b707
Онлайн
Зарегистрирован: 26.05.2017

sergei_a88@bk.ru пишет:

я и прошу помощи, единственное что вычитал что тут нельзя использовать delay, когда комментирую 35 и 41 строчку вроде бы начинает работать но все равно периодически wdt reset срабатывает ну и не работает плавное изменения значения....

дело  не в том, что нельзя использовать delay (хотя это верно) - не надо вообще всю программу запихивать в колбек сервера, как это сделано у вас. Получили топик, считали значение, запомнили - и закрывайте процедуру. А обработку значения уже делайте в основной программе

sergei_a88@bk.ru
Offline
Зарегистрирован: 22.09.2019

Получается из колбек  с 16 -40 строчку во внешнюю обработку убрать так получается ? 

Maka
Offline
Зарегистрирован: 24.10.2015

Все ж пример смотреть надо для PubSubClient.h. Там по другому. Посмотрите этот пример - https://github.com/knolleary/pubsubclient/blob/master/examples/mqtt_esp8266/mqtt_esp8266.ino

здесь все как вам надо, только изменение значения делайте в лупе. 

sergei_a88@bk.ru
Offline
Зарегистрирован: 22.09.2019

К сожалению моих познаний не хватает запилить в луп. текущий скетч писал исходя из ролика на ютубе... а вот именно сделать так что бы в лупе устанавливался уровень сигнала на пине не получилось (