Arduino MEGA + GSM SIM900 efcom 1.2

Тема в разделе "Arduino & Shields", создана пользователем Yuzhakov, 3 окт 2018.

  1. Yuzhakov

    Yuzhakov Нуб

    Всем привет! В общем мне необходимо запустить связку Arduino MEGA и SIM900 от efcom. Ниже прикрепляю схему подключение и скетч. Всё это дело не работает, сериал порт мне без конца выдает "Init Error". Может кто знает как быть?
    ФОТО:
    1) https://drive.google.com/file/d/1HP-cY2dMtx1k6Z7evO1Q7JmVXbfmCRqx/view?usp=sharing
    2) https://drive.google.com/file/d/1tMilt8v09oXxbWeDcKhdWf92PE7O0kS2/view?usp=sharing
    Код (C++):
    // библиотека для работы с GPRS устройством
    #include <GPRS_Shield_Arduino.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");
      // отправляем сообщение по указанному номеру с заданным текстом
    }
    void loop()
    {
      gprs.sendSMS("+79999999999", "Hi");
    }
     
    Последнее редактирование: 3 окт 2018
  2. Daniil

    Daniil Гуру

    Проверьте подключение, питание.
    В луп пихать отправку сообщение может дорого обойтись
     
  3. parovoZZ

    parovoZZ Гуру

    А зачем сразу в абдурину? Надо сперва так пообщаться - через терминалку. С питанием что? Бюджет по питанию - не менее 2-х ампер.

    А вот это сильно))
    Код (C++):
    void loop()
    {
      gprs.sendSMS("+79999999999", "Hi");
    }
     
    Mitrandir нравится это.
  4. Yuzhakov

    Yuzhakov Нуб

    Можно попробовать 5В и 2,5 А кинуть на питарие? А для работы только питание и rx tx надо подключить?
     
  5. Yuzhakov

    Yuzhakov Нуб

    Подключил питание от блока зарядки телефона, RX и TX кинул на 7 и 8 пины. Все-равно получаю ошибку GPRS Init error.
    Код (C++):
    // библиотека для работы с GPRS устройством
    #include <GPRS_Shield_Arduino.h>
    #include <SoftwareSerial.h>
    // длина сообщения
    #define MESSAGE_LENGTH 160
    // номер сообщения в памяти сим-карты
    int messageIndex = 0;
    // текст сообщения
    char message[MESSAGE_LENGTH];
    // номер, с которого пришло сообщение
    char phone[16];
    // дата отправки сообщения
    char datetime[24];
    // создаём объект класса GPRS и передаём в него объект Serial1

    // создаём объект mySerial и передаём номера управляющих пинов RX и TX
    SoftwareSerial mySerial(7, 8);
    GPRS gprs(mySerial);
    // можно указать дополнительные параметры — пины 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
    mySerial.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);
      }
    }
     
  6. Yuzhakov

    Yuzhakov Нуб

    Всё проверил, запитал от 2А
     
  7. Daniil

    Daniil Гуру

    а Rx и Tx не перепутаны?
     
  8. Yuzhakov

    Yuzhakov Нуб

    RX шилда на 7 пин ардуино, TX шилда на 8 пин
     
  9. Daniil

    Daniil Гуру

    nkYellOw нравится это.
  10. nkYellOw

    nkYellOw Нерд

    когда заливаешь скетч и будешь работать от розетки, тх и рх пины скидывай перед заливкой.Если работаешь и тестишь только от юсб то этого делать не нужно. 12В 1А хватает что бы запитать мегу и смс шилд!!!!

    Собственно, у меня все работает, но у меня самописное включение смс шилда
    RX 10 TX11 у меня
     
  11. MDV

    MDV Гик

    Ещё надо модем включить
     
  12. MakD

    MakD Нерд

    Всем доброго дня!
    Аналогичная проблема. В наличии есть три платы: Уно, МЕГА и Искра НЕО. Есть GPRS Shield v2.0 на чипе SIM900. Собрал прототип на УНЕ - проверил все работает. Стал перетаскивать на Искру - отказ - шилд не отвечает и все тут. Раздобыл источник питания 9В, 2.5 А.
    Конфигурация шилда: перемычки выставлены для софтверного порта. Но с 7-ым и 8-ым пином искры общаться отказывается. Проверял даже не библиотекой, а скетчем по переброске данных между серийными портами:

    Код (C++):
    #include <SoftwareSerial.h>
    SoftwareSerial Sim900Serial(7, 8); //rx and tx
    void setup()
    {
       Sim900Serial.begin(9600);
       Serial.begin(9600);
    }
    void loop()
    {
       if (Sim900Serial.available())
           Serial.write(Sim900Serial.read());
       if (Serial.available())
           Sim900Serial.write(Serial.read());      
    }
    В мониторе серийного порта на любые команды АТ - тишина. После долгих экспериментов, снял шилд с платы и поставил рядом, прокинул землю (Vin) и (GND). Стал перебирать на искре пины для программного серийного порта и прокидывать их на 7 и 8 шилда. Выяснилось, что не работают именно 7 и 8! Если в серийнике подставить 10 и 11, например, то монитор порта оживает. Шилд начинает возвращать Ок на команду АТ.
    Повторил эксперимент с УНОЙ. На ней пины 7 и 8 работают как часы на программном серийнике. Повторил эксперимент с Мегой! О, ужас, на Меге шилд тоже не работает с 7-ым и 8-ым пинами (в мониторе порта тишина). То есть по факту, если собирать бутерброд на Искре, то я лишаюсь сразу двух портов, что в мои планы не входило. Осталось понять, что не так с пинами 7 и 8 искры и меги... На период размышлений оставил прототип на меге, где на шилд прокинул Serial1. Сталкивался кто-нибудь с подобным поведением?

    В качестве идеи сегодня буду проверять живы ли вообще 7 и 8 на искре с мегой... Хотя до того вполне работали.
     
  13. KindMan

    KindMan Гуру

    Так на меге у вас 4 "железных" UARTa, зачем вам 7,8. На фотке правильно на serial1 подключено. Вам нужно с gsm шилда всего пять проводов, зачем будерброд.
     
  14. MakD

    MakD Нерд

    На меге есть, и на меге у меня как раз на Serial1 и подключено. Перемычки на шилде смотрят на SoftwareSerial (на 7 и 8 пины шилда, на которые, собственно подключены RX и TX Serial1). Что касается проводов, то вроде как 4 всего надо: RX, TX, GND и Vin. А, ну да, питание включить - пятый. Так еще и шестой нужен будет для статуса питания.
    Бутерброд нужен, это прототип может валяться на столе в виде отдельных элементов: контроллер, шилд, клавиатура, дисплей. А в корпус собирать?

    Но суть проблемы этого не меняет. Есть SoftwareSerial, для которого 7-ой и 8-ой пины контроллера являются "родными". Но из трех устройств Шилд работает только на УНЕ по 7 и 8. Ни искра, ни мега не работают! По другим пинам работают, но при сборке в бутерброд я лишаюсь двух пинов контроллера. Если на меге - не принципиально - их солить можно, то на искре - уже проблема.
     
  15. Daniil

    Daniil Гуру

    Прочтите пожалуйста это
     
    arkadyf и MakD нравится это.
  16. MakD

    MakD Нерд

    Гениально! СПАСИБО за ссылку!
     
    Daniil нравится это.