Frage:
Einfaches benutzerdefiniertes 1-Draht-GPIO-Kommunikationsprotokoll zwischen Master-PI und Slave-PI
PhilBot
2015-02-27 22:46:18 UTC
view on stackexchange narkive permalink

Ich habe 2 Himbeer-Pis in meinem System. Einer kann an den anderen "angedockt" werden und einige Zeit später kann er "angedockt" werden. Während des Andockens haben die 2 Pis eine Verbindung zwischen 2 GPIO-Pins (1 Pin auf jedem Pi). Es wird also 1 Draht geben, der beide Pis verbindet. Diese 2 Pis werden die einzigen Systeme auf dem 'Bus' sein, es handelt sich nur um eine Punkt-zu-Punkt-Verbindung.

Mir ist das Dallas 1-Draht-Protokoll bekannt (ich habe es mit einem Temperatursensor auf dem Bus verwendet) Pi, aber es gab einen Kerneltreiber, der die ganze Arbeit erledigte), aber ich weiß, dass es schwierig ist, das Timing einzuhalten, und es gibt keine einfache Möglichkeit, es von Userspace aus zu verwenden. Ich habe gehört, dass ein UART bei 115200 Baud das Protokoll emuliert, aber ich habe keine freien UARTs in meinem System. Dallas 1-Draht ist also nicht möglich.

Wenn die 2 Pi angedockt sind, sendet der Master dem Slave grundsätzlich eine SSID-Zeichenfolge und es erfolgt eine einfache ping-ähnliche Operation (Ping von Slave / ACK) vom Slave), der beide Pis benachrichtigt, dass sie angedockt sind. Die Kommunikation ist also sehr einfach.

Dies kann vollständig proprietär sein, wobei der Schwerpunkt auf Einfachheit liegt. Ich kann Python oder C oder Qt (C ++) oder wenn möglich nur Bash verwenden ...

Ich würde mich über jede Hilfe oder Anleitung sehr freuen, wie dies erreicht werden kann. Was ist der beste und einfachste Weg, um diese Kommunikation zu implementieren?

Hast du das jemals gelöst?
Einer antworten:
monojohnny
2015-03-01 22:28:49 UTC
view on stackexchange narkive permalink

Dieser Beitrag enthält einige Diskussionen zu ' Bit Banging' (anscheinend der Begriff für Software-implementierten UART) auf einem Raspberry Pi - enthält er möglicherweise einige Informationen, die Sie verwenden könnten?

So erhalten Sie mehr als eine Uart-Schnittstelle

Und was die einfache Codierung betrifft - das Manchester-Codierungsschema ist recht einfach zu implementieren. Da Sie jedoch über eine bidirektionale Kommunikation verfügen, müssen Sie anscheinend ein Protokoll erfinden, das einen bidirektionalen Betrieb ermöglicht. Daher müssen Sie diese Funktion Ihrem Protokoll hinzufügen. Außerdem - ich habe keine Ahnung, wie genau Sie Ihre Timings generieren müssen, damit dies funktioniert ..... Ich denke, Sie müssen in 'C' implementieren, um die Geschwindigkeit / Genauigkeit zu erhalten, die Sie benötigen: vielleicht einen benutzerdefinierten Kernel Modul - keine Ahnung.

Haben beide Pis an dem Punkt, an dem sie verbunden sind, ein genaues Datum / eine genaue Uhrzeit eingestellt? Vielleicht könnten Sie das irgendwie zum Synchronisieren verwenden (wenn Sie bereit sind, mit einer sehr niedrigen Datenrate zu senden / empfangen ... (Ich vermute, dass das "angedockte" System zu diesem Zeitpunkt noch keine Zeit hat - ich denke es) ist nicht über IP verbunden, und dieser Teil des Grundes, warum Sie dies tun ...)

Zusätzlich: Wenn Sie dies zum Laufen bringen - könnte ein nettes kleines Projekt sein, das Sie der Community mitteilen können - könnte es sein Eine praktische Möglichkeit, ein Model-A-Gerät zu starten, indem Sie ein "Leg-Up" von einem anderen bereits laufenden / verbundenen Raspberry abrufen ...

Bitbangin auf Raspbian funktioniert nicht gut.
Ich werde teilen, wenn ich es zum Laufen bringe. Danke für die Eingabe.


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...