error de carácter de escape sim900

Estoy tratando de 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 finaliza el comando inmediatamente.

Alguien sabe por cual puedo superar este problema?

Estoy intentando acceder a la API de Google Maps ( http://www.google.com/glm/mmap ). Necesita algunos datos que deberían ser algunos caracteres hexadecimales. Una matriz de datos de muestra del formato (0x12,0x15,0x1b.....) que debe publicarse. Así que estoy usando los siguientes comandos

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

Así que aquí recibo el >aviso del módulo. Así que envío los siguientes datos después

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

Después de esto envío los datos hexadecimales. Así que estoy usando linux echo para enviar los datos hexadecimales. Así que 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 sirve (Esc) or 0x1Bpara salir de enviar los datos. Así que esto 0x1bque estoy enviando provoca una salida saltándose el resto de datos.

¿Ha intentado enviar tres caracteres "\ 1B" en lugar del carácter Escape de un solo byte?
Parece que hay mucha documentación disponible para este módulo. (También aquí .) ¿Tiene alguna pregunta específica que no esté cubierta?
@RedGrittyBrick Intenté lo siguiente y ninguno funciona echo -ne "\\x1B" > /dev/ttyUSB1 echo -ne "x1B" > /dev/ttyUSB1 También intenté ingresar \ desde el teclado seguido del carácter Esc aún así sale
@DaveTweed He leído la documentación, pero no puedo encontrar la referencia sobre cómo se puede enviar el carácter Esc.
¿Qué secuencia de bytes puede enviar con éxito y qué secuencia falla? ¿Recibe un código de error o de retorno? ¿Cómo está enviando los datos exactamente? ¿Puede dar un ejemplo de configuración?
@jippie actualizó la pregunta con detalles
eco -ne "\x12\x15\x1b..."
@jippie Es una matriz grande, así que solo incluí unos pocos bytes ... básicamente, los comandos de eco envían los datos al puerto serie ...
te equivocaste en las barras.
@jippie disculpa mi error..\

Respuestas (2)

Encontré una forma en la que se puede enviar el carácter de escape... Esto se hace especificando la longitud del comando AT+CIPSEND. Entonces, 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...

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

El documento SIM900 AT Commands Set parece ofrecer algunas formas de enviar bytes binarios arbitrarios. ¿Tal vez una de ellas funcione para usted?

En 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 invertida (ASCII 5C), el carácter "5" (ASCII 35) y el carácter "C" (ASCII 43).

Así que tal vez 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 invertida, se come la primera barra invertida y pasa la segunda. Luego, el SIM900 (si estoy leyendo el documento correctamente) reemplaza los grupos de 3 caracteres (barra invertida, dígito, dígito) con un solo byte. Luego, el servidor de Google en el otro extremo recibe ese único byte.

pag. 183 de dicho manual y también la "Nota de aplicación: Conexión transparente GPRS usando SIM900" . mencione "AT+CIPCCFG Configure el modo de transferencia transparente"; tal vez eso funcione mejor para usted. Todavía estoy un poco confuso acerca de cómo funciona eso.

pd: le he dado la mano al tipo que mantiene https://github.com/Mohammed90/SIM900GSM . ¿ Quizás podrías ayudar?

pd: todas las API de Google que he usado hasta ahora me permiten usar caracteres imprimibles normales, por lo que no tengo que preocuparme por los caracteres de control de escape. ¿Podrías publicar un enlace a la página específica que te hizo creer que necesitabas enviar caracteres de control a Google?

Esta página tiene un código php que muestra los datos a enviar open-electronics.org/how-to-find-the-location-with-gsm-cells
Probé la secuencia de escape pero parece que no funciona... probé lo siguiente at+cpbw=2,"123456789",129,"tdck\5C\22" OKAsí que cuando lo leí de nuevoat+cpbr=2 +CPBR: 2,"123456789",129,"tdck/5C/22"
Buena prueba. Entonces, ¿enviaste barras diagonales inversas, pero obtuviste barras diagonales inversas? Estoy sorprendido. Intente enviar "\41" en la cadena at+cpbw. ¿Eso da "A" o "/41" cuando lo lee con at+cpbr?