Arduino & GPRS Shield

Тема в разделе "Arduino & Shields", создана пользователем amelok, 31 окт 2016.

  1. amelok

    amelok Нуб

    Подключаю Arduino к модулю GPRS Shield на Sim900.
    ардуино 10,11,GND соответственно модуль 1,2,GND
    Заливаю такой скетч:
    Код (C++):
    #include <SoftwareSerial.h>
    SoftwareSerial S1(10, 11);

    char bufferPC_Serial[64];// буфер PC Serial
    char bufferGPRS_Serial[64];// буфер GPRS Serial

    void setup()
    {
      Serial.begin(9600);// открываем последовательный порт для мониторинга действий в программе
      S1.begin(115200);// открываем последовательный порт для связи с GPRS-устройством со скоростью 9600 бод
      while (!Serial) {}// ждём, пока не откроется монитор последовательного порта для того, чтобы отследить все события в программе
      gprsTest();// пока не установится связь с GPRS-устройством, будем крутиться в теле функции
    }

    void loop() {}

    void gprsTest()
    {
      while (true) {// бесконечный цикл
        delay(1000);// ждём 1 секунду
        S1.println("AT");// посылаем в GPRS Shield АТ-команду "AT"

        if (S1.available() > 0) {
          Serial.println("EcTb oTBeT oT moDyJl9");
        }
        else
        {
          Serial.println("HeT oTBeTa oT moDyJl9");
        }
      }
    }
    Ответа от модуля нет никакого. Подскажите, что вообще может быть?
    Ни одна библиотека и ни один пример не работают.
    На модуль можно позвонить, он доступен.

    Может быть что то можно прозвонить?
    Спасибо.
     
  2. Radius

    Radius Гик

    Попробуйте понизить скорость на SoftwareSerial до 9600. У вас в комментариях стоит 9600, а в инициализации порта 115200.
     
  3. amelok

    amelok Нуб

    Спасибо огромное за ответ. Оказалось что джамперы были не так подсоединены.
    Я их поставил на D7, D8 и подключал 0,1 порты модуля к 7,8 порту ардуины.
    логика такова: Ну джамперы же стоят на 7,8. Значит надо к 7 и 8 подключать.
    В общем адская невнимательность.

    Еще вопрос по модулю. Скорость обмена 115200. Все команды проходят на ура, но иногда в ответе возникает крякозябра или обрыв. Почему такое может быть?
    Пример:
    Запрос:
    Код (C++):
    AT+SAPBR=4,1
    Ответ:
    Код (C++):
    +SAPBR:
    CONTYPE: GPRS
    APN: internet
    PHONENUM:
    USER: gda
    Код (C++):
    #include <SoftwareSerial.h>
    SoftwareSerial mySerial(10, 11);

    void setup()
    {
      Serial.begin(115200);
      mySerial.begin(115200);
    }

    char a;

    void loop()
    {
      delay(10);
      if (mySerial.available())
      {
        Serial.write(mySerial.read());
      }
      delay(10);
      if (Serial.available())
      {
        a=Serial.read();
        if(a=='~')
        {
         mySerial.write((char)26);
        }
        else
        {
        mySerial.write(a);
        }
      }
    }
     
  4. amelok

    amelok Нуб

    Разобрался сам.
    В файле по адресу
    Arduino\hardware\arduino\avr\libraries\SoftwareSerial\src
    SoftwareSerial.h
    поменять #define _SS_MAX_RX_BUFF 64
    например на #define _SS_MAX_RX_BUFF 640
    но быть осторожным с количеством памяти под переменные.

    Костыль, до нормального решения не допер.