Mehrere Raspberry Pis über GPIO direkt verbinden

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo,

    spräche etwas dagegen, mehrere Raspberry Pis über eine Brücke direkt zu verbinden? Wie in der Abbildung würde ich die GPIO direkt verbinden, eine Verbindung ist für GND und die andere für GPIO23. Auf nur einem Pi ist GPIO23 dann als Output konfiguriert, auf den anderen als Input. Wenn der Master nun den Zustand von GPIO23 ändert, kann ich das auf den anderen Pis verarbeiten. Mache ich dabei einen Denkfehler oder übersehe ich gar etwas, das gegen diese Vorgehensweise spräche?

    Vielen Dank für Hinweise.

  • So was nennt man Bus. Jetzt brauchst Du Dir nur noch ein Protokoll ausdenken, über dass kommuniziert werden soll. Man kann natürlich auch einen Bus nutzen, der sowieso schon vom RasPi unterstützt wird, aber zum Experimentieren ist das eine Variante. Ich würde das Softwareseitig erst mal so regeln, dass die angeschlossenen GPIOs auf Eingang stehen. Hat dann durch irgend einen Einfluss eine RasPi was zu sagen, schaltet dieser seinen GPIO auf Ausgang und beginnt das Protokoll zu senden. Alle anderen hören zu. Hast Du Dir ein Protokoll ausgedacht, indem man eine bestimmte Adresse mit sendet, kann sogar der entsprechende RasPi antworten.

  • Ein Bus, genau...zum Verstehen würde ich wohl erstmal ein eigenes Protokoll probieren, ansonsten hatte ich bisher den Eindruck, mehr als zwei Slaves seien nicht adressierbar (SPI) bzw. wird der Slave Modus nicht vom Pi unterstützt.
    Bei Verwendung von I2C gibt es wohl auch Hürden, weil der Pi nicht als Slave vorgesehen ist?

    Hier habe ich zumindest einen Hinweis darauf gefunden, dass es möglich ist, den B+ auch als I2C Slave zu betreiben.
    https://www.raspberrypi.org/forums/viewtopic.php?f=44&t=87804

    Nur was zum Teufel ist ein "kernel module" (?) ;)

  • ich würde die verbindungen kreuzen.
    ich würde ein normales serielles protokoll nehmen.
    auserdem würde ich die verbindungen absetzen
    als beispiel (pins anpassen)
    rpi1(3,4) - rpi2(4,3)
    rpi2(5,6) - rpi3(3,4)
    rpi3(5,6) - rpi4(3,4)

    das leben ist hart, aber wir müssen da durch.

    Einmal editiert, zuletzt von morob65 (17. Juni 2015 um 12:38)

  • Ich möchte das Steuerungsverhalten der einzelnen Pis koordinieren, also jeder Pi hat eine Aufgabe, aber es bedarf einer Synchronisation der Tätigkeiten bzw. eines Masters, der die anderen ansteuert. Da nicht alle Pis im Netzwerk, aber relativ nah beieinander sind (<10m entfernt), denke ich über die Buslösung nach.
    Wenn ich ein einfaches mehradriges Flachbandkabel mit den entsprechenden Buchsen nutzen würde (ohne die 3,3V bzw. 5V Pins dabei zu verbinden), hätte ich schonmal eine einfache Verbindung zwischen den Pis und müsste noch nicht einmal kreuzen, so meine Überlegung.

    Einmal editiert, zuletzt von Atomic Server (17. Juni 2015 um 13:06)

  • 10m sind schon mal eine Ansage. Da fallen SPI und I²C schon mal flach, zumindest ohne zusätzlichen Schaltungsaufwand. Den brauchst Du aber auch für andere Lösungen z.b. CAN oder RS485. 1wire ist zwar auf große Entfernung tauglich, aber man müsste sehen, ob und wie man den RasPi als Slave nutzen kann.

  • Besteht keine Möglichkeit die PI's über LAN oder WLAN untereinander zu verbinden?
    Um übers Netzwerk den Zustand von'm GPIO eines anderen PI's abzurufen wäre pigpiod optimal


  • Besteht keine Möglichkeit die PI's über LAN oder WLAN untereinander zu verbinden?
    Um übers Netzwerk den Zustand von'm GPIO eines anderen PI's abzurufen wäre pigpiod optimal

    LAN/WLAN wäre natürlich immer 'ne Lösung, aber die möchte ich vermeiden :) Dann bräuchte ich ja auch wieder entweder WLAN-Adapter oder Netzwerkkabel + Switch zusätzlich.


    Nachdem ich seinerzeit gemerkt habe, wie einfach das ist, würde ich das über RS485 mit Modbus-Protokoll machen. Dazu findest Du -> hier <- Näheres ...
    cu,
    -ds-

    Hmm, interessant. Danke, werde ich mir mal anschauen, falls ich mit dem einfachen Kabel über die Länge nicht weiterkomme. Sonderlich hohe Frequenzen brauche ich ja nicht, nur einfache Trigger, die einen Zustandsübergang der Pis bewirken.


  • Hi,
    sowas ähnliches hatte ich schon.
    gug mal hier

    Ja, das war ja auch da schon mein Gedanke, die Pins direkt miteinander zu verbinden...

    Ok, das hieße, die Slave-Pis würden u.U. zuviel aus dem Master-Pi saugen? Würde es dann ausreichen, einen Widerstand hinter den Master zu schalten?

    Oder ist die Aktivierung der internen 50K Pull-Down-Widerstände bei den Slaves ausreichend? (pull_up_down=GPIO.PUD_DOWN)

    Einmal editiert, zuletzt von Atomic Server (17. Juni 2015 um 20:16)

  • Hi Atomic.


    Ok, das hieße, die Slave-Pis würden u.U. zuviel aus dem Master-Pi saugen? Würde es dann ausreichen, einen Widerstand hinter den Master zu schalten?


    Keine Angst, da saugt quasi nichts.
    Ein GPIO als Eingang geschaltet geht in einen extrem hochohmigen Zustand.Ein Widerstand ist nicht nötig


    Oder ist die Aktivierung der internen 50K Pull-Down-Widerstände bei den Slaves ausreichend? (pull_up_down=GPIO.PUD_DOWN)


    Den würde ich aktivieren, nicht wegen irgendwelchem Strom, sondern um den "Bus" sauberzuhalten.(Antenneneffekt)
    Aber nicht an allen (parallelschaltung), der am "Master" reicht.


    gruß root

    Einmal editiert, zuletzt von root (17. Juni 2015 um 20:31)

  • Um bei Programmierfehlern Schaden auszuschließen sind Widerstände zur Strombegrenzung sinnvoll. Aber sonst lässt sich das natürlich machen.
    Bei größerem Abstand tritt natürlich abhängig von den EM Störungen in der Umgebung irgendwann so etwas an die Grenzen. Das nächste Problem ist die Masse die ja an allen Bords das selbe Potential haben muss und mit zunehmendem Abstand und verschiedenen Netzteilen.....Der Unterschied zwischen H/L ist ja nicht so groß.

    Wenn die Geschwindigkeit niedrig ist, man ein wenig bastellust hat würde ich auf LWL umstellen. Einfaches Protokoll, Morsecode ?, billig LWL kommt da schon Potentilalfrei ein ganzes Ende.

  • Das System wird so nicht funktionieren. Wenn alle Pins als Ausgänge geschaltet sind, dann wird irgend wann ein Ereignis auftreten, an dem ein Pi als Ausgang geschaltet und wird senden. Die anderen lauchen dann um, irgend wie zu reagieren. Was ist aber, wenn zwei Pi´s gleichzeitig senden wollen und ein Ausgang auf H geht, während der ander auf L geht? dann gibt es einen Kurzschluß!


    Also folgender Vorschlag:

    Eine Leitung verbindet alle Pi´s und diese Pins werden grundsätzlich nur lesen! Die Leitung muß mit einem Pulup-Wiedertsnd definiert auf 3,3 Volt gezogen werden.
    An jedem Pi wird ein Transistor diese Leitung zum senden gegen Masse kurz schließen. Dieser Transistor wird von einem 2. Pin angesteuert. Das heißt pro Pi wird ein zusätzlicher Transistor benötigt und ein Wiederstand um die Leitug definiert gegen Spannung zu ziehen.

    Der Sender muß jetzt nur mitlauschen, also kontrollieren, ob die Leitung wirklich die Ausgangssituation anzeigt, die selbst gesendet wird. Wenn die Signale vom gesendeten abweichen, dann
    hat ein anderer Pi ebenfalls versucht zu senden. Das heißt beide P´is, die zu senden versucht haben, sollten dies dann feststellen und das senden sofort beenden. Nach einer Pause kann dann erneut versucht werden. die Sendung vorzunehmen. Das nur gesendet wird, wenn vorher festgestellt wurde, das kein anderer sendet ist selbstverständlich!

    Der Mehraufwand ist nicht der Rede wert und die Lösung ist absolut sicher. Ein IRLM6346 kostet bei Reichelt nur wenige Cent und läßt sich direkt an den Ausgang anschalten.
    Wer längere leitungen anwenden möchte kann das ganze noch sicherer machen möchte, kann das ganze zwei mal aufbauen und gleichzeitig über eine Leitung H und über die andere L senden.

    Wenn dann nicht auf beiden Leitngen gleichzeitig das komplementäre Signal empfangen wird, dann wirds möglicherweise eine Störung und kein ordentlicher Impuls sein.

    Eine Prüfsumme hilft ebenfalls Fehler zu erkennen. Und wenn man ein Protokoll verwendet, bei dem jede Sendung vom Empfänger beantwortet werden muß, kann eine sehr stabile Kommunikation realisietr weden.


  • ...
    Wer längere leitungen anwenden möchte kann das ganze noch sicherer machen möchte, kann das ganze zwei mal aufbauen und gleichzeitig über eine Leitung H und über die andere L senden.
    ...


    dann kann er auch gleich eine RS485 nehmen - das ist nämlich genau dasselbe Prinzip ... Hardware gibt's für'n Appel und ein Ei bei Asiaten Deiner Wahl.
    Ich glaube aber nicht, dass das Anliegen des TE in diese Richtung geht ;)

    cu,
    -ds-

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!