Leo + SIM800 - не приходят SMS

ivpo
Offline
Зарегистрирован: 07.01.2014

Здравствуйте

Использую 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);
      }
    }
  }
}
ivpo
Offline
Зарегистрирован: 07.01.2014

Питание нормальное - от внешнего БП до 2 А.

Отправка SMS, получение в период включенного состояния и периодическая отправка информации по HTTP проходит четко без сбоев (пока пробовал длительную работу до 10 часов).

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Попробуйте на простейшем примере, выводчщим все из модема в консоль получить все смс - выводятся?
Думаю дело в настройке сохранения смс, но далеко от компа - работающие параметры не посмотрю.

ivpo
Offline
Зарегистрирован: 07.01.2014

Да, спасибо. Сейчас попробую на элементарных скетчах.

Напишу.

ivpo
Offline
Зарегистрирован: 07.01.2014

Кажется, проблема решилась.

Основных причины две:

1) GSM во включенном состоянии надо держать дольше (более 30-40 секунд). СМС приходят с задержкой, когда шилд выключен во время отправки СМС.

2) "AT+CNMI=2,0,0,0,0" - настройка не сохраняется. Надо каждый раз устанавливать при включении шилда.

Всем спасибо :)