Probando una conexión a un socket TCP a través del módulo celular SIM5320A

1

Estoy usando un módulo SIMCOM 5320A como este para intentar establecer una conexión TCP.

Estoyrevisando nota de aplicación de SIMCOM en TCP / IP como referencia.

Los comandos AT que estoy usando pueden muy bien estar funcionando, pero no estoy seguro de cuál sea la mejor manera de verificar esto. Más tarde, planeo construir sobre esta conexión TCP para agregar una conexión de protocolo MQTT a los servidores AWS de Amazon para IoT. Pero me gusta hacer "pruebas de unidad" más pequeñas y construir mi camino, así que cuando llego al MQTT y no funciona, sé que mi base TCP no es el problema.

Creo que mis pasos preliminares para esto están funcionando bien (registro a GPRS, conexión a través de APN, establecimiento de contexto PDP, conexión de red abierta, socket TCP abierto). Al menos, parece que me están dando los valores de retorno esperados del comando AT que indican que están bien. Es desde ese punto donde tengo mis dudas.

Actualmente, lo que estoy haciendo es conectarse a un servidor web (sucede que está usando la dirección IP de Adafruit) y le envío un mensaje simple, como:

AT+CIPSEND=0,5   // send 5 chars to link 0
> HELLO
OK

Cuando envío el comando para ver enviado / recibido, informa que se enviaron 5 caracteres, se recibieron 0. No creo que el servidor de Adafruit esté configurado para hacer nada en respuesta a mis datos enviados, como si no estuviera haciendo una solicitud HTTP GET o algo así, así que no hace nada. Así que, de nuevo, podría estar funcionando, pero no lo sé.

Pensé que la mejor manera de probar esto podría ser un servidor de eco. Busqué por un buen tiempo tratando de encontrar servidores de eco gratuitos en línea a los que pudiera conectarme, quienes simplemente enviarían de vuelta mi "HOLA" con toda cortesía. Hay todo un protocolo UNIX para esto, pero parece que está obsoleto.

Luego intenté configurar un servidor de eco local en mi PC y conectarme a eso. Creo que lo configuré correctamente, porque cuando ejecuté un servidor y también un cliente (en la misma máquina, conectado a la dirección IP localhost ), obtuve ecos en ambos terminales. Pero cuando intenté conectarme a él desde mi módulo SIMCOM, no pude establecer ninguna conexión. Me metí con la configuración del firewall para siempre, y probablemente abrí todos los puertos a los hackers en el proceso, pero no a los dados.

Estoy un poco fuera de mi experiencia con estas cosas de Internet (más de un circuito / integrador), así que espero que alguien pueda ayudarme a orientarme en la dirección correcta.

Finalmente, hay dos preguntas similares a esto en Stack Exchange, pero estoy teniendo problemas para contactar a esos tipos para ver cómo habían configurado sus pruebas.
¿Es posible enviar comandos AT a través de TCP? ?
¿Cómo Puedo enviar datos a través de TCP desde un SIM5320A?

Básicamente, solo quiero conectarme a un socket TCP en modo transparente (modo vs. datos), enviar algunos datos de una manera, y leer algunos datos con éxito, luego cerrar la conexión. Cualquier ayuda muy apreciada.

    
pregunta Joel Wigton

2 respuestas

1

La forma más fácil de obtener una respuesta de un servidor es hacer una solicitud HEAD.

Por ejemplo, abra un socket para www.stackexchange.com puerto 80

Luego envía:

HEAD /about HTTP/1.1
Host: www.stackexchange.com
(blank line)

Debería obtener una respuesta, pero solo los encabezados, no toda la página.

Algo como:

HTTP/1.1 200 OK
Date: Tue, 31 Oct 2016 22:44:11 GMT
Server: Apache

etc.

He usado esto solo para desconectar la hora actual de la red.

    
respondido por el tcrosley
0

Recomendaría probar el modo no transparente primero para ver si todo está configurado. Puedes probar con arduino.cc/asciilogo.txt .

  • Primero, conéctese usando CIPOPEN al puerto 80 de arduino.cc usando la dirección IP que obtiene de ping en Windows. El módulo también tiene un comando para resolver nombres a direcciones.
  • Para OBTENER el contenido del archivo txt, la solicitud HTTP debe tener este aspecto:

    GET /asciilogo.txt HTTP/1.1\r\nHost: arduino.cc\r\n\r\n
    

    La longitud total es 49. Por lo tanto, su próximo comando debe ser: AT+CIPSEND=0,49 .

  • Lo importante ahora es enviar los datos al módulo. Tienes que asegurarte de que es esta solicitud exacta la que se envía; un carácter menor o mayor, y no obtienes nada o Bad Request . Haga que el programa de monitoreo en serie trabaje para usted aquí. No tengo RealTerm, así que no puedo decir exactamente cómo hacerlo allí, aunque es de suponer que tiene alguna opción para agregar CRLF a los comandos. Si tiene el IDE de Arduino, con su monitor serie configurado en BOTH NL & CR , puede enviar la solicitud pieza por pieza. Básicamente es: escriba GET /asciilogo.txt HTTP/1.1 , Enter, escriba Host: arduino.cc , presione Enter dos veces. No se necesita Ctrl+Z .

Si todo salió bien, debería ver esto en su pantalla.

    
respondido por el TisteAndii

Lea otras preguntas en las etiquetas