Arduino GSM Shield GSM_READY никогда не готов

Я использую Arduino Mega и Arduino GSM Shield. Я использую пример получения SMS в GSM в Arduino IDE. Аппаратный IP-адрес моего GSM-экрана установлен правильно.

Вот скетч:

/*
SMS получатель

Этот скетч для Arduino GSM Shield ожидает SMS-сообщения
и отображает его через последовательный порт.

Схема:
* GSM-экран, прикрепленный к Arduino
* SIM-карта, которая может принимать SMS-сообщения

создано 25 февраля 2012 г.
Хавьер Зорцано / TD

Этот пример находится в открытом доступе.

http://arduino.cc/en/Tutorial/GSMExamplesReceiveSMS

*/

// включаем библиотеку GSM
#include <GSM.h>

// PIN-код для SIM-карты
#define PINNUMBER ""

// инициализируем экземпляры библиотеки
GSM gsmAccess;
GSM_SMS sms;

// Массив для хранения номера, с которого получено SMS
char senderNumber[20];

void setup() {
  // инициализируем последовательную связь и ждем открытия порта:
  Serial.begin(9600);
  while (!Serial) {
    ; // ждем подключения последовательного порта. Нужен только для Леонардо
  }

  Serial.println("SMS Messages Receiver");

  // состояние соединения
  boolean notConnected = true;

  // Запускаем GSM соединение
  while (notConnected) {
    if (gsmAccess.begin(PINNUMBER) == GSM_READY)
      notConnected = false;
    else {
      Serial.println("Not connected");
      delay(1000);
    }
  }

  Serial.println("GSM initialized");
  Serial.println("Waiting for messages");
}

void loop() {
  char c;

  // Если есть доступные SMS()
  if (sms.available()) {
    Serial.println("Message received from:");
    // Получить удаленный номер
    sms.remoteNumber(senderNumber, 20);
    Serial.println(senderNumber);
    // Пример удаления сообщения
    // Любые сообщения, начинающиеся с #, должны быть отброшены
    if (sms.peek() == '#') {
      Serial.println("Discarded SMS");
      sms.flush();
    }

    // Читаем байты сообщения и печатаем их
    while (c = sms.read())
      Serial.print(c);
    Serial.println("\nEND OF MESSAGE");

    // Удалить сообщение из памяти модема
    sms.flush();
    Serial.println("MESSAGE DELETED");
  }
  delay(1000);
}

Проблема в этой строке:

if (gsmAccess.begin(PINNUMBER) == GSM_READY)

Последовательный монитор выводит все до этой строки.

Он просто никогда не проходит мимо него, поэтому я предполагаю, что он не может подключиться? SIM-карта не имеет пин-кода: я пробовал это на своем телефоне. SIM-карта имеет полную мощность сигнала, когда в моем телефоне. Я пробовал использовать другую SIM-карту, но происходит то же самое.

Похоже, это тот же вопрос, но ответа нет: http://forum.arduino.cc/index.php?topic=270551.0

, 👍1


3 ответа


1

Вы всегда можете попробовать установить вывод, а затем повторить попытку. http://arduino.cc/en/Tutorial/GSMToolsPinManagement

Какую версию Arduino IDE вы используете? Кроме того, вы уверены, что правильно питаете плату? «Рекомендуется, чтобы плата питалась от внешнего источника питания, который может обеспечить от 700 мА до 1000 мА. Питание Arduino и экрана GSM от USB-соединения не рекомендуется, поскольку USB не может обеспечить требуемый ток, когда модем находится в интенсивное использование."

,

1

У меня такая же проблема. Но прежде всего вы должны настроить сетевой диапазон модема в соответствии с диапазоном вашей сотовой сети.

GSMBand band;
String newBand= "GSM_MODE_EGSM_DCS";// Ваша группа В моем случае это было
  band.begin();
  Serial.println("Modem restarted.");
  String bandName = band.getBand(); // Получить и вывести название группы
  Serial.print("Current band:");
  Serial.println(bandName);

band.setBand(newBand);

Справка группы:

  GSM_MODE_EGSM                ---- E-GSM(900)
  GSM_MODE_DCS                 ---- DCS(1800)
  GSM_MODE_PCS                 ---- PCS(1900)
  GSM_MODE_EGSM_DCS            ---- E-GSM(900)+DCS(1800) ex: Europe
  GSM_MODE_GSM850_PCS          ---- GSM(850)+PCS(1900) Ex: USA, South Am.
  GSM_MODE_GSM850_EGSM_DCS_PCS ---- GSM(850)+E-GSM(900)+DCS(1800)+PCS(1900)

Тогда вам нужно использовать

gsm.access.begin();
,

1

У меня была такая же проблема. Затем я использовал gsm.shutdown(); перед gsm.begin(PINNUMBER). После этого он проходит мимо gsm.begin(PINNUMBER), но не всегда. Я не знаю, правильный ли это способ сделать это, но это работает для меня.

,