Не могу разобраться с GPRS Shield

Тема в разделе "Проводная и беспроводная связь", создана пользователем Агафонов Павел, 15 июл 2015.

  1. Добрый день.
    Делаю первые шаги с Ардуиной.
    Не могу разобраться с GPRS Shield.

    Arduino UNO+GPRS Shield+СИМка
    Скетч:

    #include <GPRS_Shield_Arduino.h>
    #include <SoftwareSerial.h>

    GPRS gprs(9600);

    void setup()
    {
    gprs.powerUpDown();
    while (!gprs.init())
    delay(1000);

    gprs.sendSMS("+79165389376", "Hello SMS from Amperka!");
    }

    void loop()
    {
    }

    Библиотеки установил.
    При компиляции выдается следующее:

    C:\Users\Агафнонов Павел\Documents\Arduino\libraries\GPRSShield\GPRS_Shield_Arduino.cpp: In constructor 'GPRS::GPRS(uint32_t)':
    C:\Users\Агафнонов Павел\Documents\Arduino\libraries\GPRSShield\GPRS_Shield_Arduino.cpp:41: error: 'SERIAL_PORT_HARDWARE' was not declared in this scope

    Не могу понять, что за ошибка и что я делаю не так.
     
    Последнее редактирование: 15 июл 2015
  2. geher

    geher Гуру

    Может быть гранаты не той системы, в смысле версия IDE?
    SERIAL_PORT_HARDWARE объявляется в собственной библиотеке ARDUINO IDE и принимает значение
    Serial для Uno и Serial1 для Leonardo. Ну и что-то похожее для других плат. В версии 1.6.5 должно присутствовать. В более ранних и альтернативной линейке 1.7.х - не знаю.
    Собственно говоря, проблему можно решить, вставив в самое начало файла, для которого выдается сообщение об ошибке, а именно GPRS_Shield_Arduino.cpp (не забыв перед этим на всякий случай сделать его копию), строку для Uno, Nano, Mini, Iskra Mini:
    #define SERIAL_PORT_HARDWARE Serial
    для Leonardo, Iskra Neo, Micro:
    #define SERIAL_PORT_HARDWARE Serial1
     
  3. Собственно говоря, проблему можно решить, вставив в самое начало файла, для которого выдается сообщение об ошибке, а именно GPRS_Shield_Arduino.cpp (не забыв перед этим на всякий случай сделать его копию), строку для Uno, Nano, Mini, Iskra Mini:
    #define SERIAL_PORT_HARDWARE Serial


    Спасибо, помогло, заработало!
    IDE версии 1.0.5-r2

    Я правильно понимаю, что в соответствии с
    "На платах Arduino, прошивка которых проходит через пины 0 и 1 (Arduinio Uno, Arduino Mega 2560 и Arduino ADK), прошивку микроконтроллера необходимо производить со снятыми джамперами TX и RX."

    Действовать нужно так: снимаем джамперы на GPRS Shield - прошиваем контроллер - ставим джамперы и нажимаем кнопку сброса на контроллере?
     
  4. geher

    geher Гуру

    Да. только надо учитывать, что шилд, подключенный к 0,1 уны и прочих подобных ардуин будет мешать не только прошивке, но и обмену с ПК по Serial. Так что, если не принять меры по переносу последовательного порта шилда на другие пины (включая объявление SoftwareSerial порта и объявление экземпляра класса gprs с соответствующим параметром), отладку или управление по последовательному порту придется делать по другим каналам.
     
  5. Спасибо за развернутый ответ!
    Однако, подключение УНЫ к 0 и 1 контакту не мешает обмену с ПК по Serial порту. Я открываю порт и вижу сообщения.
     
  6. geher

    geher Гуру

    Оно не всегда будет мешать.
    Просто есть вероятность наложения принимаемых от шилда данных и управляющих команд, если такие передаются по последовательному порту.
    Также отладочная выдача поступает на вход шилда, что в некоторых режимах (например, наличие установленного соединения передачи данных во GPRS) может быть нежелательно.