No hay comunicación con SIM900A usando Arduino Uno

0

Estoy usando Arduino Uno e intento conectarme a un módulo GSM SIM900A mediante comunicación en serie. No estoy recibiendo nada del módulo en absoluto. El módulo se enciende y tiene otro LED parpadeando a 800ms

He conectado lo siguiente

  • 5V desde Arduino a la entrada de alimentación de 5V en GSM

  • GND de Arduino a la entrada de la fuente de alimentación GND en GSM

  • Pin 2 (Rx) de Arduino a Tx serial en GSM

  • Pin 3 (Tx) de Arduino a Rx serial en GSM

  • GND de Arduino a GND serial en GSM

Esquema de la tabla de ruptura de esta página .

HeprobadotantoelcomandoserialincorporadodeArduinocomoelsoftwareserialusandolospines2y3.

PuedeencontrarinformaciónsobreSIM900 aquí .

Elcódigoqueestoyejecutandoactualmente,utilizandoelsoftwareserie:

#include<SoftwareSerial.h>SoftwareSerialmySerial(2,3);constintbaud=9600;voidsetup(){mySerial.begin(baud);Serial.begin(baud);while(mySerial.available()<0){mySerial.write("AT");
    delay(2000);
  }
}

void loop() {
  if (mySerial.available() > 0) {
    Serial.write(mySerial.read());
  }
}

También he probado diferentes velocidades de transmisión, pero aún no he recibido nada del módulo.

    
pregunta mrkæp

3 respuestas

2

Un problema que puedo ver en su código es la siguiente línea:

while (mySerial.available() < 0) {

El método available () devuelve el número de caracteres disponibles y nunca será negativo, por lo que significa que El comando AT nunca se transmitirá, de hecho su código principal probablemente no se está iniciando. Además, no está terminando el comando con un retorno de carro, así que intente el siguiente código:

while (mySerial.available() == 0) {
  mySerial.println("AT");
  delay(2000);
}

A menudo, cuando juego con un nuevo módulo GSM, me parece más conveniente poder escribir cosas desde una PC para verificar el funcionamiento, así que para empezar, podría usar algo como esto para pasar datos:

void loop() {
  if (mySerial.available() > 0)
    Serial.write(mySerial.read());
  if (Serial.available() > 0)
    mySerial.write(Serial.read());
}

Recientemente utilicé una placa muy similar con una tarjeta SIM900 cargada que no tenía mucha documentación y, mientras buscaba, encontré que algunas tablas Arduino están configuradas para baudios automáticos y otras están fijas en 19200, por lo que utilizo un La velocidad en baudios de 19200 que debería funcionar en ambos sentidos podría ser su mejor punto de partida.

    
respondido por el PeterJ
0

Potencia. ¿Tiene la potencia adecuada para su módulo SIM900? Algunos escudos usarán más corriente de la que Arduino puede suministrar (hasta 2A), por lo que es posible que necesite un suministro externo de alta corriente.

enlace

    
respondido por el suxing
0

¿Está enviando solo un comando AT y está esperando una respuesta? Si el módulo está en modo de suspensión (AT + CSCLK = 1, AT + CSCLK = 2), es posible que su módulo considere el primer comando AT como llamada de activación y comience a responder el siguiente comando AT. Envíe al menos dos comandos para asegurarse de que el módulo no responde.

Y si el módulo está en modo Automático en baudios (AT + IPR = 0), establecerá su velocidad en baudios según el primer comando que se le haya dado. Así que siempre el primer comando dado al módulo siempre debe estar en mayúsculas.

Hay una serie de razones por las que el módulo podría no responder. Será una buena idea tratar de comunicarse con el módulo a través de un software de terminal de puerto serie en lugar de intentar depurar directamente conectado a Arduino. Allí puede ver qué hace exactamente el módulo. Si ve alguna respuesta del módulo en el terminal, es posible que haya algún problema en el lado de Arduino.

Recientemente escribí un artículo en él, si quieres para comprobar que funciona.

    
respondido por el Ravi Pujar

Lea otras preguntas en las etiquetas