Enviar SMS con Arduino Uno y Sim900 v.3.8.2

Hola a todos.
Luego de resolver un problema de hardware con ayuda del foro, era que no sabía como conectar el módulo sim al arduino.
Ahora ya funcionando, no consigo enviar un sms.Adjunto .jpg con el monitor serial.
Todo lo hace bien con excepción del sms.
Me pueden decir donde està el error???, Gracias.
Daniel(Apaserv)

El sketch es el siguiente:

#include <SoftwareSerial.h>
#include <string.h>

   SoftwareSerial mySerial(2, 3);
   volatile int i=1;
   volatile int rep;
   volatile char a;
void setup()
{
  Serial.begin(9600);
  mySerial.begin(9600);
  delay(300);
  Serial.write("INICIO DEL TEST  \r\n");
  mySerial.print("AT\r\n");
  delay(200);
  Resp();
  mySerial.print("ATI\r\n");
  delay(200);
  Resp();
  mySerial.print("AT+CGMI\r\n");
  delay(200);
  Resp();
  Serial.write("OPERADOR\r\n");
  mySerial.print("AT+COPS?\r\n");
  delay(200);
   Resp();
  Serial.write("IMEI\r\n");
  mySerial.print("AT+CGSN\r\n");
  delay(300);
   Resp();
  Serial.write("MODO SMS\r\n");
  mySerial.print("AT+CMGF=1\r\n");
    delay(300);
   Resp();
  Serial.write("ENVIO AL MOVIL\r\n");
  mySerial.print("AT+CMGS=");
  delay(300);
  mySerial.print("+34615075326\r\n");
  
  Serial.write("TEXTO DEL SMS\r\n");
  mySerial.print("MENSAJE DE PRUEBA ");
  delay(200);
  
  Resp();
 mySerial.write("26");
  Resp();
   
 }

void loop()
{
}   


void Resp()
{
for(rep=0;rep<40;rep++)
  {
    if(mySerial.available())
    Serial.write(mySerial.read());
  }
}
[code]

si tiene codigo pin la tarjeta sim no lo enviara, introducelo y funcionara

Hola , la sim no tiene pin.
Hay que poner AT+CPIN="" ???
Gracias

ya hice la prueba, no funciona como dije antes.
Que me queda hacer??
Es que el proyecto es leer datos de un puerto serial y enviarlos a un host.
Pero si no puedo enviar un sms , no se si podre el resto.
Que opinas??
Gracias
Daniel

tu al final del sketch tienes:

mySerial.write("26");
cambialo por mySerial.write(char(26));
y el delay anterior a este lo pones a delay(1000);

tambien en el comando CMGS lo cambias por:

.println("AT + CMGS = "+34xxxxxxxxx"");//enviar mensaje al telefono, con numero de pais

Hola, asi quedo con tus indicaciones

Serial.println("MODO SMS\r\n");
mySerial.print("AT+CMGF=1\r\n");
delay(300);
Resp();
Serial.write("ENVIO AL MOVIL\r\n");
mySerial.println("AT + CMGS = "+34615075326"");
Serial.write("TEXTO DEL SMS\r\n");
mySerial.print("MENSAJE DE PRUEBA ");
delay(1000);
mySerial.write(char(26));
Resp();

Al correr el sketch luego de MENSAJE DE PRUEBA sale un signo > y ahi se queda.

Adjunto MONITOR SERIAL.JPG
Gracias, a ver que hice mal o que falta, no se.

En el monitor serial se ve que cuando hace "AT+COPS?" responde 0.
Tendrá algo que ver?? la sim es de Movistar , no tiene PIN y en un teléfono si manda SMS.
Voy a probar con otra de Orange que si tiene PIN y mando sms sin problema.

Bueno ya hice la prueba:
"AT+CPIN=4210" responde OK, pero hace lo mismo que con la otra se queda en el simbolo >

Otra prueba:

 Serial.println("MODO SMS\r\n");
   mySerial.print("AT+CMGF=1\r\n");
   delay(300);
   Resp();
   Serial.write("ENVIO NUM. MOVIL Y TEXTO\r\n");
   mySerial.println("AT + CMGS = \"+34615075326\"");
  // mySerial.println("AT + CMGS = \"+34616683861\"");

delay(500); 
 
   mySerial.print("MENSAJE DE PRUEBA ");
   delay(1000);
   mySerial.write(char(26)); 

delay(500);
 
   Resp();
   
   Serial.write("\r\n            FIN DEL TEST\r\n");
}
[code]

Con estos 2 delay(500);
conseguÍ que muestre después del > MENSAJE DE PRUEBA

y la respuesta es ERROR, VER .JPG

haz este skect que es el mio a ver si te sale

#include <SoftwareSerial.h>

SoftwareSerial modemGPRS(2, 3); //rx y tx en la shield no en el arduino
#define POWER 9
void setup()
{
  modemGPRS.begin(19200);                  
  Serial.begin(19200);
  
  pinMode(POWER,OUTPUT);
  digitalWrite(POWER,HIGH);
  delay(1000);
  digitalWrite(POWER,LOW);
  delay(5000);
  
  modemGPRS.println("AT+CPIN=xxxx");  //el pin de la sim
  delay(30000);
  
  modemGPRS.println("AT+CREG=?");  //registrar network( la red)
  delay(100);
  ShowSerialData();
  
  
}

void loop()
{
  SendTextMessage();
  do{} while(1);
  
  //if (modemGPRS.available())
  //Serial.write(modemGPRS.read());

}

/*void DialVoiceCall()
{
  modemGPRS.println("ATD + +34xxxxxxxxx;");//el numero de tlf con el 34 de españa
  delay(100);
  modemGPRS.println();
}*/

void ShowSerialData()
{
  while(modemGPRS.available()!=0)
    Serial.write(modemGPRS.read());
}

void SendTextMessage()
{
  modemGPRS.print("AT+CMGF=1\r");    //habilita sms en modo texto
  delay(100);
  modemGPRS.println("AT + CMGS = \"+34xxxxxxxxx\"");//enviar mensaje al telefono, con numero de pais
  delay(100);
  modemGPRS.println("Mensaje desde arduino");//este es el mensaje
  delay(100);
  modemGPRS.println((char)26);  //fin de mensaje con ASCII es ctrl+z es 26
  delay(100);
  modemGPRS.println();
}

Hola, con el sketch tal cual lo enviaste no hace nada.
Hice la siguiente modificación, la SIM no tiene PIN :

  #include <SoftwareSerial.h>

SoftwareSerial modemGPRS(2, 3); //rx y tx en la shield no en el arduino
#define POWER 9
void setup()
{
  modemGPRS.begin(9600);                  
  Serial.begin(9600);
  
  pinMode(POWER,OUTPUT);
  digitalWrite(POWER,HIGH);
  delay(1000);
  digitalWrite(POWER,LOW);
  //delay(5000);
  
  modemGPRS.println("AT");  //el pin de la sim
  delay(300);
  ShowSerialData();
  delay(300);
  modemGPRS.println("AT+CREG=?");  //registrar network( la red)
  delay(1000);
  ShowSerialData();
  delay(300);
  
}

void loop()
{
  SendTextMessage();
  do{} while(1);
  
  //if (modemGPRS.available())
  //Serial.write(modemGPRS.read());

}

/*void DialVoiceCall()
{
  modemGPRS.println("ATD + +34xxxxxxxxx;");//el numero de tlf con el 34 de españa
  delay(100);
  modemGPRS.println();
}*/

void ShowSerialData()
{
  while(modemGPRS.available()!=0)
    Serial.write(modemGPRS.read());
}

void SendTextMessage()
{
  modemGPRS.print("AT+CMGF=1\r");    //habilita sms en modo texto
  delay(300);
  ShowSerialData();
  delay(300);
  modemGPRS.println("AT + CMGS = \"+34615075326\"");//enviar mensaje al telefono, con numero de pais
  delay(300);
  ShowSerialData();
  delay(300);
  modemGPRS.println("Mensaje desde arduino");//este es el mensaje
  delay(300);
  modemGPRS.println((char)26);  //fin de mensaje con ASCII es ctrl+z es 26
  delay(500);
  ShowSerialData();
  delay(300);
  modemGPRS.println();
}  

[code]

y obtuve lo siguiente en el monitor:
[code]
AT

OK
AT-CREG=?

+CREG: (0-2)
OK

AT+CMGF=1

OK

AT+CMGS= "+34615075326"

> Mensaje desde arduino

>
ERROR
[code]

No entiendo, con otro sketch con AT+COPS? responde +COPS: 0 , con AT+CSQ responde +CSQ: 27,0
Te dice algo esto???
Gracias
Daniel

apaserv, Lee las normas, usa etiquetas para insertar códigos </>
Por favor, edita los post anteriores, que no cuesta tanto.

Te he enviado mensajes privados y no respondes.

Gracias.

Hola, a ver si ahora lo hago como debe ser.

Con el sketch que me enviaste no consigo nada en el monitor serial a 19200.
Hice algunas modificaciones y conseguì resutados en el monitor serial.

Cambie a 9200 y agregue delays y lecturas del modulo.
Así quedo:

[code]
#include <SoftwareSerial.h>

SoftwareSerial modemGPRS(2, 3); //rx y tx en la shield no en el arduino
#define POWER 9
void setup()
{
  modemGPRS.begin(9600);                  
  Serial.begin(9600);
  
  pinMode(POWER,OUTPUT);
  digitalWrite(POWER,HIGH);
  delay(1000);
  digitalWrite(POWER,LOW);
  
  
  modemGPRS.println("AT");  //el pin de la sim
  delay(300);
  ShowSerialData();
  delay(300);
  modemGPRS.println("AT+CREG=?");  //registrar network( la red)
  delay(1000);
  ShowSerialData();
  delay(300);
  
}

void loop()
{
  SendTextMessage();
  do{} while(1);
  
 
}



void ShowSerialData()
{
  while(modemGPRS.available()!=0)
    Serial.write(modemGPRS.read());
}

void SendTextMessage()
{
  modemGPRS.print("AT+CMGF=1\r");    //habilita sms en modo texto
  delay(300);
  ShowSerialData();
  delay(300);
  modemGPRS.println("AT + CMGS = \"+34615075326\"");//enviar mensaje al telefono, con numero de pais
  delay(300);
  ShowSerialData();
  delay(300);
  modemGPRS.println("Mensaje desde arduino");//este es el mensaje
  delay(300);
  modemGPRS.println((char)26);  //fin de mensaje con ASCII es ctrl+z es 26
  delay(500);
  ShowSerialData();
  delay(300);
  modemGPRS.println();
}

Obtuve lo siguiente en el monitor serial:

AT
OK

AT+CREG=?
+CREG:  (0-2)
OK

AT+CMGF=1
OK

AT+CMGS = "+34615075326"
> Mensaje desde arduino

>
ERROR

N0 consigo que envíe el mensaje

Mira a ver en los comandos AT si estas conectado a la red que tu tienes(que ahora no meacuerdo cual era el comando),

Revisa la configuracion de tu sim900

El mio funciona perfectamente,

Hola pincho41700, he revisado el comando AT+CREG=?
La respuesta es:
+CREG: (0-2)
OK

Según el manual es 0 DISABLE NETWORK REGISTRATION UNSOLICITED CODE RESULT.

2 not registered but MT is currently searching a new operator for register.

Intenté volver a la configuración de fábrica, aunque no cambié nada, pero responde solo OK.
El operador es MOVISTAR y la sim no tiene pin.
Cual es el módulo que estas utilizando?
Gracias por tu aporte.
Daniel(apaserv)

Haz un delay de unos 30 seg aproximadamente para que coja señal.
ponlo al principio del sketch

Hola pincho41700,
He echo lo que me indicaste, pero no cambio nada.
Leyendo y leyendo me econtré con lo siguiente:

AT + CPIN? responde + CPIN: PH-NET PIN

Leí que esto significa que el módulo no esta liberado, por eso no reconoce ningún operador

Envié la consulta a m2m@m2m-com.com pero hasta ahora no tuve respuesta.

A ver si tengo suerte y alguien sabe como hacerlo.
En los teléfonos que no están liberados el fabricante proporciona el código de liberación.
En este caso es la empresa fabricante del chip, pero si no responde, que hago?.

Bueno hasta la próxima.
Daniel(apaserv)

Si no esta liberalizado lo tienes que libelarizar, sino estas jodido.
Entonces el problema lo hemos encontrado, que no esta conectado a la red , no?

Hola, aparentemente es así, no esta liberado.
No entiendo como venden algo así y el fabricante no responda.
Voy a ver como resuelvo esto y publicaré la solución.
Espero que se pueda liberar.
Daniel(apaserv)

Hola pincho41700,
Mira la respuesta del soporte de SIMCOM:

m2m support  Agregar a contactos  24/09/2015   Conservar este mensaje en la parte superior de la bandeja de entrada  
Para: 'Daniel Alberto Aparicio García'
m2m@m2m-com.com
[color=red]I’m not sure, I only know that SIM900A is a Chinese domestic version, not was planned for EU market, that can be an issue[/color]

 

From: Daniel Alberto Aparicio García [mailto:apaserv@hotmail.com] 
Sent: Thursday, September 24, 2015 6:32 PM
To: m2m support <m2m@m2m-com.com>
Subject: RE: Query module SIM900

 

Hello Lazlo, have you any notice?

I have an other board with SIM900 (Gboard 1.0 by ITEAD), the same has 1137B01SIM900_64_ENHANCED and works OK.

 

The SIM900A V 3.8.2 MINI(I bought the board in ........) has 1137B03SIM900_64_ENHANCED , what is the diference?? 

 I expect your reponse

Best regards.

A ver que solución me da el proveedor .......(no se si estaría bien poner el nombre).
Un saludo

No te calientes la cabeza mas.
compra un SIM900 y se acaba el problema

http://es.aliexpress.com/store/product/SIM900-GSM-GPRS-shield-for-Arduino-IComSat-v1-1/117143_708865358.html?spm=2114.04020208.3.11.TAj9Cp&ws_ab_test=201556_6,201527_2_71_72_73_74_75,201409_2