Ein System, das ich entwickle, wird XBee-Module für eine Punkt-zu-Punkt-Verbindung zwischen einem Mikrocontroller und einem PC verwenden. Daten werden nur in eine Richtung gesendet - Mikro zum PC und mit 10-20fps. Der Datenteil jedes Rahmens beträgt 4 Bytes. XBee-Module werden (zumindest am Anfang) im transparenten Modus ausgeführt. Auf der PC-Seite verwende ich Python, um die Daten von der seriellen Schnittstelle abzurufen.
Anfangs habe ich ein sehr einfaches Python-Programm geschrieben, um Daten 4 Bytes gleichzeitig von der seriellen Schnittstelle abzurufen, was beim Testen mit einer virtuellen COM-Verbindung gut funktionierte (ich habe jedoch noch keine Tests in der realen Welt durchgeführt), aber ich entschied mich zu experimentieren und implementierte schließlich eine einfache Rahmenstruktur wie diese.
sync_flag | Payload_length | frame_number | payload
Nach einiger Recherche entdeckte ich HDLC und überlege nun, etwas Ähnliches zu implementieren, wenn auch einfacher. Bevor ich mich darum bemühe, würde ich gerne hören, was andere zu sagen haben.
Wann ist ein solches Protokoll verdient?
Was haben Sie getan, als Sie Ihre XBee-Netzwerke implementiert haben?
Da ich in diesem Bereich etwas neu bin, bin ich sicher, dass einige relevante Einzelheiten ausgelassen wurden, aber gleichzeitig wollte ich die Frage nicht zu eng / systemspezifisch stellen, aber wenn nötig, werde ich die Frage aktualisieren.
Ich werde Xbee-Module verwenden. Ich werde versuchen, ein Punkt-zu-Mehrpunkt-Netzwerk zu verwenden.
Im Moment plane ich Senderkennung, Payload-Typ, Payload-Länge, Payload und Prüfsumme - das würde in etwa so aussehen:
Field Type Description
transmitter_id uint8 Identifies the transmitting module (0-255)
type uint8 Type of data (GPS coordinates, hit status, etc.)
length uint8 Length of payload in bytes
payload - Actual payload
checksum uint16 CRC16 of everything before
So stelle ich es mir vor, das Format kann sich ändern, aber dies wird das verwendete Basisprotokoll sein.
Wenn Sie den transparenten Modus verlassen, gehe ich davon aus, dass XBee Ihrer Anwendung die Nutzlast von 802.15.4- Frames zur Verfügung stellt. Es ist jedoch möglich, dass Ihre Daten auch in einen ZigBee APS/NWK-Rahmen gepackt werden.
(Quelle: freaklabs.org )
Daten werden in Paketen gesendet – es ist also kein Sync-Header erforderlich
Es gibt bereits ein 2-Byte-Prüfsummenfeld (FCS) - Sie müssen also kein eigenes hinzufügen
Die maximal zulässige Nutzlastgröße beträgt weniger als 128 Byte
Frame-Lieferung und -Empfang sind unzuverlässig
Die XBee-API ermöglicht es Ihnen möglicherweise, die Sequenznummern aus den zugrunde liegenden Paketen zu lesen. Wenn nicht, benötigen Sie eine inkrementierende Sequenznummer und einen Wiederholungsmechanismus.
Meine Situation ist etwas komplexer (Hausautomationssystem), daher ist dies möglicherweise ein Overkill für Sie, aber ich habe mich für das binäre JSON -basierte Protokoll entschieden. Es ist flexibel, erweiterbar und wirklich einfach zu implementieren.
Toby Jaffey