Ошибка программного сброса wdt на NodeMCU (ESP8266)

Я получаю сообщение об ошибке при сбросе программного WDT последовательного монитора. Я также расшифровал код ошибки и нашел следующую трассировку стека.

Я использую модуль SIM808 и DFRobot_sim808 в качестве библиотеки.

0x4010030d: миллисекунды в AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0\cores\esp8266/core_esp8266_wiring.c, строка 180

0x401003b9: __digitalWrite в AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0\cores\esp8266/core_esp8266_wiring_digital.c строка 82

0x40202863: sim808_wait_for_resp(char const*, DataType, unsigned int, unsigned int) в Documents\Arduino\libraries\DFRobot_SIM808- master/sim808.cpp, строка 172

0x402027a4: sim808_send_byte(unsigned char) в Documents\Arduino\libraries\DFRobot_SIM808-master/sim808.cpp, строка 118

0x402028ce: sim808_check_with_cmd(char const*, char const*, DataType, unsigned int, unsigned int) в Documents\Arduino\libraries\DFRobot_SIM808-master/sim808.cpp, строка 191

0x402025dc: DFRobot_SIM808::init() в Documents\Arduino\libraries\DFRobot_SIM808-master/DFRobot_sim808.cpp, строка 63

0x402024c1: установка в G:\Development\ESP8266\SIM Module\sim_module/sim_module.ino, строка 41 (дискриминатор 1)

0x40203248: loop_wrapper() в AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0\cores\esp8266/core_esp8266_main.cpp, строка 122

0x40100e8d: cont_wrapper в AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0\cores\esp8266/cont.S, строка 81

Я пытался найти решение для одного и того же везде, но никто не нашел его. Но тот же код, который я пробую на Arduino, работает, но не для ESP8266. У меня нет длительного цикла ожидания(). Но все равно выдает ошибку.

Ниже приведен код того же самого

#include <DFRobot_sim808.h>
#include <SoftwareSerial.h>

#define PHONE_NUMBER "********"  

#define MESSAGE  "hello,world"

#define PIN_TX D1 
#define PIN_RX D0

SoftwareSerial mySerial(PIN_RX, PIN_TX);
DFRobot_SIM808 sim808(&mySerial);//подключить RX,TX,PWR,

void setup() {
  delay(1000);
  mySerial.begin(9600);
  Serial.begin(9600);

  while (!Serial) {
    ; // ждем подключения последовательного порта. Нужен для родного USB
  }
  while(!sim808.init()) {
      delay(1000);
      Serial.print("Sim808 init error\r\n");
  } 
  Serial.println("Sim808 init success");
  Serial.println("Start to send message ...");

  sim808.sendSMS(PHONE_NUMBER,MESSAGE);
}

void loop() {

}

, 👍0


1 ответ


Лучший ответ:

0

Виновником является библиотека SIM808. Он не предназначен для работы с ESP8266.

Проблема заключается в этой функции:

boolean sim808_wait_for_resp(const char* resp, DataType type, unsigned int timeout, unsigned int chartimeout)
{
    int len = strlen(resp);
    int sum = 0;
    unsigned long timerStart, prevChar;    //prevChar — это время, когда был прочитан предыдущий Char.
    timerStart = millis();
    prevChar = 0;
    while(1) {
        if(sim808_check_readable()) {
            char c = serialSIM808->read();
            prevChar = millis();
            sum = (c==resp[sum]) ? sum+1 : 0;
            if(sum == len)break;
        }
        if ((unsigned long) (millis() - timerStart) > timeout * 1000UL) {
            return false;
        }
        //Если межсимвольный тайм-аут => вернуть ЛОЖЬ. Таким образом, мы можем вернуться раньше из этой функции.
        if (((unsigned long) (millis() - prevChar) > chartimeout) && (prevChar != 0)) {
            return false;
        }

    }
    //Если это CMD, мы закончим чтение буфера.
    if(type == CMD) sim808_flush_serial();
    return true;
}

У него есть цикл, выполнение которого может занять некоторое время, и он не выполняет yield() в какой-либо момент, чтобы разрешить выполнение служебных процедур ESP8266 и "пинать собаку".

Добавление вызова yield() внутрь цикла while(1) должно решить проблему.

,

Большое спасибо. Это сработало. Действительно ценится. Но я столкнулся с еще большей проблемой после 10-12 «Ошибка инициализации Sim808». Я получаю успех, почему это так, почему он не инициализируется с первой попытки., @Akshay Dusane

Вероятно, ждет подключения к сети. Иногда это может занять до минуты., @Majenko

Спасибо за ответ. Нечего беспокоить. Возникла проблема с контактом между выводами Gnd обоих модулей., @Akshay Dusane