Ошибка программного сброса 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() {
}
@Akshay Dusane, 👍0
1 ответ
Лучший ответ:
Виновником является библиотека 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)
должно решить проблему.
- Какие входные контакты я могу использовать на ESP8266 NodeMCU
- ESP8266 не может подключиться к брокеру MQTT
- Однонаправленная связь между NodeMCU и Arduino выплевывает мусор
- Wemos D1 не работает с MH-Z19B (датчик CO2)
- Отправьте несколько значений из Arduino Uno в nodeMCU, используя последовательный порт.
- NODEMCU 1.0 HX711 Тензодатчик читает странный текст
- Как защитить ссылку/URL-адрес формы ESP-12E для управления светодиодом
- Ультразвуковой датчик (HC-SR04), регистрирующий случайное расстояние
Большое спасибо. Это сработало. Действительно ценится. Но я столкнулся с еще большей проблемой после 10-12 «Ошибка инициализации Sim808». Я получаю успех, почему это так, почему он не инициализируется с первой попытки., @Akshay Dusane
Вероятно, ждет подключения к сети. Иногда это может занять до минуты., @Majenko
Спасибо за ответ. Нечего беспокоить. Возникла проблема с контактом между выводами Gnd обоих модулей., @Akshay Dusane