Vypra
Member
Нужно выводить ответы на команды SIM800L. Модуль подключен к Node MCU v3 через UART.
Начальный код этого парня. Переделал под UART.
Скетч компилится.
ECHO mode на SIM800 отключен. Ответ от модуля должен прилетать просто ОК или ERROR, без дублирования команды в порт.
Проблема в том, что если делать через Serial.println(); команды посылаются. Как только выполнение кода доходит до sendATCommand("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"", true); - прилетает
Любая команда через sendATCommand () - Soft WDT reset.
Что ему может не нравиться? Мне крайне нужен парсинг ответов SIM800 и для других нужд, не только для отправки емейл. Этот код я использовал на Ардуине, но только через софтсериал, и все работало.
Начальный код этого парня. Переделал под UART.
Код:
String _response = ""; // Переменная для хранения ответа модуля
void setup()
{
Serial.begin(9600); //Скорость сериал порта
send_Email("5", "HELLO"); // 1 - количество символов в теле сообщения, 2 - сообщение
}
void loop()
{}
void send_Email(String num, String message)
{
Serial.println("AT"); // Отправили AT для настройки скорости обмена данными
sendATCommand("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"", true); // задаем команду выхода в интернет
sendATCommand("AT+SAPBR=3,1,\"APN\",\"internet\"", true); // настройки APN
// .... дальше код отправки емейл удалил чтоб не перегружать форум.
}
String sendATCommand(String cmd, bool waiting) // Функция отправки комманд модулю
{
String _resp = ""; // Переменная для хранения результата
Serial.println(cmd); // Отправляем команду модулю
if (waiting) { // Если необходимо дождаться ответа...
_resp = waitResponse(); // ... ждем, когда будет передан ответ
Serial.println(_resp); // Дублируем ответ в монитор порта
}
return _resp; // Возвращаем результат. Пусто, если проблема
}
String waitResponse() // Функция ожидания ответа и возврата полученного результата
{
String _resp = ""; // Переменная для хранения результата
long _timeout = millis() + 10000; // Переменная для отслеживания таймаута (10 секунд)
while (!Serial.available() && millis() < _timeout) {}; // Ждем ответа 10 секунд, если пришел ответ или наступил таймаут, то...
if (Serial.available()) { // Если есть, что считывать...
_resp = Serial.readString(); // ... считываем и запоминаем
}
else { // Если пришел таймаут, то...
Serial.println("Timeout..."); // ... оповещаем об этом и...
}
return _resp; // ... возвращаем результат. Пусто, если проблема
}
ECHO mode на SIM800 отключен. Ответ от модуля должен прилетать просто ОК или ERROR, без дублирования команды в порт.
Проблема в том, что если делать через Serial.println(); команды посылаются. Как только выполнение кода доходит до sendATCommand("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"", true); - прилетает
Код:
Soft WDT reset
>>>stack>>>
ctx: cont
sp: 3ffffcc0 end: 3fffffc0 offset: 01b0
3ffffe70: 015c58b6 3fffff2c 3ffffee8 402073de
3ffffe80: 3ffe8685 3ffeee58 00000000 00014cec
3ffffe90: 3ffeee58 3ffeee58 3ffffee8 402031e5
3ffffea0: 3fffdad0 3fffff2c 3ffeee58 402070c8
3ffffeb0: 3ffe8685 0000000a 00000000 00000001
3ffffec0: 3ffeee58 3fffff2c 3fffff20 4020329c
3ffffed0: 3ffe86c0 0000000b 3fffff2c 4020735f
3ffffee0: 3ffeec0a 00000001 3ffefb74 0000000f
3ffffef0: 00000000 3ffeeda8 3fffff2c 402073de
3fffff00: 3ffe86c0 00000004 41be6666 3ffeeec4
3fffff10: 3fffdad0 3ffeeda8 3ffeed9c 402037d0
3fffff20: 3ffefb5c 0000000f 00000000 3ffefafc
3fffff30: 0000000f 0000000b 3ffeeda8 32204c6c
3fffff40: 00393130 00000002 3fffff70 3fffff60
3fffff50: 00000008 07262117 5c576c42 00000007
3fffff60: 00000003 3ffe88a6 00000005 3ffffe46
3fffff70: 00000000 3ffffe4a 3fffdad0 3ffeeec4
3fffff80: 3fffdad0 3ffeeda8 3ffeed9c 40203da0
3fffff90: 00000000 00000000 3ffeee90 40203dec
3fffffa0: 3fffdad0 00000000 3ffeee90 40207994
3fffffb0: feefeffe feefeffe 3ffe8604 401014c9
<<<stack<<<
??)?? ?F
Что ему может не нравиться? Мне крайне нужен парсинг ответов SIM800 и для других нужд, не только для отправки емейл. Этот код я использовал на Ардуине, но только через софтсериал, и все работало.
Последнее редактирование: