Respuesta comandos AT sim900 (SOLUCIONADO)

Hola a todos!!

He estado probando distintos módulos GPRS para arduino y nunca he tenido problemas. Hace poco que empecé a trastear con los sim900 y van perfectamente emitiendo vía SMS o GPRS.

Pero me ocurre una cosa curiosa, cargo los códigos vía SoftwareSerial y todo va ok llama envía a un servidor... TODO ok el problema está a la hora de recibir los comandos AT que no soy capáz de recibirlos. ¿ A alguien le ha ocurrido esto de no poder recibir los comandos AT conectado el módulo a un TTL o a un arduino sin micro como es mi caso?

Es como si viniera la respuesta desactivada de fábrica.

A ver si a alguien le ha ocurrido lo mismo.

Saludos!!!

Yo tuve algunos problemas de comunicación con un módulo GSM900, y al final los solucioné conectándolo por serial normal, en vez de software serial.

Muchas gracias por contestar. Lo curiosos es que por software serial funciona perfectamente. Y cuando lo pongo por el puerto 0,1 al arduino sin micro para ver la respuesta de los comandos AT no van, no hay respuesta. Con otras placas como las hilo de sagem si que hay respuesta. Es muy raro, como si estubieran desactivadas. Funcionar funciona pero no sacan los comandos. Saludos

A mi lo que se me ocurre es que sea defectuoso...

lo pensé al principio, así que compré otra placa distinta con el mismo chip.

A ver si consigo resetearlo de alguna foma.

Saludos.

Y en la otea placa, ¿tampoco funciona? porque yo tengo una placa con SIM900 y me ha respondido siempre a los comandos AT.

Hola tolomocho,

Seria bueno si puedes indicar cual modem con SIM900 estas usando. Es la placa original de Arduino (Italia)? o es de otro fabricante? Te lo pregunto porque algunos fabricantes (como Arduino) comunican el modem via puerto TTL (0-5VDC) con lo que puedes conectarlo directamente a la placa Arduino, en cambio otros fabricantes comunican el modem via puerto RS-232 (approx. +/- 7.5VDC) con lo que necesitas usar un chip o placa MAX232 para convertir de RS-232 a TTL y poder asi conectarlo a la placa Arduino.

Para probar la comunicacion con el modem SIM900 acostumbro a usar un codigo llamado “puente” que permite enviar directamente comandos AT a la SIM900 desde la interfaz Arduino IDE (o cualquier otro monitor serial como Hyperterminal). EL codigo funciona ya sea usando la libreria SoftwareSerial o la funcion SerialX.xxx. Por si te interesa, aqui te dejo dos ejemplos del codigo “puente”. El primero para el Arduino UNO (usando SoftwareSerial) y el segundo para Arduino Mega (usando el puerto serial 2). Debes tambien asegurarte de configurar la rata de baudios que por defecto especifica el fabricante (a veces es 19200. Otas veces 115200). Tambien, a veces algunas placas con SIM900 tambien requieren que se le active pulsando un boton.

Una vez conectada la placa arduino con el SIM900, luego de unos segundos tecleas AT [enter] y el modem deberia responder con OK (creo de antemano que todo esto ya lo sabes).

Finalmente, en referencia a recibir comandos AT, en lo personal acostumbro a usarlos para interrogar (enviar). No entiendo cuando dices “recibir comandos AT”. Supongo que te refieres a recibir respuesta a los comandos AT. Como sea te deseo suerte.

p

Codigo puente para Arduino UNO:

#include <SoftwareSerial.h>
 
SoftwareSerial GPRS(7, 8); // pin 7 es para transmitir (TX) y el pin 8 es para recibir (RX)
unsigned char buffer[64]; 
int count=0;
void setup()
{
  GPRS.begin(19200);
  Serial.begin(19200); 
}
 
void loop()
{
  if (GPRS.available())
  {
    while(GPRS.available())
    {
      buffer[count++]=GPRS.read();
      if(count == 64)break;
  }
    Serial.write(buffer,count);  
    clearBufferArray();          
    count = 0;                   
  }
  if (Serial.available())     
    GPRS.write(Serial.read()); 
}
void clearBufferArray() 
{
  for (int i=0; i<count;i++)
    { buffer[i]=NULL;}  
}

Codigo puente para Arduino MEGA:

unsigned char buffer[64];
int count=0;   
void setup()
{
  Serial2.begin(115200);    
  Serial.begin(9600);     
 
}
 
void loop()
{
  if (Serial2.available())       
  {
    while(Serial2.available())      
    {
      buffer[count++]=Serial2.read();  
      if(count == 64)break;
  }
    Serial.write(buffer,count);     
    clearBufferArray();            
    count = 0;                     
 
 
  }
  if (Serial.available())  
    Serial2.write(Serial.read());   
}
void clearBufferArray()          
{
  for (int i=0; i<count;i++)
    { buffer[i]=NULL;}            
}

Muchas gracias por contestar carmeloco y Palliser

Os respondo a los dos:

Estas son las dos placas:

http://i.ebayimg.com/00/s/NzAwWDcwMA==/z/DwQAAOxyLm9TDvef/$_35.JPG

http://i.ebayimg.com/00/s/MTE5OVgxNTAw/z/JJ4AAOxyyvRSMkw0/$(KGrHqZ,!oIFIq4QnbBVBSMkw0Uj0!~~60_35.JPG

Tengo varias placas MEGA y UNO con las que he probado, originales y chinas.

Lo que he estado haciendo es lo siguiente pongo las sim900 con los jumpers en su opción SoftwareSerial puertos 7,8 o 2,3 dependiendo de la placa, copio cualquier código de internet lo cargo a una MEGA le pincho la placa y funciona TODO OK recibo SMS, llama al movil, hace peticiones HTML, pero nunca veo la respuesta por el monitor serial se que lo hace porque lógicamente me llegan los SMS al móvil y las peticiones las veo por el servidor.

El error me vino cuando intenté ver las respuestas de la sim900 como ver lo que sale del HTTPREAD o intentar leer un SMS, intentaba leer desde el código compilado como los códigos que me ha mandado Palliser(GPRS.read() etc...). Y veo que no leo nada.

Así que cambio los puertos de las dos placas sim900 a su posición de puertos 0,1 y la pincho a una UNO que tengo sin microcontrolador para probar si tengo la típica respuesta OK a los comandos AT (como siempre hago con otras placas como las Hilo o zigbee) y aquí es cuando no recibo nada de nada, probando con todos los baudios posibles..Nada no responde nada con retorno de carro y salto de linea, sin ellos, de todo.

Así que no tengo ni idea de que es lo que ocurre, creo que debe ser que tienen desactivada su respuesta el OK de fábrica o los chinos le han puesto su firmware, la placa funciona pero no emite sus comandos AT de respuesta el OK y demás.

¿Qué raro no? Con la Hilo hago lo mismo la pongo por los puertos 0,1 y veo todas sus respuestas.

Saludos a los dos.

Te aconsejo que vayas a la página de SoftwareSerial y comentes el problema.

Creo que no es un problema de softserial, ya que con el serial físico, tampoco le funciona.

Lo curioso es que por software serial funciona perfectamente. Y cuando lo pongo por el puerto 0,1 al arduino sin micro para ver la respuesta de los comandos AT no van, no hay respuesta.

por eso dije eso @carmeloco Entiendo que habla de Serial normal no por la librería SoftwareSerial. Comprendo que cuando usa SoftwareSerial no recibe las respuestas a los comandos AT. Es así o no es asi?

Hola y gracias a todos.

Creo que no es problema de las librerías SoftwareSerial porque si que puedo recibir datos de otras placas como zigbee y la GPRS de Sagem.

La cuestión es que sí que puedo mandarle información pero no recibo nada.

He intentado resetearla con los valores de fábrica con los comandos AT&F pero no he tenido suerte, sigue igual.

Como si la respuesta estuviera desactivada.

Me queda la prueba de conectarlo por un puerto que tiene la placa RS232 lateral y probar por ahí a ver si tengo respuesta.

A ver si tiene alguna parte de la placa dañada. A mi me pasó con la mía, que tuve que re-soldar un componente porque dejó de funcionar un led.

Aca tu problema en detalle.

SIM900 AT Commands no response

Depués de muchos meses, al final he tenido tiempo para poder volver a enredar con estas placas.

Al final tenía el problema de que estas SIM900 no funcionan con los baudios automáticos.

Poniendo este comando AT+IPR=19200 y fijando los baudios mediante comando AT funciona perfectamente y se reciben todos los comandos.

No se porqué sin este comando a la gente le funciona y no hay muchos códigos que lo ponen, para mí ha sido esencial

Saludos y muchas gracias a todos los que me contestaron en su día.

Bien, me alegro que encontraras la solución y que lo compartas. Edita el título y ponle SOLUCIONADO