Перекидывание пинов у amperka Gprs shield

Тема в разделе "Arduino & Shields", создана пользователем nuclear_kote, 22 июн 2015.

  1. nuclear_kote

    nuclear_kote Нуб

    Как правильно перекидывать? Попробовал 0, 1 перекинуть на 4,5 и инициализировать Gsm как GPRS gprs(5, 4, 9600); в итоге инициализация не проходит. Что я делаю не так?
     
  2. Unixon

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

    Фото + скетч + библиотека.
     
  3. nuclear_kote

    nuclear_kote Нуб

  4. nuclear_kote

    nuclear_kote Нуб

    Код (Text):
    #include <GPRS_Shield_Arduino.h>
    #include <SoftwareSerial.h>

    #define GLED 8
    #define RLED 9
    #define MESSAGE_LENGTH 160

    GPRS gprs(5, 4, 9600);

    int messageIndex = 0;
    char phone[16];
    char message[MESSAGE_LENGTH];
    char datetime[24];


    void setup() {
        pinMode(RLED, OUTPUT);
        pinMode(GLED, OUTPUT);
        Serial.begin(9600);
        while (!Serial) {
          // ждём, пока не откроется монитор последовательного порта
          // для того, чтобы отследить все события в программе
        }
        gprs.powerUpDown();
        Serial.println("Done");
        while (!gprs.init()) {
            delay(1000);
            makeLedBlink(RLED, 1, 100);  
            Serial.print("Init error\r\n");
        }

    }

    void loop() {
      messageIndex = gprs.isSMSunread();
      if (messageIndex > 0) {
          makeLedBlink(GLED, 5, 1000);
          gprs.readSMS(messageIndex, message, MESSAGE_LENGTH, phone, datetime);
          Serial.println(message);
          gprs.deleteSMS(messageIndex);
      }
    }

    void makeLedBlink(int pin, int count, int time) {
        for (int i = 0; i < count; i++ ) {
          digitalWrite(pin, 255);
          delay(time);
          digitalWrite(pin, 0);
          delay(time);
        }
    }
     
  5. nuclear_kote

    nuclear_kote Нуб

  6. Unixon

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

    После gprs.powerUpDown(); модуль запускается? Светодиоды на шилде загораются?
     
  7. nuclear_kote

    nuclear_kote Нуб

    Да. Init error только постоянный
     
  8. Unixon

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

    Модуль SIM900 по умолчанию настроен на автоопределение скорости UART, фиксированную скорость можно установить и запомнить потом. Библиотека этот момент, по всей видимости, упускает. Для автонастройки скорости нужно первым действием отправить символ 'A' и немного подождать. После этого можно продолжать работу через библиотеку.
     
  9. Unixon

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

    А на 0,1 тоже не работало? У вас перемычки с 4,5 запаяны?
     
  10. Dmitriy K

    Dmitriy K Нуб

    Всем привет!
    Также столкнулся с проблемой в работе с шилдом. Скетч - отправка SMS из примера к библиотеке. На Leonardo работает крайне нестабильно. В некоторых случаях не получаю SMS, которую он отправляет без ошибок, в некоторых - не может проинитить шилд, хотя по индикации на шилде все включается и сеть ловит... На Uno не получается запустить вообще: Init error. USB-кабель к компу, разумеется, отключен.
    Перекидывать пины пока не пробовал.
     
  11. deni5n

    deni5n Нуб

    Аналогичная проблема на Uno. GPRS_Shield стартует 1 раз. но после софтверного выключения не может снова проинициализироваться. пины я перекинул на 5 и 6. В чем может быть дело?
     
  12. MDV

    MDV Гик

    Если я не ошибаюсь то в данной библиотеке управление модемом идет по усарт (аппаратный сериал) на уно это соответственно пины 0 и 1. Если нужно перекидывать ноги придется искать другую либу
     
  13. deni5n

    deni5n Нуб

    Тогда я что-то совсем запутался. на вики_амперки написано, что можно использовать "фичу" :

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

    я как раз так и поступил. карта работает, но не стабильно.

    Я использовал код из статьи на вики_амперки http://wiki.amperka.ru/projects:gprslogger. Получаю следующую ситуацию: карта проходит один цикл:

    gprs.powerUpDown();
    while (!gprs.init()) {delay(1000);}
    delay(3000);
    while (!gprs.join("internet.beeline.ru", "beeline", "beeline")) {delay(1000);}
    while (!gprs.connect(TCP, "narodmon.ru", 8283)) {delay(1000);}readSensors();
    serialPrint();
    tcpRequest();
    gprs.close();
    gprs.disconnect();
    gprs.powerOff();

    а потом запускается, но не может инициилизироваться. бывает раза 3-4 проходит. а потом снова на инициилизаии встает.

    попробовать убрать софтовую эмуляцию и запустить с перемычками?
     
  14. MDV

    MDV Гик

    Привет, если первый цикл проходит и данные передаются на сервер то всё должно работать, проблема в канале связи, (например слабый сигнал) на чем тормозиться (что пишет в сериал мониторе?). возможно необходимо увеличить время между необходимое на инициализацию, или как вариант попробуйте другого оператора.
     
  15. deni5n

    deni5n Нуб

    на телефоне с этой сим картой сигнал - 100%
    а как посмотреть на шилде силу сигнала?
    в сериал мониторе пишет "Init error", эта строка идет сразу перед delay(1000); while (!gprs.init()) {delay(1000);}
    я посмотрел код в sim900.cpp, там задержка только одна - 1 секунду ждет ответа. если его нет, возвращает статус - false
     
  16. Dmitriy K

    Dmitriy K Нуб

    Дмитрий, слабый сигнал тут точно ни при чем. У меня по сути те же проблемы с инициализацией. Специально менял сим-карты - не влияет.
     
  17. Unixon

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

    Еще раз. Нужно выполнить настройку скорости UART модуля SIM900.
    Код (Text):

    #define PIN_ON_OFF 2

    void setup()
    {
      pinMode(PIN_ON_OFF, OUTPUT);
      digitalWrite(PIN_ON_OFF, HIGH);
      Serial.begin(9600);
      Serial1.begin(9600);
      //while (!Serial.available());
      //while (Serial.available()) Serial.read();
      Serial.println("READY");
      delay(1000);
      Serial.println("GO");
      digitalWrite(PIN_ON_OFF, LOW);
      delay(1000);
      Serial.println("Sending 'A' to sync baud rate");
      Serial1.print("A");
      delay(3000);
      Serial.println("Sending 'AT' ..");
      Serial1.print("AT\r\n");
    }

    void loop()
    {
      if (Serial1.available()) Serial.write(Serial1.read());
      if (Serial.available()) Serial1.write(Serial.read());
    }
     
     
  18. MDV

    MDV Гик

    В библиотеке при инициализации выставляется скорость работы.
    В модеме если принудительно не прописать скорость выбирают автоматом.
    Коллеги пришлите полный скетч залью в платку проверю.
    По поводу сигнала есть специальная АТ команда
     
  19. MDV

    MDV Гик

    Еще сигнал статус на модеме как мигает?
     
  20. deni5n

    deni5n Нуб

    Убрал из кода софтовый сериал. Инициализация проходит успешно. Однако теперь не стыкуется к серверу. Сам сервер проверил 3 раза. Телнетом все ходит как надо. Почему то не проходит команда на самом шилде. Кто сталкивался?