Primeros pasos con el shield GPRS

He tenido bastantes quebraderos de cabeza para echar a andar el shield GPRS con en el Arduino Mega asi que voy a poner algunas indicaciones por si a alguien le pudieran ser de utilidad.

shield gsm

Se trata del modulo de ElectroFreacks efcom 1.2 adquirido en  DX. Lo primero que hice fue buscar una libreria para el IDE de Arduino y como la han publicado recientemente queria usar la version 1.6.

El primero problema fue que la version de la libreria que encontre en la documentacion del shield era muy antigua y no funcionaba correctamente en las versiones actuales del IDE de Arduino. La version mas actual de esta libreria mantenida por Marco Martines es esta:

https://github.com/MarcoMartines/GSM-GPRS-GPS-Shield

Una vez instalada la libreria debemos conectarla con la placa Arduino y hacer algunos ajustes en los ficheros.

Tal y como indicaba la placa en la que ira pinchado el shield es la Mega. La manera de conectar los pines para la comunicacion serie es el RX del shield con el pin 18 del Arduino y el TX con el 19 (fijarse en la imagen).

conexion mega efcom

Posteriormente debemos acudir al directorio donde tengamos la libreria y realizar las siguientes modificaciones:

vim GSM.h: (comentar la del UNO y descomentar la del MEGA)

 

vim HWSerial.h (descomentar la linea)

 

En este momento ya deberia compilar sin embargo al intentarlo se muestra un error similar a este:

La manera de solucionarlo es editar el archivo HWSerial.cpp y modificar la linea que se indica mas abajo:

Una vez hecho esto ya podremos compilar el sketch y enviarlo a la placa.

Para testear que todo es correcto conectaremos la placa (*) y pulsaremos el boton S_PWR durante algunos segundos para activarla (se encendera el led STA) y enviaremos el sketch.

Abriremos el terminal serie e introduciremos los siguientes comandos AT (muestra del dialogo con el comando que introduzco y la salida):

 

 

(*) El modulo SIM900 con el que cuenta el shield consume bastante asi que para evitar errores aleatorios que pueden volverte loco es recomendable proveer al conjunto con una fuente que pueda entregar al menos 1 amperio.

6 pensamientos en “Primeros pasos con el shield GPRS

  1. Marcio

    Como defino los pines de conexion al Arduino MEGA en mi codigo usando la SIM900 library?

    Vi este codigo en GSM.cpp:

    last modified 18/08/2012.

    This library is based on one developed by Arduino Labs
    and it is modified to preserve the compability
    with the Arduino’s product.

    The library is modified to use the GSM Shield,
    developed by http://www.open-electronics.org
    (http://www.open-electronics.org/arduino-gsm-shield/)
    and based on SIM900 chip,
    with the same commands of Arduino Shield,
    based on QuectelM10 chip.
    */

    #include “GSM.h”
    #include “WideTextFinder.h”

    //De-comment this two lines below if you have the
    //first version of GSM GPRS Shield
    //#define _GSM_TXPIN_ 4
    //#define _GSM_RXPIN_ 5

    //De-comment this two lines below if you have the
    //second version og GSM GPRS Shield
    #define _GSM_TXPIN_ 2
    #define _GSM_RXPIN_ 3

    Pero no estoy seguro porque yo no estoy usando un gsm shield, estoy usando lo que parece ser un breakout SIM900 como este:

    http://www.amazon.com/SainSmart-Small-GPRS-SIM900-Raspberry/dp/B00TEUAJMQ/ref=sr_1_2?ie=UTF8&qid=1432608975&sr=8-2&keywords=arduino+gsm

    Estoy recibiendo datos en el Serial Monitor pero no se como interpretarlos:
    +CLCC: 1,1,4,0,0,”+50494502578″,145,””
    OK
    RING
    +CLIP
    ATT: +CLCC: 1,1,4,0,0
    RIC:
    +CLCC: 1,1,4,0,0,”+50494502578″,145,””
    OK
    RING
    +CLIP
    ATTESO: +50494502578
    ATT: +CPBR
    RIC:
    +CLCC: 1,1,4,0,0,”+50494502578″,145,””
    OK
    ATT: +CPBR
    RIC:
    +CPBR: 2,”104″,129,”Educacion”
    OK
    CHIAMANTE +50494502578
    SALVATO 104
    ATT: +CPBR
    RIC:
    +CPBR: 3,”111″,129,”INHFA”

  2. kurtsik Autor

    Aupa Marcio.

    En la placa que enlazas te muestra cual es el pin RX y el TX, los conectas al Arduino y defines en el sketch donde lo has hecho.
    Ten la precaucion de conectarlos invertidos, es decir: RX con TX y TX con RX.

  3. Marcio

    Gracias Kurtsik.

    Es extrano pero me funciona sin definir los pines en software. Seguro es porque estoy usando el Rx/Tx1 en MEGA, que es un hardware pin para Rx/Tx ya definido.

    pd…no me llegan los emails que has respondido al comentario.

  4. Ciscoarg

    Hola Kurtsik como estas, mil disculpas que por ahí toco un tema que ya se consideraba resuelto pero la verdad es que no logro conectar el shield sim900 de la marca TinySine con el Arduino Mega.

    Les comento lo que hice a ver si me estoy equivocando en algo y no me doy cuenta:

    – Utilice la librería de Marco Martines: https://github.com/MarcoMartines/GSM-GPRS-GPS-Shield

    – A la misma le modifique los siguientes archivos:

    En el GSM.h comente la línea de Arduino UNO y deje la de MEGA

    Código: [Seleccionar]
    //#define UNO
    #define MEGA

    En el archivo HWSerial.h descomente el

    #define MEGA

    Y en GSM.cpp realicé los siguientes cambios:

    //#define _GSM_TXPIN_ 2
    //#define _GSM_RXPIN_ 3

    #define _GSM_TXPIN_ 50
    #define _GSM_RXPIN_ 18

    Luego conecte el Shield con el Arduino Mega haciendo un puente de la linea TX de la shield al pin 50 del MEGA y otro puente entre de la linea RX de la shield al pin 18 del MEGA

    Luego subo el programa al Arduino utilizando uno de los ejemplos que trae la librería (GSM_GPRSLibrary_Client) para enviar una variable por GET y recibir información de un sitio:

    #include “SIM900.h”
    #include
    #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(2400)) {
    Serial.println(“\nstatus=READY”);
    started=true;
    } 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();
    }

    Esta misma librería utilizandola con Arduino Uno me funcionaba perfectamente pero no logro que trabaje con el Mega.

    El programa se compila perfectamente pero cuando lo corro en el Monitor Serie de la forma que esta conectado (PIN 18 y 50) me indica el siguiente error:

    Código: [Seleccionar]
    GSM Shield testing.
    DB:NO RESP
    DB:NO RESP
    DB:NO RESP
    Trying to force the baud-rate to 9600

    1200
    2400
    4800
    9600
    19200
    38400
    57600
    115200
    ERROR: SIM900 doesn’t answer. Check power and serial pins in GSM.cpp

    status=IDLE

    En cambio, si conecto los pines Tx del Shield al 18 (Tx) del Mega y el Rx del Shield al 19 (Rx) del Mega es como que toma la lectura pero al final no conecta.
    De esta forma el Monitor Serie me arroja el siguiente resultado:

    GSM Shield testing.
    ATT: OK
    RIC: AT

    OK

    DB:ELSE
    ATT: OK
    RIC: AT

    OK

    DB:ELSE
    ATT: OK
    RIC: AT

    OK

    DB:ELSE
    ATT: OK
    RIC: AT

    OK

    DB:CORRECT BR
    ATT: OK
    RIC: AT

    OK

    ATT: OK
    RIC: AT&F

    OK

    ATT: OK
    RIC: ATE0

    OK

    ATT: OK
    RIC:
    OK

    ATT: OK
    RIC:
    OK

    ATT: OK
    RIC:
    OK

    ATT: OK
    RIC:
    OK

    ATT: +CPMS:
    RIC:
    +CPMS: 4,50,4,50,4,50

    OK

    ATT: OK
    RIC:
    OK

    ATT: SHUT OK
    RIC:
    SHUT OK

    status=READY
    ATT: ERROR
    RIC:
    ERROR

    DB:STARTING NEW CONNECTION
    ATT: SHUT OK
    RIC:
    SHUT OK

    DB:SHUTTED OK
    status=ERROR

    OK

    ERROR
    ATT: OK
    RIC:
    ERROR

    DB:NOT CONN
    ATT: OK
    RIC:
    ERROR

    DB:NOT CONN
    ATT: OK
    RIC:
    ERROR

    DB:NOT CONN

    Number of data received:
    0

    Data received:

    Si lo conecto de cualquier otra forma el error sigue siendo el primero, es como que no me reconociera cuando re defino los pines en el archivo GSM.cpp

    Tal vez debo modificar algun otro archivo para el uso de envío de datos por GPRS? Que opinan?

  5. kurtsik Autor

    Aupa Ciscoarg.

    Esta tarde le echo una mirada a ver si te puedo decir algo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *