I am getting error on Serial monitor Soft WDT reset. I decoded the error code also and found the following stacktrace.
I am using SIM808 module and DFRobot_sim808 as the library.
0x4010030d: millis at AppData\Local\Arduino15\packages\esp8266\hardware\esp82662円.5.0\cores\esp8266/core_esp8266_wiring.c line 180
0x401003b9: __digitalWrite at AppData\Local\Arduino15\packages\esp8266\hardware\esp82662円.5.0\cores\esp8266/core_esp8266_wiring_digital.c line 82
0x40202863: sim808_wait_for_resp(char const*, DataType, unsigned int, unsigned int) at Documents\Arduino\libraries\DFRobot_SIM808-master/sim808.cpp line 172
0x402027a4: sim808_send_byte(unsigned char) at Documents\Arduino\libraries\DFRobot_SIM808-master/sim808.cpp line 118
0x402028ce: sim808_check_with_cmd(char const*, char const*, DataType, unsigned int, unsigned int) at Documents\Arduino\libraries\DFRobot_SIM808-master/sim808.cpp line 191
0x402025dc: DFRobot_SIM808::init() at Documents\Arduino\libraries\DFRobot_SIM808-master/DFRobot_sim808.cpp line 63
0x402024c1: setup at G:\Development\ESP8266\SIM Module\sim_module/sim_module.ino line 41 (discriminator 1)
0x40203248: loop_wrapper() at AppData\Local\Arduino15\packages\esp8266\hardware\esp82662円.5.0\cores\esp8266/core_esp8266_main.cpp line 122
0x40100e8d: cont_wrapper at AppData\Local\Arduino15\packages\esp8266\hardware\esp82662円.5.0\cores\esp8266/cont.S line 81
I tried to find solution for the same everywhere but none found it. But the same code I am trying on arduino it works but not for ESP8266. I dont have long waiting loop(). But still it gives me error.
Below is the code for the same
#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);//Connect RX,TX,PWR,
void setup() {
delay(1000);
mySerial.begin(9600);
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native 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() {
}
1 Answer 1
The culpret is the SIM808 library. It's not written to work well with the ESP8266.
The problem lies in this function:
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 is the time when the previous Char has been read.
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 interchar Timeout => return FALSE. So we can return sooner from this function.
if (((unsigned long) (millis() - prevChar) > chartimeout) && (prevChar != 0)) {
return false;
}
}
//If is a CMD, we will finish to read buffer.
if(type == CMD) sim808_flush_serial();
return true;
}
It has a loop that can take some time to run, and it doesn't yield()
at any point to allow the ESP8266's housekeeping routines to run and "kick the dog".
Adding a call to yield()
inside the while(1)
loop should cure the problem.
-
Thank you very much. It worked. Really appreciated. But I am facing I more issue after 10-12 "Sim808 init error" I receive success why is it so why it does not get initialised in first attempt.Akshay Dusane– Akshay Dusane09/08/2019 04:32:06Commented Sep 8, 2019 at 4:32
-
Probably waiting to connect to the network. That can take up to a minute sometimes.Majenko– Majenko09/08/2019 08:41:19Commented Sep 8, 2019 at 8:41
-
Thanks for the reply. Nothing to bother. There was some contact issue between Gnd Pins of both modules.Akshay Dusane– Akshay Dusane09/09/2019 10:09:16Commented Sep 9, 2019 at 10:09
Explore related questions
See similar questions with these tags.