Comunicación entre 2 Xbee en modo APi usando Minicom

Estoy trabajando en Xbee en modo API y estoy escribiendo un pequeño programa en C para recibir marcos API y procesarlos, pero para comenzar con esto, simplemente quería comprobar cómo se ven estos marcos y si la comunicación API realmente está ocurriendo. O no.

Tengo Radio A y Radio B

Radio A - Transmitter 
64 bit address - 0013A20040BB1716


Radio B - Receiver 
64 bit address - 013A20040BCDE18

Los agregué a ambos a través de Xbee USB shield a KDE y comencé minicom para ambos. Ambos están respondiendo bastante bien al comando AT. Configuré el modo APi usando

ATAP = 1 or ATAP = 2

y luego ATWRy ATCNverifiqué el modo API nuevamente al emitir ATAPy obtener 1 o 2 como respuesta, eso significa que ahora estoy en modo API.

Utilicé este enlace para enmarcar los marcos de API que se enviarán desde Radio A a Radio B, y este es el marco que obtuve

`7E 00 10 10 01 00 13 A2 00 40 BC DE 18 00 00 00 00 AE DA BF`

cuando lo envío de Radio A a Radio B, no obtuve nada en la serie de Radio B en minicom. ¿Qué me estoy perdiendo? Ya había conectado la antena. También consideré este enlace , pero en lugar de usar XCTU, simplemente usé minicom.

¿Cómo estás enviando el paquete en Minicom? No lo uso, pero ese hexadecimal debe enviarse como binario, por ejemplo, 7E sería el carácter ~ y algunos otros no son ASCII, por lo que si solo intenta pegar la cadena hexadecimal como texto, no lo hará. trabajar.
@PeterJ: simplemente estoy tratando de enviar la cadena hexadecimal. Creo que por eso no funciona. Traté de instalar XCTU en Linux pero no funcionó porque no pude crear un enlace simbólico entre ttyUSB y el puerto COM. ¿Hay algún suplente?

Respuestas (1)

Al enviar esos paquetes, deben estar en binario en lugar de enviarse como una cadena hexadecimal y Minicom no parece admitir datos binarios. Sin embargo, de una respuesta de Stack Overflow, la siguiente página contiene detalles sobre cómo agregar la capacidad de enviar un archivo binario:

Envío de archivos binarios a través de minicom

Puede obtener su paquete en un archivo binario usando un comando como el siguiente:

echo -ne '\x7E\x00\x10\x10\x01\x00\x13\xA2\x00\x40\xBC\xDE\x18\x00\x00\x00\x00\xAE\xDA\xBF' > packet.bin

Otra alternativa sería usar el programa RealTerm que permite el envío de archivos binarios y también le permitirá ver los paquetes recibidos en hexadecimal, lo que puede ser difícil con Minicom. Lo uso en Windows, pero según la página de soporte, se probó con éxito en Wine.

Tuve éxito al enviar lo mismo usando una máquina WINDOWS separada. Pude enviar con éxito el paquete API a otra radio. Pero me enfrenté a un problema. Por otro lado, tengo un microcontrolador y recibo caracteres en lugar de hexadecimales. 7Me gusta ~_ ¿O siempre obtendré char del otro lado?
Todo lo que recibas también estará en binario. Hex solo se usa en la documentación para explicarlo en una forma legible por humanos, por ejemplo, los valores por debajo de 0x20 y por encima de 0x7F no son caracteres imprimibles. Entonces, es mejor pensar en todo como un byte con un valor de 0 a 255, tal vez este gráfico ASCII lo ayude a comprender por qué ciertos valores se muestran de cierta manera si los trata como caracteres y los muestra: asciitable.com
Entonces, en el lado de AVR, ¿es mejor almacenar todo en un marco y convertirlo a HEX usando algún binary_to_hexprograma de conversión y luego compararlo con el tipo de marco?
Sí, normalmente lo almacenaría como bytes y luego lo mostraría como hexadecimal para la depuración, pero para usar los datos internamente no olvide que probablemente no necesitará convertirlo, puede usar cosas como verificar si ese byte contiene 40 en if (my_rx_byte == 0x40)hexadecimal .
No sé si extender esto aquí o no. Pero simplemente estoy usando frame[index++] = ch;para almacenar el binario en un búfer frame[100];. La mayoría de los bytes son ilegibles, tienen espacios, etc. En general, si obtengo hexadecimal, puedo averiguar fácilmente la longitud del marco, de qué tipo es, cuál es la dirección de destino, los datos, la suma de verificación, pero ¿cómo trataré con el binario? bytes sin almacenarlos y convertirlos a hexadecimal. Necesito verificar cuál es el tipo de marco y el tamaño del marco.