GSM Shield SIM 900R от амперки -все вопросы сюда!

Тема в разделе "Arduino & Shields", создана пользователем НКВД, 30 янв 2016.

  1. ATishchenko

    ATishchenko Нерд

    Кирды себе немного...
     
  2. Small

    Small Нуб

    Вставил этот код, залил, не работает. Пишет "Init error"
     
  3. Small

    Small Нуб

    Сам задал вопрос, сам и отвечаю. Вместо "SoftwareSerial mySerial(10, 11);// RX, TХ
    GPRS gprs(mySerial, 2,3);" , написал строчку "GPRS gprs(2, 3, 10, 11, 9600);". Потом удалил строку "Serial.println("AT+CNMI=2,2,0,0,0\r");" , а SMS продолжают приниматься.
     
  4. ATishchenko

    ATishchenko Нерд

    А платформа Arduino или Iskra? Там есть нюанс с COM-портами.
     
  5. Rapidshe

    Rapidshe Нуб

    а как получить номер звонящего при использовании библиотеки? с АТ командами намучался, что то не пошло. глючное устройство получилось. перешел на библиотеку...

    Код (C++):
    // библиотека для работы с GPRS устройством
    #include <GPRS_Shield_Arduino.h>
    // библиотека для эмуляции Serial порта
    // она нужна для работы библиотеки GPRS_Shield_Arduino
    #include <SoftwareSerial.h>
    // создаём объект класса GPRS. По умолчанию скорость общения с ним 9600 бод
    // с помощью него будем давать команды GPRS шилду
    GPRS gprs;
    char number[16];
    void setup()
    {
      //настраиваем пин №13 в режим выхода,
      pinMode(13, OUTPUT);
      // подаём на пин 13 «низкий уровень»
      digitalWrite(13, LOW);
      // включаем GPRS шилд
      gprs.powerUpDown();
      // открываем последовательный порт для мониторинга действий в программе
      Serial.begin(9600);
      while (!Serial) {
        // ждём, пока не откроется монитор последовательного порта
        // для того, чтобы отследить все события в программе
      }
      // проверяем есть ли связь с GPRS устройством
      while (!gprs.init()) {
        // если связи нет, ждём 1 секунду
        // и выводим сообщение об ошибке
        // процесс повторяется в цикле,
        // пока не появится ответ от GPRS устройства
        delay(1000);
        Serial.print(F("Init error\r\n"));
      }
      // вывод об удачной инициализации GPRS Shield
      Serial.println(F("GPRS init success"));
      // сообщаем об ожидании звонка
      Serial.println(F("Wait to call "));
    }
    void loop()
    {

      if (gprs.ifcallNow()) {
        Serial.println(F("zvon9t"));
        gprs.isCallActive(number);
    Serial.println(number);
      }
    }
    пробовал так - номер не показывается
    -----------
    блин, с этой библиотекой сигналку не сделаешь... много времени на проверку новых сообщений уходит.
    Но инициализация модуля тут нравится, всегда успешный запуск бутерброда.

    как можно после инициализации sim900 начать к нему обращаться не посредством библиотеки, а посредством команд?

    или хотя бы как слушать, что он вещает в ардуину минуя библиотеку.
    c if (gprs.available()) {} не компилируется, хотя SoftwareSerial.h используется.

    или может в библиотеке есть функция просто выдачи информации от сим900 без анализа? я что то не увидело... но и не спец в общем то)
     
    Последнее редактирование: 31 окт 2016
  6. naz

    naz Нерд

    Добрый день всем жителям форума. Пытаюсь подружить Mega 2560, Sim900 и себя- получается не очень, делаю впервые.
    Проблема: нет отклика от шилда, прошу помочь. Пишу команды, в ответ тишина.
    Что сделал: насадил на Ардуину шилд, подключил D7, D8 к Rx1, Tx1, перемычки на шилде в положении SWserial. Питание шилда внешнее, БП 5В 2А, Ардуино подключил к компу, COM3.
    Код скомпилировался без ошибок:
    Код (C++):
    //Serial Relay - Arduino will patch a serial link between the computer and the GPRS Shield
    //at 19200 bps 8-N-1 Computer is connected to Hardware UART
    //GPRS Shield is connected to the Software UART
    #include <SoftwareSerial.h>
    SoftwareSerial GPRS(7, 8);
    unsigned char buffer[64]; // buffer array for data recieve over serial port
    int count=0;  // counter for buffer array
    void setup()
    {
      GPRS.begin(19200);  // the GPRS baud rate
      Serial.begin(19200);  // the Serial port of Arduino baud rate.
    }
    void loop()
    {
      if (GPRS.available())  // if date is comming from softwareserial port ==> data is comming from gprs shield
      {
      while(GPRS.available())  // reading data into char array
      {
      buffer[count++]=GPRS.read();  // writing data into array

      if(count == 64)break;

      }
      Serial.write(buffer,count);  // if no data transmission ends, write buffer to hardware serial port

      clearBufferArray();  // call clearBufferArray function to clear the storaged data from the array
      count = 0;  // set counter of while loop to zero
      }
      if (Serial.available())  // if data is available on hardwareserial port ==> data is comming from PC or notebook
      GPRS.write(Serial.read());  // write it to the GPRS shield
    }
    void clearBufferArray()  // function to clear buffer array
    {
      for (int i=0; i<count;i++)
      { buffer[i]=NULL;}  // clear all index of array with command NULL
    }
    [​IMG]
    После включения питания шилд сеть находит, индикатор мигает 1 раз в 3 сек.
     
  7. MDV

    MDV Гик

    Софт сериал это пины на меге.
     
  8. MDV

    MDV Гик

    Перемычки нужно ставить на самом шилде. Как? Смотри вики там управление передано на 10 и 11 пины.
     
  9. naz

    naz Нерд

    Спасибо за ответ, Дмитрий. В википедии нашёл как перемычки ставить:[​IMG]
    А где 10 и 11 пины? На Меге? А может, строку
    Код (C++):
    SoftwareSerial GPRS(7, 8);
    поправить надо?
     
  10. MDV

    MDV Гик

    А на меге их ставить не надо вы их назначаете при инициализации.
    Меняйте строку как вы предлагаете и должно заработать.
     
  11. naz

    naz Нерд

    Так я похоже напрасно сединил проводочками D7 и Rx1; D8 и Tx1..
     
  12. Rapidshe

    Rapidshe Нуб

    при использовании библиотеки GPRS_Shield_Arduino https://github.com/amperka/gprs-shield
    можно как то получать данные от модуля сразу как он их выдает?
     
  13. Rapidshe

    Rapidshe Нуб

    ArduinoMega has three additional serial ports: Serial1 on pins 19 (RX) and 18 (TX)
    положите модуль перед собой антеной вверх.
    попробуйте снять перемычки и проводами кинуть от правого среднего пина(из колодки, откуда сняли перемычки только что) к пину19меги и от левого среднего к пину18меги.
    и обращаться к модулю просто Serial1(а не GPRS)
    т.е. без всяких SoftwareSerial GPRS(7, 8);
     
  14. naz

    naz Нерд

    Rapidshe, у меня нет проводочков с "мамой", поэтому сделал так: снял шилд с меги, пе ремычки оставил, сединил проводочками D7 и Rx1; D8 и Tx1, в скетче передедал обращение на Serial1.
    Получаю теперь в мониторе COM порта отправку команды АТ. Но ответа OK не приходит. Что ещё посоветуете?
     
  15. Rapidshe

    Rapidshe Нуб

    для меги сериал1 это исключительно D17 и D18
     
  16. eleberet

    eleberet Нуб

    Помогите пожалуйста!
    Уже несколько дней ковыряю "бутерброд" Iskra+GPRS shield и все это время он никоим образом не реагирует на AT команды
    В сериал мониторе ничего просто не происходит после нажатия кнопки "отправить"
    Тут писали что есть какойто нюанс с портами, может изза этого?
    и еще, когда в теле самой программы прописываю АТ команду через Serial.print() она появляется на мониторе, но не срабатывает ( смс модулем не принемается по этой причине, прописываю "AT+CNMI=2,2,0,0,0" )
     
  17. Rapidshe

    Rapidshe Нуб

    полностью процесс включения опишите
     
  18. naz

    naz Нерд

    А может D18 и D19?
    Вот моя конструкция. Правильно ли собрано?
    [​IMG]

    А вот вариант подключения из форума по ардуино, видны пины D18 и D19:
    [​IMG]
     
  19. Rapidshe

    Rapidshe Нуб

    прошу прощения, описался. изначально подсказывал правильно)
    заработало?
     
  20. naz

    naz Нерд

    Нет, к сожалению. Команду AT отсылаю, в мониторе COM- порта она отображается, но ответа нет:(