• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

SIM800L перезагружает ESP12

MihaNN52

Member
Такая проблема. Подключаю ESP12 b SIM800L
SIM800L подключен к пинам 13 15 SoftwareSerial
После отправки СМС ESP перезагружается.
Думал что дело в кривой библиотеке sim800l.h
Перешел на АТ команды и ситуация не изменилась.
Для отправки использую такой пример

Код:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // RX, TX
void setup() {
  Serial.begin(19200);  //Скорость порта для связи Arduino с компьютером
  Serial.println("Goodnight moon!");
  mySerial.begin(19200);  //Скорость порта для связи Arduino с GSM модулем
  mySerial.println("AT");
}

void loop() {
  if (mySerial.available())
    Serial.write(mySerial.read());
  if (Serial.available())
    mySerial.write(Serial.read());
}

void sms(String text, String phone) {
  Serial.println("SMS send started");
  mySerial.println("AT+CMGS=\"" + phone + "\"");
  delay(30;
  mySerial.print(text);
  delay(30);
  mySerial.print((char)26);
  delay(30);
  Serial.println("SMS send finish");
  delay(30);
}
Как думаете в чем может быть причина?
Пишу в ардуино ide
 

MihaNN52

Member
Виктор, ESP ведет себя странно)
Питание в норме. Питаю от лабораторного блока питания.
Падение происходит уже после отправки смс.
Сразу после подтверждения отправки.
приходит
текст смс
+GMSG: 104

ОК

После этого идет перезагрузка
смс доходят.
 

Victor

Administrator
Команда форума
ESP ведет себя странно)
А как вы парсите ответ от SIM800?
[inline]String[/inline] в Arduino часто приводит к утечкам памяти. Повставляйте в код вывод информации о свободной памяти [inline]ESP.getFreeHeap()[/inline]
Попробуйте вообще не парсить ответ от модуля.
Если проблема останется, то настройте отладчик и посмотрите что происходит
 

MihaNN52

Member
[00][00][00]
ets Jan 8 2013,rst cause:4, boot mode:(3,6)

wdt reset
load 0x4010f000, len 1384, room 16
tail 8
chksum 0x2d
csum 0x2d
v180000ca
~ld
ьФл‹№ҐќЎСЃmoon!
[00][00][00][00][00][00][00][00]
ets Jan 8 2013,rst cause:4, boot mode:(3,6)

wdt reset
load 0x4010f000, len 1384, room 16
tail 8
chksum 0x2d
csum 0x2d
v180000ca
~ld
ьФл‹№ҐќЎСЃmoon!
[00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00][00]


вот такие сообщения получаю с таким вот скетчем... ни чего не отправляю и не получаю
#include <SoftwareSerial.h>
SoftwareSerial mySerial(13, 15); // RX, TX
void setup() {
Serial.begin(115200); //Скорость порта для связи Arduino с компьютером
Serial.println("Goodnight moon!");
mySerial.begin(115200); //Скорость порта для связи Arduino с GSM модулем
mySerial.println("AT");
}

void loop() {
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
mySerial.write(Serial.read());

}
 

Victor

Administrator
Команда форума
Везде вроде уже написано, что [inline]SoftwareSerial[/inline] не работает со скоростями выше 57600. Рекомендовано 9600. А вы его на 115200 пытаетесь заставить стабильно работать, но это невозможно.
 

MihaNN52

Member
Точно.
Тут дело в чем я делаю проект уже пару месяцев. Все работало на столе и отправляло нормально смс. Потом в один момент симка теле 2 перестала ловить сеть, при этом в телефоне она работает. Поменял на мегафон, сеть находит сразу, все норм. Но появился такой вот баг с падением после отправки смс.
В итоге по ошибке я нашел тему на этом форуме про сторожевые таймеры и я взял от туда две функции, ни черта не понимая что они делают.
ESP.wdtDisable(); в сетап и ESP.wdtFeed(); в цикл. И все заработало. Причем я не нашел что то что бы не работало, и веб сервер работает и MQTT , все принимает и отправляет. Виктор, что это за функции и зачем они нужны и как думаешь почему с ними все заработало? На сколько мне хватило мозгов понять это некий режим перезагрузки когда контроллер зависает. Получается в случае зависона он сам уже не перезагрузится.
 

Victor

Administrator
Команда форума
Получается в случае зависона он сам уже не перезагрузится.
не, watchdog кривой, не работает нормально.
похоже SMS стали дольше отправляться, поэтому wdt и срабатывает.
не ждите ответа от модуля в бесконечном цикле
 

MihaNN52

Member
Пробовал не ждать ответа.
Пробовал делать так чтоб наоборот ждал больше чем надо, загонял в цикл и нормально он там себя чувствовал секунд по 40-50 при этом ничего не падало. Но стоит придти ответу - все хана.)
Т.е если ответ приходит за 2 сек падение на второй секунде, если ответ на 10 то упадет на 10-й. Надо бланком попробовать прошить наверное.
 
Сверху Снизу