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 ATWR
y ATCN
verifiqué el modo API nuevamente al emitir ATAP
y 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.
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.
7
Me gusta ~
_ ¿O siempre obtendré char del otro lado?binary_to_hex
programa de conversión y luego compararlo con el tipo de marco?if (my_rx_byte == 0x40)
hexadecimal .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.
PedroJ
srj0408