Не работает GPRS Shield

Тема в разделе "Arduino & Shields", создана пользователем RDuino, 4 фев 2017.

  1. RDuino

    RDuino Нуб

    Здравствуйте! Есть такая проблема: я заказал GPRS Shield с Амперки. Пришел. Я его подключил к Arduino Mega 2560 и прошил arduino. Прошивать пробовал разными кодами:
    первый код:
    Код (C++):
    // библиотека для работы с GPRS устройством
    #include <GPRS_Shield_Arduino.h>
    #include <SoftwareSerial.h>
    // создаём объект класса GPRS и передаём в него объект Serial1
    GPRS gprs(Serial1);
    // можно указать дополнительные параметры — пины PK и ST
    // по умолчанию: PK = 2, ST = 3
    // GPRS gprs(Serial1, 2, 3);
    void setup()
    {
      // открываем последовательный порт для мониторинга действий в программе
      Serial.begin(9600);
      // открываем Serial-соединение с GPRS Shield
      Serial1.begin(9600);
      // ждём, пока не откроется монитор последовательного порта
      // для того, чтобы отследить все события в программе
      while (!Serial) {
      }
      Serial.print("Serial init OK\r\n");
      // включаем GPRS шилд
      gprs.powerOn();
      // проверяем есть ли связь с GPRS устройством
      while (!gprs.init()) {
        // если связи нет, ждём 1 секунду
        // и выводим сообщение об ошибке
        // процесс повторяется в цикле
        // пока не появится ответ от GPRS устройства
        delay(1000);
        Serial.print("Init error\r\n");
      }
      // выводим сообщение об удачной инициализации GPRS Shield
      Serial.println("GPRS init success");
      // отправляем сообщение по указанному номеру с заданным текстом
      gprs.sendSMS("+79829279704", "TEST");
    }
    void loop()
    {
    }
    Второй код:
    Код (C++):
    // библиотека для работы с GPRS устройством
    #include <GPRS_Shield_Arduino.h>
    // длина сообщения
    #define MESSAGE_LENGTH 160
    // номер сообщения в памяти сим-карты
    int messageIndex = 0;
    // текст сообщения
    char message[MESSAGE_LENGTH];
    // номер, с которого пришло сообщение
    char phone[16];
    // дата отправки сообщения
    char datetime[24];
    // создаём объект класса GPRS и передаём в него объект Serial1
    GPRS gprs(Serial1);
    // можно указать дополнительные параметры — пины PK и ST
    // по умолчанию: PK = 2, ST = 3
    // GPRS gprs(Serial1, 2, 3);
    void setup()
    {
      // открываем последовательный порт для мониторинга действий в программе
      Serial.begin(9600);
      // ждём пока не откроется монитор последовательного порта
      // для того, чтобы отследить все события в программе
      while (!Serial) {
      }
      Serial.print("Serial init OK\r\n");
      // открываем Serial-соединение с GPRS Shield
      Serial1.begin(9600);
      // включаем GPRS-шилд
      gprs.powerOn();
      // проверяем, есть ли связь с GPRS-устройством
      while (!gprs.init()) {
        // если связи нет, ждём 1 секунду
        // и выводим сообщение об ошибке;
        // процесс повторяется в цикле,
        // пока не появится ответ от GPRS-устройства
        delay(1000);
        Serial.print("GPRS Init error\r\n");
      }
      // выводим сообщение об удачной инициализации GPRS Shield
      Serial.println("GPRS init success");
      Serial.println("Please send SMS message to me!");
    }
    void loop()
    {
      // если пришло новое сообщение
      if (gprs.ifSMSNow()) {
        // читаем его
        gprs.readSMS(message, phone, datetime);
        // выводим номер, с которого пришло смс
        Serial.print("From number: ");
        Serial.println(phone);
        // выводим дату, когда пришло смс
        Serial.print("Datetime: ");
        Serial.println(datetime);
        // выводим текст сообщения
        Serial.print("Recieved Message: ");
        Serial.println(message);
        gprs.sendSMS(phone,"State: OK");
      }
    }
    Но практически всегда выдает в Serial "GPRS init error". (Иногда, все же, нормально запускается).
    Есть подозрение, что не GPRS'е неверно выставлена частота Serial'а. Как можно настроить частоту на GPRS Shield'e? (AT командами - есть проблемы: ведь он на другой частоте и не понимает AT команд на частоте 9600).
     
  2. Unixon

    Unixon Оракул Модератор

  3. RDuino

    RDuino Нуб

  4. Unixon

    Unixon Оракул Модератор

    p.s. Для меги нужно использовать объект Serial для общения с шилдом (первый порт, RX0/TX0), код для терминала убрать совсем. Если хотите сделать как на Leonardo, общаться одновременно и с шилдом и с терминалом, нужно прокинуть на шилд другой UART (1,2,3), например, через TroykaMegaTail.
     
    RDuino нравится это.
  5. RDuino

    RDuino Нуб

    Да, я перекидывал на Serial1. А вот про убирание кода для терминала прошу поподробнее.
     
  6. marcheanin

    marcheanin Нуб

    Здравствуйте, сегодня решил подключить GPRS к Arduino UNO, вот код:
    // библиотека для работы с GPRS устройством
    #include <GPRS_Shield_Arduino.h>

    // библиотека для эмуляции Serial порта
    // она нужна для работы библиотеки GPRS_Shield_Arduino
    #include <SoftwareSerial.h>

    // создаём объект mySerial и передаём номера управляющих пинов RX и TX
    SoftwareSerial mySerial(4, 5);

    // создаём объект класса GPRS и передаём в него объект mySerial
    GPRS gprs(mySerial);
    // можно указать дополнительные параметры — пины PK и ST
    // по умолчанию: PK = 2, ST = 3
    // GPRS gprs(mySerial, 2, 3);

    void setup()
    {
    // открываем последовательный порт для мониторинга действий в программе
    Serial.begin(9600);
    // открываем Serial-соединение с GPRS Shield
    mySerial.begin(9600);
    // ждём, пока не откроется монитор последовательного порта
    // для того, чтобы отследить все события в программе
    while (!Serial) {
    }
    Serial.print("Serial init OK\r\n");
    // включаем GPRS шилд
    gprs.powerOn();
    // проверяем есть ли связь с GPRS устройством
    while (!gprs.init()) {
    // если связи нет, ждём 1 секунду
    // и выводим сообщение об ошибке
    // процесс повторяется в цикле
    // пока не появится ответ от GPRS устройства
    delay(1000);
    Serial.print("Init error\r\n");
    }

    Потом в мониторе порта:
    Serial init OK
    Init error
    Init error
    Init error
    Init error
    Init error
    Init error
    Init error
    Init error
    Init error
    Init error
    Init error
    Init error
    Init error

    Что делать?
    Подключено: RX 10
    TX 11
     
  7. Unixon

    Unixon Оракул Модератор

    Шилд давно покупали? На новых изменена маркировка. Попробуйте поменять местами RX/TX, только вместо проводов для соединения 10,11 с RX,TX лучше используйте 220-240 Ом резисторы, чтобы случайно не пожечь порты.