GSM/GPRS shield c Ebay

Тема в разделе "Arduino & Shields", создана пользователем Romeo1, 8 авг 2013.

  1. Romeo1

    Romeo1 Нуб

    Вообщем приобрёл я данную игрушку http://www.ebay.com/itm/GSM-GPRS-Sh...682?pt=LH_DefaultDomain_0&hash=item35c35f0b8a
    Прочёл тему http://wiki.amperka.ru/беспроводная-связь:gprs-shield
    Из всех 4-х примеров,работает только первый,и то определил когда подключил наушник((((,а мне так 4-й нужен(((Может кто сталкивался с данным девайсом?Помогите плиз.Заранее СПАСИБО!Очень помогает Ваш форум!
     
  2. nailxx

    nailxx Официальный Нерд Администратор

    Он тоже работает на SIM900, поэтому всё должно работать, ну или лишь минимально отличаться. Как успехи? Удалось завести?

    Пробовали отправлять получаемые данные в Serial компьютера для отладки и отправлять на шилд SMS?
     
  3. Romeo1

    Romeo1 Нуб

    Нет...Пока никак не выходит(((Думаю ,что проблема в питании...на сайте продавца написано краснющем:This shield must work with a external DC9V power supply. Because SIM900 peak current more than 2A. тоесть питание ему нужно 9-ть вольт!
    Шилд устанавливается на UNO дублируя его входы и выходы,т.е.питается он от 5-и и 3,3В ,и тут я завис....,не могу же я на ногу 5-и вольт подать 9-ть...
     
  4. nailxx

    nailxx Официальный Нерд Администратор

    Видимо, речь идёт о том, что у модуля на борту стоит свой линейный регулятор напряжения, который требует :eek: девять или более вольт.

    Питание, судя по фото, берётся из Vin на Arduino. А туда оно попадает с разъёма питания Arduino.

    Иными словами, питайте Arduino внешним стабилисированным блоком питания на 9 В, предоставляющим ток не менее 2000 мА.
     
  5. Romeo1

    Romeo1 Нуб

    Ща попробуем!Чего выйдет,обязательно отпишусь!Спасибо за внимание и совет!
     
  6. Romeo1

    Romeo1 Нуб

    Нет у меня под рукой 2-х Амперного(((,воткнул 1А...тоже самое...,звонок проходит,СМС нет!(
     
  7. nailxx

    nailxx Официальный Нерд Администратор

    Ну на деле 1 А должно хватать.

    А пробовали все входящие данные отправлять в Serial Monitor, чтобы глянуть чего происходит?
     
  8. Romeo1

    Romeo1 Нуб

    Вообщем есть кое какие успехи,загрузив этот скетч:
    Код (C):
    #include "SIM900.h"
    #include <SoftwareSerial.h>
    #include "inetGSM.h"
    //#include "sms.h"
    //#include "call.h"

    //To change pins for Software Serial, use the two lines in GSM.cpp.

    //GSM Shield for Arduino
    //www.open-electronics.org
    //this code is based on the example of Arduino Labs.

    //Simple sketch to start a connection as client.

    InetGSM inet;
    //CallGSM call;
    //SMSGSM sms;

    char msg[50];
    int numdata;
    char inSerial[50];
    int i=0;
    boolean started=false;

    void setup()
    {
      //Serial connection.
      Serial.begin(9600);
      Serial.println("GSM Shield testing.");
      //Start configuration of shield with baudrate.
      //For http uses is raccomanded to use 4800 or slower.
      if (gsm.begin(4800)){
        Serial.println("\nstatus=READY");
        started=true;  
        gsm.forceON();
      }
      else Serial.println("\nstatus=IDLE");
      if(started){
        //GPRS attach, put in order APN, username and password.
        //If no needed auth let them blank.
        if (inet.attachGPRS("internet.wind", "", ""))
          Serial.println("status=ATTACHED");
        else Serial.println("status=ERROR");
        delay(1000);
       
        //Read IP address.
        gsm.SimpleWriteln("AT+CIFSR");
        delay(5000);
        //Read until serial buffer is empty.
        gsm.WhileSimpleRead();
     
        //TCP Client GET, send a GET request to the server and
        //save the reply.
        numdata=inet.httpGET("www.google.com", 80, "/", msg, 50);
        //Print the results.
        Serial.println("\nNumber of data received:");
        Serial.println(numdata);  
        Serial.println("\nData received:");
        Serial.println(msg);
      }
    };

    void loop()
    {
      //Read for new byte on serial hardware,
      //and write them on NewSoftSerial.
      serialhwread();
      //Read for new byte on NewSoftSerial.
      serialswread();
    };

    void serialhwread(){
      i=0;
      if (Serial.available() > 0){         
        while (Serial.available() > 0) {
          inSerial[i]=(Serial.read());
          delay(10);
          i++;   
        }
       
        inSerial[i]='\0';
        if(!strcmp(inSerial,"/END")){
          Serial.println("_");
          inSerial[0]=0x1a;
          inSerial[1]='\0';
          gsm.SimpleWriteln(inSerial);
        }
        //Send a saved AT command using serial port.
        if(!strcmp(inSerial,"TEST")){
          Serial.println("SIGNAL QUALITY");
          gsm.SimpleWriteln("AT+CSQ");
        }
        //Read last message saved.
        if(!strcmp(inSerial,"MSG")){
          Serial.println(msg);
        }
        else{
          Serial.println(inSerial);
          gsm.SimpleWriteln(inSerial);
        }  
        inSerial[0]='\0';
      }
    }

    void serialswread(){
      gsm.SimpleRead();
    }
    получил в Serial Monitor вот это:
    Безымянный 2.png
    Уже интереснее) (питание от 9В/1А)
     
  9. Romeo1

    Romeo1 Нуб

    Тот же самый скетч,только SIMкарта с инетом от МТС(до этого ставил Билайн,которая только принимает и отправляет СМС без интернета),и всё заработало:
    1)Принимает цифровые СМС(числа)
    2)Принимает Латиницу
    Кириллицу не хочет понимать,выдаёт десятичные коды в виде (A8 00 B3....и т п.
    От сюда вопрос:"Почему шилду нужен интернет?"
     
  10. Romeo1

    Romeo1 Нуб

    Скетч из примера GSM_GPRSLibrary_AT работает,но вот этот
    Код (C):
    #include <SoftwareSerial.h>
     
    SoftwareSerial gprsSerial(7, 8);
     
    //для зелёного светодиода будем использовать второй цифровой вход,
    //а для жёлтого - третий
    int greenPin = 2;
    int yellowPin = 3;
     
    void setup()
    {
        gprsSerial.begin(19200);
        pinMode(greenPin, OUTPUT);
        pinMode(yellowPin, OUTPUT);
     
        // Настраиваем приём сообщений с других устройств
        // Между командами даём время на их обработку
        gprsSerial.print("AT+CMGF=1\r");
        delay(300);
        gprsSerial.print("AT+IFC=1, 1\r");
        delay(300);
        gprsSerial.print("AT+CPBS=\"SM\"\r");
        delay(300);
        gprsSerial.print("AT+CNMI=1,2,2,1,0\r");
        delay(500);
    }
     
    String currStr = "";
    // Переменная принимает значение True, если текущая строка является сообщением
    boolean isStringMessage = false;
     
    void loop()
    {
        if (!gprsSerial.available())
            return;
     
        char currSymb = gprsSerial.read(); 
        if ('\r' == currSymb) {
            if (isStringMessage) {
                //если текущая строка - SMS-сообщение,
                //отреагируем на него соответствующим образом
                if (!currStr.compareTo("Green on")) {
                    digitalWrite(greenPin, HIGH);
                } else if (!currStr.compareTo("Green off")) {
                    digitalWrite(greenPin, LOW);
                } else if (!currStr.compareTo("Yellow on")) {
                    digitalWrite(yellowPin, HIGH);
                } else if (!currStr.compareTo("Yellow off")) {
                    digitalWrite(yellowPin, LOW);
                }
                isStringMessage = false;
            } else {
                if (currStr.startsWith("+CMT")) {
                    //если текущая строка начинается с "+CMT",
                    //то следующая строка является сообщением
                    isStringMessage = true;
                }
            }
            currStr = "";
        } else if ('\n' != currSymb) {
            currStr += String(currSymb);
        }
    }
    не хочет,не могли бы подсказать где копать?У меня есть подозрение,что дело во 2-ой строчке:SoftwareSerial gprsSerial(7, 8);
     
  11. nailxx

    nailxx Официальный Нерд Администратор

    А джамперы как стоят? Если в положении аппаратного serial, нужно заменить:

    SoftwareSerial gprsSerial(7, 8);

    на

    HardwareSerial& gprsSerial = Serial;
     
  12. Cергей

    Cергей Нуб

    у меня такая же проблема как и у Romeo1(GSM Shield такой же, прада говоря я хотел чтоб он у меня работал от 5В((.. ), оба джампера установлены в SW (SoftWare).. был бы очень признателен за решение этой проблемы.
    И еще вопрос: как сделать так чтоб шилд отвечал смс-кой на номер последнего, входящего на него, смс? вкратце: как написать определитель номера и как этот определенный номер вписать в место где задаются параметры отправки смс ( "AT + CMGS = \"+380хххххххх\"") )
     
  13. Romeo1

    Romeo1 Нуб

    Плюнул на всё,и купил v2 на Амперке вот этот http://amperka.ru/product/arduino-gprs-shield
    Всё работает на AT команды откликается,а вот последний пример не работает(((
    #include <SoftwareSerial.h>

    SoftwareSerial gprsSerial(7, 8);

    //для зелёного светодиода будем использовать второй цифровой вход,
    //а для жёлтого - третий
    int greenPin = 2;
    int yellowPin = 3;

    void setup()
    {
    gprsSerial.begin(19200);
    pinMode(greenPin, OUTPUT);
    pinMode(yellowPin, OUTPUT);

    // Настраиваем приём сообщений с других устройств
    // Между командами даём время на их обработку
    gprsSerial.print("AT+CMGF=1\r");
    delay(300);
    gprsSerial.print("AT+IFC=1, 1\r");
    delay(300);
    gprsSerial.print("AT+CPBS=\"SM\"\r");
    delay(300);
    gprsSerial.print("AT+CNMI=1,2,2,1,0\r");
    delay(500);
    }

    String currStr = "";
    // Переменная принимает значение True, если текущая строка является сообщением
    boolean isStringMessage = false;

    void loop()
    {
    if (!gprsSerial.available())
    return;

    char currSymb = gprsSerial.read();
    if ('\r' == currSymb) {
    if (isStringMessage) {
    //если текущая строка - SMS-сообщение,
    //отреагируем на него соответствующим образом
    if (!currStr.compareTo("Green on")) {
    digitalWrite(greenPin, HIGH);
    } else if (!currStr.compareTo("Green off")) {
    digitalWrite(greenPin, LOW);
    } else if (!currStr.compareTo("Yellow on")) {
    digitalWrite(yellowPin, HIGH);
    } else if (!currStr.compareTo("Yellow off")) {
    digitalWrite(yellowPin, LOW);
    }
    isStringMessage = false;
    } else {
    if (currStr.startsWith("+CMT")) {
    //если текущая строка начинается с "+CMT",
    //то следующая строка является сообщением
    isStringMessage = true;
    }
    }
    currStr = "";
    } else if ('\n' != currSymb) {
    currStr += String(currSymb);
    }
    }
    Такое впечатление,что "Green on,Yellow on" шилд просто не понимает,потому как предыдущие примеры работают,а этот никак(,а мне как раз надо отсылая СМСку включать ,и выключать,спрашивать температуру ну и т д
     
  14. Romeo1

    Romeo1 Нуб

    почему не работает этот код?:
    Код (Text):
    #include "SIM900.h"
    #include <SoftwareSerial.h>
    SoftwareSerial gprsSerial(7, 8);


    #include "sms.h"
    SMSGSM sms;



    int numdata;
    boolean started=false;
    char smsbuffer[160];
    char n[20];

    void setup()
    {
      pinMode(13, OUTPUT);
      digitalWrite(13, LOW);

      Serial.begin(9600);
      Serial.println("GSM Shield testing.");

      if (gsm.begin(2400)){
        Serial.println("\nstatus=READY");
        started=true;
      }
      else Serial.println("\nstatus=IDLE");

      if(started){

      }

    };

    void loop()
    {
      if(started){

        if(gsm.readSMS(smsbuffer, 160, n, 20))
        {
     
          delay(1000);
          if (smsbuffer == "a") digitalWrite(13, HIGH);//если отправляем "a" то зажигаем 13 светодиод
          else {
            digitalWrite(13, LOW);
          }
        }
        delay(1000);
      }
    };
    он компилируется,но поморгать светодиодом не удаётся,купил новый gsmshild v.2 ,такая же история(((,чего делаю не так?
     
    Последнее редактирование: 22 ноя 2014
  15. cheloveki

    cheloveki Нуб

    Тем у кого такие же проблемы. Ответ: ищите нужные библиотеки. Ибо даже на сайтах где продают, не всегда они свежие.
     
  16. MDV

    MDV Гик

    выставите одну скорость как для модема так и для порта, второе попробуйте управлять не буквами а цифрами.
     
  17. MDV

    MDV Гик

    и еще после прочтения нового СМС желательно стереть их.