gsmAccess.begin(PINNUMBER) вообще не отвечает.

Тема в разделе "Arduino & Shields", создана пользователем BeeLove, 9 июл 2014.

  1. BeeLove

    BeeLove Нерд

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

    Использую arduino uno и GPRS shield v2.0b
    shield был в отдельной коробочке с неустановленными соединительными штырьками. Запаял в соответствии с: http://www.seeedstudio.com/wiki/GPRS_Shield_V2.0
    Теперь выглядит точно так же.
    Перемычки на шилде в положении SW порта.
    Вставлен элемент питания 3V.
    Вставлена SIM карта без PIN кода. Перед этим проверена в мобильнике, успешно работает денег на счету 600р.

    Зашел в примеры скетчей для ардуино libraries GSM а там examples.
    Решил начать с простого. SMS receive. Вот код:


    /*
    SMS receiver

    This sketch, for the Arduino GSM shield, waits for a SMS message
    and displays it through the Serial port.

    Circuit:
    * GSM shield attached to and Arduino
    * SIM card that can receive SMS messages

    created 25 Feb 2012
    by Javier Zorzano / TD

    This example is in the public domain.

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

    */

    // include the GSM library
    #include <GSM.h>

    // PIN Number for the SIM
    #define PINNUMBER ""

    // initialize the library instances
    GSM gsmAccess;
    GSM_SMS sms;

    // Array to hold the number a SMS is retreived from
    char senderNumber[20];

    void setup()
    {
    // initialize serial communications and wait for port to open:
    Serial.begin(19200);
    while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
    }

    Serial.println("SMS Messages Receiver");
    //Serial.println(gsmAccess.begin());
    //Serial.println("ALL OK");

    // connection state
    boolean notConnected = true;
    // Start GSM connection
    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;
    // If there are any SMSs available()
    if (sms.available())
    {
    Serial.println("Message received from:");

    // Get remote number
    sms.remoteNumber(senderNumber, 20);
    Serial.println(senderNumber);

    // An example of message disposal
    // Any messages starting with # should be discarded
    if(sms.peek()=='#')
    {
    Serial.println("Discarded SMS");
    sms.flush();
    }

    // Read message bytes and print them
    while(c=sms.read())
    Serial.print(c);

    Serial.println("\nEND OF MESSAGE");

    // Delete message from modem memory
    sms.flush();
    Serial.println("MESSAGE DELETED");
    }

    delay(1000);

    }

    Прошивается успешно. Порт с компом работает и на 9600 и на 19200.
    Но....

    gsmAccess.begin(PINNUMBER)

    тупо ни когда не отвечает. Что я имею ввиду... При запуске этой строки от нее нет отклика. Т.е. просто совсем. Ни да ни нет, типа висит и все.
    Пробовал поставить HW порт, та же песня.
    Насколько я понял, у меня успешное соединение между компом и arduino по RS-232. Монитор успешно работает.

    А вот далее arduino не может достучаться до shielda.
    Это я правильно понимаю?

    Где собака зарылась?
    Верите? Перелопатил кучу форумов и прочей ерунды. Нет результата. Ни чего не понимаю. Вернее вроде все понимаю, но не работает.

    Дополнительная информация. После подачи питания на shield постоянно светится светодиод питания. Без провалов. Могу питать от USB порта. Но так же есть внешнее 2А 12В питание. Не помогает.

    Arduino прогружается, ни чего не происходит. Звоним на эту SIM карту, абонент не доступен. Стоит нажать на shiel кнопочку, она там одна... девайс успешно соединятеся с сетью. SIM карта становится доступной. Я вижу электромагнитное включение антенны на передачу. Обмен идет успешный. Уведомление о доставке СМС приходят быстро и уверено. Если SIM карту вставить в телефон то СМСки на месте. Получается нет связи между arduino и shieldom.

    Где копать?

    (я правильно понимаю, что нужно аккуратно вставить GPRS shiel в Arduino uno и ни чего дополнительного коммутировать не нужно?)

    Попробовал извлечь из shelda батарейку. Ни чего не поменялось.
    Вечером будет возможность логическим пробником посмотреть обмен по RX, TX.
    Где эти сигналы от arduino мне понятно. Найти бы их поступление на сам кирпич.
     
    Последнее редактирование: 9 июл 2014
  2. ANV

    ANV Гуру

    Если перемычки в положении SW порта, то почему устанавливаете соединение по аппаратному порту?
     
  3. BeeLove

    BeeLove Нерд

    А откуда вы понимаете , что соединение с shieldom в скетче устанавливается по аппаратному порту? Я не вижу.
    Делаю по http://arduino.cc/en/Tutorial/GSMExamplesReceiveSMS
    Сейчас попробую перемычки в HW.

    Попробовал, не помогло.

    В другом скетче попробовал arduino в виде посредника с GPRS. Знаете кое что пошло. Ответ на AT получил. Но не все так как описано.
     
  4. ANV

    ANV Гуру

    Использование serial, a не softwareserial как-бы намекнуло :)
    Мануал по softwareserial: http://arduino.cc/en/Reference/SoftwareSerial
     
  5. BeeLove

    BeeLove Нерд

    Попробовал, не помогло.

    В другом скетче попробовал arduino в виде посредника с GPRS. Знаете кое что пошло. Ответ на AT получил. Значит линии RX TX доходят успешно. Но там SW serial.
    Но не все так как описано.
     
  6. BeeLove

    BeeLove Нерд

    Не может быть так, что GSM library только для версии GPRS shield v1 ?
     
  7. ANV

    ANV Гуру

    V2 отличается от V1 только аппаратными улучшениями: схема мягкого старта, DC-DC вместо LDO и еще по мелочи
     
  8. BeeLove

    BeeLove Нерд

    Ясно, значит причина не в этом. Тогда в чем? Продолжаю искать. Вообще странно, что метод после своего вызова навечно остается в состоянии неответа. Что то тут не так.
    Что ли попробовать посмотреть что у него внутри? На чем он входит в ожидание...
     
  9. ANV

    ANV Гуру

    Можно.
    Сделать проброс serial в компьютер (скетч есть в описании на seeed) и руками вводить команды.
     
  10. BeeLove

    BeeLove Нерд

    Это я понимаю. У меня уже получилось получить отклик на AT. Но мне надо понять принцип и выполнить свои задачи. А тут на официальном сайте пример не получается. Я где то ошибаюсь.
     
  11. BeeLove

    BeeLove Нерд

    Поменял СИМ карту. Поставил карту другого оператора. На карту поставил PIN код. Указал в программе, пофигу.
    Попробовал другой пример по организации GPRS соединения с сервером. Бестолку. Ловит клина там же.
     
  12. BeeLove

    BeeLove Нерд

    Попробовал вот такой скетч:
    Код (Text):
    // import the GSM library
    #include <GSM.h>

    // PIN Number
    #define PINNUMBER "0000"

    // initialize the library instance
    GSM gsmAccess(true);    // include a 'true' parameter for debug enabled
    GSMScanner scannerNetworks;
    GSMModem modemTest;

    // Save data variables
    String IMEI = "";

    // serial monitor result messages
    String errortext = "ERROR";

    void setup()
    {
      // initialize serial communications
      Serial.begin(9600);
      Serial.println("GSM networks scanner");
      scannerNetworks.begin();
      //Serial.println("SN Begin past.");

      // connection state
      boolean notConnected = true;

      // Start GSM shield
      // If your SIM has PIN, pass it as a parameter of begin() in quotes

      while(notConnected)
      {
        if(gsmAccess.begin(PINNUMBER)==GSM_READY)
          notConnected = false;
        else
        {
          Serial.println("Not connected");
          delay(1000);
        }
      }

      // get modem parameters
      // IMEI, modem unique identifier
      Serial.print("Modem IMEI: ");
      IMEI = modemTest.getIMEI();
      IMEI.replace("\n","");
      if(IMEI != NULL)
        Serial.println(IMEI);

      // currently connected carrier
      Serial.print("Current carrier: ");
      Serial.println(scannerNetworks.getCurrentCarrier());

      // returns strength and ber
      // signal strength in 0-31 scale. 31 means power > 51dBm
      // BER is the Bit Error Rate. 0-7 scale. 99=not detectable
      Serial.print("Signal Strength: ");
      Serial.print(scannerNetworks.getSignalStrength());
      Serial.println(" [0-31]");
    }

    void loop()
    {
      // scan for existing networks, displays a list of networks
      Serial.println("Scanning available networks. May take some seconds.");

      Serial.println(scannerNetworks.readNetworks());

        // currently connected carrier
      Serial.print("Current carrier: ");
      Serial.println(scannerNetworks.getCurrentCarrier());

      // returns strength and ber
      // signal strength in 0-31 scale. 31 means power > 51dBm
      // BER is the Bit Error Rate. 0-7 scale. 99=not detectable
      Serial.print("Signal Strength: ");
      Serial.print(scannerNetworks.getSignalStrength());
      Serial.println(" [0-31]");

    }
     
    Опять клинит на gsmAccess.begin(PINNUMBER).
    Если проверку на доступ к GSM выключить то далее ни какие данные не поступают.
     
  13. BeeLove

    BeeLove Нерд

    Во всех вариантах использования библиотеки GSM используется:
    Код (Text):
    while(notConnected)
      {
        if(gsmAccess.begin(PINNUMBER)==GSM_READY)
          notConnected = false;
        else
        {
          Serial.println("Not connected");
          delay(1000);
        }
      }
    С вероятностью 99% там нет ошибки. Модем отвечает. Но мы не можем получить доступ к gsmAccess бросаю до завтра. С утра осенит.
     
  14. BeeLove

    BeeLove Нерд

    После долгих мытарст удалось включить Debug режим. Вот ответ AT%13%

    Тут пишут:
    Коды ошибок.

    Значение: 0,4,5,9,12,13,14Когда факс-модем посылает сообщение NO CARRIER, соответствующее значение помещается в этот регистр для выявления причин разрыва соединения.
    S86=0 Нормальное рассоединение, ошибки нет.
    S86=4 Потеря несущей.
    S86=5 Соединение по V.42 невозможно, так как удаленный модем не поддерживает данный протокол
    S86=9 Протокол, общий для обоих модемов не найден. S86=12 Нормальное рассоединение, инициируемое удаленным модемом.
    S86=13 Удаленный модем не отвечает после 10 передач одного сообщения.
    S86=14 Нарушение протокола.

    13 ошибка - читайте выше.



    Похоже модем не отвечает. Вываливается этот отклик ровно через 10 секунд. Как раз 10 переповторов. Почему? Может у кого то есть связка arduino uno + GPRS shield, попробуйте мой подвиг. Вдруг я действительно с неисправным sieldom ?
     
  15. BeeLove

    BeeLove Нерд

    Короче закончилась история вот как. Библиотеку GSM , которая идет стандартно с arduino-1.0.5-r2 пришлось похоронить. Так и не удалось настроить RX TX связь между arduino и GPRS shield.

    Подключил библиотеку GSM_GPRS. Открыл файл GSM.cpp поправил вывод, прием информации на пины 7 и 8.
    Были строки:
    #define _GSM_TXPIN_ 2
    #define _GSM_RXPIN_ 3
    Стали:
    #define _GSM_TXPIN_ 7
    #define _GSM_RXPIN_ 8

    Перемычки на shield в положение SW serial.

    Все заработало.
    Спасибо всем кто принимал участие в топике.
     
    Последнее редактирование: 10 июл 2014
  16. BeeLove

    BeeLove Нерд

    Остался только один вопрос. Для того чтобы все заработало необходимо на 2 сек зажать кнопку питания GPRS shield. После того как он включится, все ок. Так вот вопрос. Устройство, которое делается будет в поле, в закрытом корпусе. Как туда лазить эту кнопку нажимать?
    Что то я не пойму, shield сам не включается что ли? Каждый раз после сброса питания нужно вмешательство человека?
     
  17. Airbus

    Airbus Радиохулиган Модератор

    Зачем так сложно?Есть же примеры на форуме втч и мой скетч с аппаратным serial
     
  18. BeeLove

    BeeLove Нерд

    Если честно, очень понравилась библиотека GSM. Хочу ее домучать. нашел в файле GSM3SoftSerial.cpp задание ног RX TX. Хочу все же заставить ее работать.
    А можно ссылочку на примеры на форуме? Ну плиз...
     
  19. acos

    acos Официальный гик Администратор

  20. Airbus

    Airbus Радиохулиган Модератор

    Да оно