error de caracteres de escape sim900

1

Estoy intentando enviar algunos datos hexadecimales a través de TCP utilizando el módulo SIM900A. Pero la secuencia de datos tiene un byte con valor de 0x1B que es el carácter de escape. Como resultado, el módulo termina el comando inmediatamente.

¿Alguien sabe por qué puedo superar este problema?

Estoy intentando acceder a los mapas de Google ( enlace ) api. Necesita algunos datos que deberían ser algunos caracteres hexadecimales. Algunos arreglos de datos de muestra del formato (0x12,0x15,0x1b .....) que se deben publicar. Así que estoy usando los siguientes comandos

AT+CIPSTART="TCP","www.google.com","80"
AT+CIPSEND

Así que aquí obtengo el indicador > del módulo. Entonces les envío los siguientes datos

POST maps/glm HTTP1/0
Content-type: application/binary
Content-length: 100

Después de esto te envío los datos hexadecimales. Así que estoy usando linux echo para enviar los datos hexadecimales. Así lo envío como

echo -ne "/x12/x15/1b/......." > /dev/ttyUSB1

Pero en sim900 generalmente enviamos 0x1A(ctrl+z) para enviar los datos al servidor. Pero también usa (Esc) or 0x1B para salir del envío de datos. Entonces, este 0x1b que estoy enviando provoca una salida que omite el resto de los datos.

    
pregunta Lonewolf

2 respuestas

4

Encontré una forma mediante la cual se puede enviar el carácter de escape ... Para hacerlo, especifique la longitud del comando AT + CIPSEND. Por lo tanto, los comandos salen solo después de haber enviado todos los datos especificados por la longitud ...

AT+CIPSEND=12

Al hacerlo de esta manera ... se puede enviar el carácter de escape ...

    
respondido por el Lonewolf
0

En el futuro, cuando haga preguntas sobre alguna pieza específica de hardware, vincule a la página de documentación para ese hardware: en este caso, algo como documentación de SIM900 .

El documento SIM900 AT Commands Set parece ofrecer algunas formas de enviar bytes binarios arbitrarios - ¿Tal vez alguno de ellos trabaje para ti?

en la p. 73, sugieren expandir los bytes difíciles en una barra invertida "\" seguida de dos dígitos hexadecimales. En particular, enviar el propio carácter de barra invertida "\" implica enviar el carácter de barra diagonal inversa (ASCII 5C), el carácter "5" (ASCII 35) y el carácter "C" (ASCII 43).

Entonces quizás quieras algo como esto:

# (warning: untested code)
echo -ne "The "
echo -ne "\5C" # backslash
echo -ne "\1B" # escape
echo -ne "\22" # quote
echo -ne " " # space
echo -ne "\1A" # ctrl+Z to Google
echo -ne " string."
echo -ne "\x1A" # ctrl+Z to the SIM900

El comando "echo" con la opción "-e", cuando ve una doble barra diagonal inversa, come la primera barra diagonal inversa y pasa la segunda a través. Luego el SIM900 (si estoy leyendo el documento correctamente) reemplaza los grupos de 3 caracteres (barra diagonal inversa, dígito, dígito) por un solo byte. Luego, el servidor de Google en el extremo remoto recibe ese byte único.

p. 183 de ese manual y también el "Nota de la aplicación: Conexión transparente GPRS utilizando SIM900" . mencionar "AT + CIPCCFG Configurar modo de transferencia transparente" - Tal vez eso funcionaría mejor para ti. Todavía no estoy seguro de cómo funciona eso.

p.s .: Me he dado la mano con el chico que mantiene enlace . ¿Quizás podría ayudar?

p.s .: Todas las API de Google que he usado hasta ahora me permiten usar caracteres imprimibles normales, así que no tengo que preocuparme por escapar de los personajes de control. ¿Podría publicar un enlace a la página específica que lo llevó a creer que necesitaba enviar caracteres de control a Google?

    
respondido por el davidcary

Lea otras preguntas en las etiquetas