Estoy usando un módulo SIMCOM 5320A como este para intentar establecer una conexión TCP.
Estoy revisando la nota de aplicación de SIMCOM sobre TCP/IP como referencia.
Es muy posible que los comandos AT que estoy usando estén funcionando, pero no estoy seguro de cuál es 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 unitarias" más pequeñas y construir mi camino, de modo que cuando llego al MQTT y no funciona, sé que mi base TCP en la que está construido no es el problema.
Creo que mis pasos preliminares para esto están funcionando bien (registrarse en GPRS, conectarse a través de APN, establecer un contexto PDP, abrir una conexión de red, abrir un socket TCP). Al menos, parecen estar dándome los valores esperados de retorno del comando AT que indican que están bien. Es a partir de ahí donde tengo mis dudas.
Actualmente, lo que estoy haciendo es simplemente conectarme a un servidor web (sucede que estoy usando la dirección IP de Adafruit) y 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, 0 recibidos. 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 ni nada, por lo que no hace nada. Entonces, 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é durante bastante tiempo tratando de encontrar servidores de eco en línea gratuitos a los que pudiera intentar conectarme, que simplemente me devolvieran mi "HOLA" muy cortésmente. Hay todo un protocolo UNIX para esto, pero parece que ha quedado obsoleto.
Luego traté de configurar un servidor de eco local en mi PC y conectarme a él. Creo que lo configuré bien, porque cuando ejecuté tanto un servidor como un cliente (en la misma máquina, conectado a la dirección IP del host local ), obtuve ecos en ambas terminales. Pero cuando intenté conectarme desde mi módulo SIMCOM, no pude establecer ninguna conexión. Jugué con la configuración del firewall para siempre, y probablemente abrí todos los puertos a los piratas informáticos en el proceso, pero nada.
Estoy un poco fuera de mi experiencia con estas cosas de Internet (más bien un tipo de circuitos / integrado), así que espero que alguien pueda ayudarme a orientarme en la dirección correcta.
Finalmente, hay dos preguntas similares a esta en Stack Exchange, pero tengo problemas para comunicarme con ellos para ver cómo configuraron sus pruebas.
¿Es posible enviar comandos AT a través de TCP?
¿Cómo envío datos a través de TCP desde un SIM5320A?
Esencialmente, solo quiero conectarme a un socket TCP en modo transparente (frente al modo de datos), enviar algunos datos de una manera y leer algunos datos correctamente, luego cerrar la conexión. Cualquier ayuda muy apreciada.
La forma más fácil de obtener una respuesta de un servidor es realizar una solicitud HEAD.
Por ejemplo, abra un socket en el puerto 80 de www.stackexchange.com
A continuación, enviar:
HEAD /about HTTP/1.1
Host: www.stackexchange.com
(blank line)
Debería recibir 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 obtener la hora actual fuera de la red.
Recomendaría probar primero el modo no transparente para ver si todo está configurado. Puedes probar con arduino.cc/asciilogo.txt
.
CIPOPEN
el puerto 80 arduino.cc
usando la dirección IP que obtiene ping
de Windows. El módulo también tiene un comando para convertir nombres en direcciones.Para OBTENER el contenido del archivo txt, la solicitud HTTP debería verse así:
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 debería ser: AT+CIPSEND=0,49
.
La parte importante ahora es enviar los datos al módulo. Debe asegurarse de que se envíe esta solicitud exacta; un carácter menos o más, y 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 presumiblemente 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 es Ctrl+Z
necesario.
Si todo salió bien, debería ver esto en su pantalla.
Tony Estuardo EE75
Batu Yıldız
Joel Wigton
Batu Yıldız
cris
Joel Wigton