Leo + SIM800 - не приходят SMS
- Войдите на сайт для отправки комментариев
Вс, 11/11/2018 - 11:31
Здравствуйте
Использую GPRS шилд от Амперки с платой Leonardo.
Режим работы такой, что большую часть времени модем выключен и включается раз в 5-7 минут примерно на 1-2 минуты.
SMS, которые отправлены на модем когда он включен - доходят. Другие - теряются.
SMS получаю командой "AT+CMGL=ALL", т.е. уже из хранилища, а не в прямом эфире. Постоянно слушать модем не могу - устройство много чего делает параллельно. Также установлена настройка уведомления об SMS - AT+CNMI=2,0,0,0,0. И выставлен текстовый формат SMS (не PDU).
Подскажите пожалуйста, в чем может быть дело.
Код процедуры по разбору SMS:
void CheckSMS() {
Serial.println(F("Start checking SMS"));
// Serial1.println("AT+CMGL=\"REC UNREAD\"");
Serial1.println("AT+CMGL=\"ALL\"");
long ts_temp = millis();
String str = "";
Serial.println(F("Waiting for answer"));
bool fl1 = false;
// в течение 15 секунд ждем ответа от модема и разбираем этот ответ построчно
while (millis() - ts_temp < 15000) {
while (Serial1.available()) {
char c = Serial1.read();
Serial.write(c);
str += c;
if (c == '\n') {
// отправляем строчку на парсинг, ищем управляющую команду, если она есть, то выставляем флаг, что получили хоть одну команду (для дальнейшегшо удаления всех смс)
if (ParseSMS(str) == true) {
fl1 = true;
};
str = "";
}
}
}
delay(100);
Serial.println(F("End checking SMS"));
// если получена хоть одна смс с управляющей командой - удаляем все
if (fl1 == true) {
DebugOut(F("Deleting SMS"));
// удаляем все смс
Serial1.println(F("AT+CMGD=1,4"));
long ts_t = millis();
while (millis() - ts_t < 5000) {
while (Serial1.available()) {
char c = Serial1.read();
Serial.write(c);
}
}
}
}
Питание нормальное - от внешнего БП до 2 А.
Отправка SMS, получение в период включенного состояния и периодическая отправка информации по HTTP проходит четко без сбоев (пока пробовал длительную работу до 10 часов).
Попробуйте на простейшем примере, выводчщим все из модема в консоль получить все смс - выводятся?
Думаю дело в настройке сохранения смс, но далеко от компа - работающие параметры не посмотрю.
Да, спасибо. Сейчас попробую на элементарных скетчах.
Напишу.
Кажется, проблема решилась.
Основных причины две:
1) GSM во включенном состоянии надо держать дольше (более 30-40 секунд). СМС приходят с задержкой, когда шилд выключен во время отправки СМС.
2) "AT+CNMI=2,0,0,0,0" - настройка не сохраняется. Надо каждый раз устанавливать при включении шилда.
Всем спасибо :)