¿Es posible enviar comandos AT a través de TCP?

Tengo un dispositivo SIM900 GSM/GPRS, puedo enviar comandos AT a través de HyperTerminal y todo está bien. Puedo configurar la conexión GPRS a través de comandos AT:

AT+CGATT=1
AT+CIPMUX=0
AT+CSTT="INTERNET","",""
AT+CIICR
AT+CIFSR
AT+CIPSTART="TCP","IP","PORT"

Con esta configuración, puedo hacer que se conecte a mi PC (usando el reenvío de puertos en el enrutador doméstico). Creé un servidor TCP en C# y el servidor aceptó la conexión TCP del dispositivo. Mi pregunta es, ¿es posible enviar comandos AT a través de TCP y ejecutarlos? El servidor envía comandos AT al dispositivo y se reciben como datos, no como comandos.

No parece sensato que un módem GSM acepte comandos AT de la red, ¡ya que sería un gran problema de seguridad! Podría hacer algo para que el módem esté cableado para recibirlos como datos y enviarlos de vuelta al módem como comandos, pero probablemente no en tiempo real, ya que hacerlo podría interrumpir la conexión de datos.
Creo que puede hacer esto, solo necesita procesar los paquetes TCP recibidos, extraer la cadena y enviarla a través del puerto serie a la velocidad de transmisión requerida a GSM.
@3bdalla ¿Puede ponerse en contacto conmigo con respecto a la SIM5320A? Tener un problema similar. Mi información de contacto en mi perfil. Gracias.
@JoelWigton Lo siento Joel, todo fue un proyecto para mi amigo y se abandonó hace más de un año.
@ 3bdalla Tenía preguntas sobre cómo probó con su servidor TCP, que no puedo hacer funcionar. Si puede ayudar, por favor contácteme. Planeo comenzar una publicación aquí, pero como lo hiciste directamente, pensé que podrías estar dispuesto a ayudarme a comenzar.
@ 3bdalla Vea mi pregunta aquí si recuerda algo sobre la configuración de su servidor TCP para la prueba. ¡Gracias! electronics.stackexchange.com/questions/266974/…

Respuestas (2)

Todos los módems GSM que conozco tienen dos modos: comando y datos. Y eso incluye el SIM900. El módem comienza en modo de comando, donde escucha los comandos AT, generalmente a través de una conexión UART en serie con un microcontrolador.

Los comandos AT siguen el modelo de los módems telefónicos Hayes de las décadas de 1980 y 1990. AT significa Atención. Se utilizan tanto para configurar los parámetros de la conexión como para iniciar la conexión en sí; en el caso del SIM900, esto se hace con el comando AT+CIPSTART. Si la conexión es exitosa, el módem responde CONECTAR OK y cambia al modo de datos.

En ese momento, se establece una conexión de datos binarios entre el módem GSM y un enchufe remoto. Los bytes se pueden enviar de un lado a otro de forma transparente. El módem solo se puede volver a cambiar al modo de comando si sucede cualquiera de las tres cosas: la secuencia de escape +++ (patentado por Hayes) se envía desde el microcontrolador local, o el cable DTR se apaga (solo si se ha desactivado). configurado para actuar de esta manera), o se interrumpe la conexión.

Solo en el primer caso (+++ secuencia de escape) la conexión aún se mantiene. Sin embargo, mientras el módem está en secuencia de comandos, ya no puede "ver" el otro extremo.

Entonces, lo que quería hacer, es decir, enviar comandos AT desde el otro extremo y hacer que el módem los ejecute, es imposible porque el módem solo escucha los comandos de su microcontrolador local y solo cuando está en modo comando. Incluso si enviara comandos AT a través del enlace en modo de datos, el módem GSM simplemente los reenviaría al microcontrolador al que está conectado.

Sería posible ejecutar indirectamente comandos AT desde el otro extremo con la ayuda del microcontrolador local. El otro extremo enviaría los comandos AT a través del enlace en modo de datos y el microcontrolador local los pondría en cola. El otro extremo necesitaría tener alguna forma de decirle al microcontrolador local cuándo se hizo y debería comenzar a ejecutar comandos. En ese momento, el microcontrolador enviaría la secuencia de escape +++ y luego enviaría los comandos AT en cola. Cuando terminara, volvería al modo de datos usando el comando ATO y tal vez enviaría los resultados de los comandos al otro extremo.

Esta es la respuesta correcta. +1 para pin DTR.

Bueno, esto no es directamente posible.

Es indirectamente, pero no recomendado. Puede recibir los comandos AT con interfaz TCP y luego reenviarlos al módem.

Esto es mucho trabajo por hacer, que no es necesario, y se considera un agujero de seguridad. Sería mejor enviar comandos de "nivel superior" a través de TCP, y luego el receptor emitirá los comandos AT correctos al módem.

¿Qué quiere decir con comandos de "nivel superior"?
Un comando como "perform_get('server-name')", que el microcontrolador recibirá y lo convertirá en los comandos AT apropiados en el UART. Además, este esquema mejora la portabilidad, ya que solo el microcontrolador necesita saber cómo funciona este módem específico.