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

Тема в разделе "Arduino & Shields", создана пользователем ivpo, 11 ноя 2018.

Метки:
  1. ivpo

    ivpo Нуб

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

    Использую GPRS шилд от Амперки с платой Leonardo.

    Режим работы такой, что большую часть времени модем выключен и включается раз в 5-7 минут примерно на 1-2 минуты.

    SMS, которые отправлены на модем когда он включен - доходят. Другие - теряются.

    SMS получаю командой "AT+CMGL=ALL", т.е. уже из хранилища, а не в прямом эфире. Постоянно слушать модем не могу - устройство много чего делает параллельно. Также установлена настройка уведомления об SMS - AT+CNMI=2,0,0,0,0. И выставлен текстовый формат SMS (не PDU).

    Питание - от внешнего стабилизированного БП на 5 В и 2 А.

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

    Подскажите пожалуйста, в чем может быть дело.

    Код процедуры по разбору SMS:
    Код (C++):

    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. Un_ka

    Un_ka Гуру

    Небольшой совет :
    Эта тема не про ардуино , а про искру .
    Для неё есть специальный раздел на форуме.