Kommunikation zwischen 2 Xbee im APi-Modus mit Minicom

Ich arbeite an Xbee im API-Modus und schreibe ein kleines Programm in C, um API-Frames zu empfangen und zu verarbeiten, aber um damit zu beginnen, wollte ich einfach überprüfen, wie diese Frames aussehen und ob die API-Kommunikation wirklich stattfindet oder nicht.

Ich habe Radio A und Radio B

Radio A - Transmitter 
64 bit address - 0013A20040BB1716


Radio B - Receiver 
64 bit address - 013A20040BCDE18

Ich habe sie beide über Xbee USB Shield zu KDE hinzugefügt und minicom für beide gestartet. Beide antworten ziemlich gut auf den AT-Befehl. Ich stelle den API-Modus mit ein

ATAP = 1 or ATAP = 2

und dann ATWRund ATCNund überprüfte den API-Modus erneut, indem er ATAP1 oder 2 als Antwort ausgab und erhielt, das bedeutet, dass ich mich jetzt im API-Modus befinde.

Ich habe diesen Link verwendet , um API-Frames zu framen, die von Radio A an Radio B gesendet werden sollen, und dies ist der Frame, den ich erhalten habe

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

Wenn ich es von Radio A zu Radio B sende, bekomme ich nichts auf Radio B seriell auf Minicom. Was vermisse ich? Antenne hatte ich schon angeschlossen. Ich habe diesen Link auch in Betracht gezogen , aber anstatt XCTU zu verwenden, hatte ich einfach minicom verwendet.

Wie senden Sie das Paket in Minicom? Ich verwende es nicht, aber dieses Hex muss als Binärzeichen gesendet werden, zum Beispiel wäre 7E das Zeichen ~ und einige andere sind Nicht-ASCII. Wenn Sie also nur versuchen, die Hex-Zeichenfolge als Text einzufügen, wird dies nicht der Fall sein arbeiten.
@PeterJ: Ich versuche einfach, die Hex-Zeichenfolge zu senden. Ich denke deswegen funktioniert es nicht. Ich habe versucht, XCTU unter Linux zu installieren, aber es hat nicht funktioniert, weil ich keinen Symlink zwischen ttyUSB und dem COM-Port erstellen konnte. Gibt es eine Alternative?

Antworten (1)

Beim Senden dieser Pakete müssen sie binär und nicht als Hex-String gesendet werden, und Minicom scheint Binärdaten nicht zu unterstützen. Aus einer Stack Overflow-Antwort enthält die folgende Seite jedoch Details zum Hinzufügen der Möglichkeit, eine Binärdatei zu senden:

Senden von Binärdateien über minicom

Sie könnten Ihr Paket mit einem Befehl wie dem folgenden in eine Binärdatei bringen:

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

Eine andere Alternative wäre die Verwendung des RealTerm- Programms, das das Senden von Binärdateien ermöglicht und Ihnen auch ermöglicht, die empfangenen Pakete in Hex zu sehen, was mit Minicom schwierig sein kann. Ich benutze es unter Windows, aber laut Support-Seite wurde es erfolgreich unter Wine getestet.

Ich hatte Erfolg beim Senden derselben, indem ich eine separate WINDOWS-Maschine verwendete. Ich konnte das API-Paket erfolgreich an ein anderes Radio senden. Aber ich hatte ein Problem. Auf der anderen Seite habe ich einen Mikrocontroller und erhalte char statt hex. Wie für 7ich bekomme ~. Oder bekomme ich immer Char auf der anderen Seite?
Alles, was Sie erhalten, wird auch binär sein. Hex wird in der Dokumentation nur verwendet, um es in einer für Menschen lesbaren Form zu erklären, zum Beispiel sind Werte unter 0x20 und über 0x7F keine druckbaren Zeichen. Stellen Sie sich also alles als Byte mit einem Wert von 0 bis 255 vor. Vielleicht hilft Ihnen dieses ASCII-Diagramm zu verstehen, warum bestimmte Werte eine bestimmte Weise zeigen, wenn Sie sie als Zeichen behandeln und anzeigen: asciitable.com
binary_to_hexAuf der AVR-Seite ist es also am besten, alles in einem Frame zu speichern und es mit einem Konvertierungsprogramm in HEX umzuwandeln und es dann mit dem Frame-Typ zu vergleichen?
Ja, ich würde es normalerweise als Bytes speichern und dann zum Debuggen als Hex anzeigen, aber um die Daten intern zu verwenden, vergessen Sie nicht, dass Sie sie wahrscheinlich nicht konvertieren müssen. Sie können Dinge wie zum Beispiel verwenden, um zu überprüfen, ob dieses Byte 40 in Hex if (my_rx_byte == 0x40)enthält .
Ich weiß nicht, ob ich das hier erweitern soll oder nicht. Aber ich verwende einfach, frame[index++] = ch;um die Binärdatei in einem Puffer zu speichern frame[100];. Die meisten Bytes sind nicht lesbar, enthalten Leerzeichen usw. Wenn ich Hex bekomme, kann ich im Allgemeinen leicht die Länge des Frames herausfinden, um welchen Typ es sich handelt, was die Zieladresse, die Daten und die Prüfsumme sind, aber wie gehe ich mit Binärdaten um? Bytes, ohne sie zu speichern und in Hex umzuwandeln. Ich muss den Rahmentyp und die Größe des Rahmens überprüfen.