Kommunikation zwischen Pi & µC

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hi,


    ...
    ... Jetzt hätte ich eigentlich gerne, dass der Arduino bei Bedarf dies am Pi abfragt, geht aber ja nicht, weil der Pi der Master ist und für die Frage zuständig.
    ...


    Lösungsansatz hierfür: je eine zusätzliche Leitung vom Arduino auf einen GPIO des RPi. Diese "Signalleitung" wird bei Bedarf auf HIGH gesetzt. Das bekommt der RPi dann mit. Aufgrund des Pins weiss er dann, welcher Arduino da was melden möchte und kann diesen dann gezielt abfragen.
    Bei einer Vierdraht-Verbindung ist dann bidirektionale Kommunikation möglich.
    So habe ich das mit einem autonomen Ultraschall-Subsystem über IIC gelöst ... da war die Problematik dass ein Slave ein Hindernis an den Master melden muss ...


    ...
    Der User sagte mir, dass man nicht einfach 3 RS485 Leitungen zusammen in eine RS485 to USB Schnittstelle einpacken kann und das in den Pi stecken, bzw. müsste ich vorher ja die Spannung von 5V auf 3,3V Wandeln. Das mit der Umwandlung soll nicht so einfach gehen, da RS485 differetiell sei. ...
    ...


    Zum Thema Busaufbau hatte ich Dir schon einen Link gepostet ... -> der hier <- ist sogar noch ausführlicher.
    Wandeln musst Du da gar nichts, wenn Du am RPi einen USB->RS485 Adapter verwendest ...


    ...
    ... Ich möchte nämlich gerne jeden Zutrittsversuch mitschreiben, deswegen wäre mir die Anfrage von Arduino an Pi deutlich lieber aber das scheint ja nicht zu funktionieren??
    ...


    Wenn Du die RS485 als Vierdraht-Bus aufbaust, dann ist bidirektionale Kommunikation möglich. In Kombination mit einer zusätzlichen Signalleitung ... (siehe oben).

    So, erst mal alle Fragen geklärt?

    cu,
    -ds-


  • Lösungsansatz hierfür: je eine zusätzliche Leitung vom Arduino auf einen GPIO des RPi. Diese "Signalleitung" wird bei Bedarf auf HIGH gesetzt. Das bekommt der RPi dann mit. Aufgrund des Pins weiss er dann, welcher Arduino da was melden möchte und kann diesen dann gezielt abfragen.
    Bei einer Vierdraht-Verbindung ist dann bidirektionale Kommunikation möglich.
    So habe ich das mit einem autonomen Ultraschall-Subsystem über IIC gelöst ... da war die Problematik dass ein Slave ein Hindernis an den Master melden muss ...


    Die Idee gefällt mir ja ganz super. Ich hatte mich aber vielleicht ein bisschen falsch ausgedrückt, ich möchte nicht nur die entsprechende Leseeinheit erkennen sondern auch den darin genutzten Chip zur Aufzeichnung. (Person XY hat Tür Z um XX:XX:XX Uhr geöffnet). Wenn ich das richtig verstehe, könnte ich aber ja über GPIO melden, dass diese Tür gerade geöffnet werden möchte und dann über die RS485 Abfrage die gültigen Keys senden und als Antwort den genutzten Key empfangen. Somit hätte ich Tür + Key, richtig? :)


    Zum Thema Busaufbau hatte ich Dir schon einen Link gepostet ... -> der hier <- ist sogar noch ausführlicher.
    Wandeln musst Du da gar nichts, wenn Du am RPi einen USB->RS485 Adapter verwendest


    Alles klar, ich hatte es noch editiert oben, wir hatten ein wenig aneinender vorbei gesprochen. Mit dem USB->RS485 Adapter wirds gehen.


    Somit hätte ich das geklärt. Allerdings bräuchte ich für die GPIO dann einen Pegelwandler der von 5v auf 3.3v runtergeht damit ich mir den Eingang nicht grille, richtig?
    Wie sieht es dabei denn mit der Leitungslänge aus? Das ganze läuft ja dann nicht über RS485 sondern wird einfach an einen Digitalpin am Arduino geklemmt der bei Bedarf 5V schaltet oder eben nicht. Funktioniert das über 15 Meter, oder habe ich da schon wieder das nächste Problem?

    Bestellliste bis hier: (Bitte auch mal ein Auge mit drauf werfen)
    - 3x Arduino Nano (oder Mini)
    - 3x MAX485 Modul RS-485 Modul TTL
    - 1x RS485 -> USB Modul

    - evtl. 3x Pegelwandler 5V -> 3.3V für GPIO ??

    Ist es möglich die 5V + Ground für die Arduinos ebenfalls über die "Datenleitung" zu senden? Ich hätte ja bis jetzt 4 Adern belegt, 2x RS485, 1x GND und 1x GPIO. Wenn ich jetzt ein Cat5 (oder 7??) nehme, ist es möglich darüber für alle Arduinos 5V einzuspeisen? Dann bräuchte ich nur ein ordentliches Netzteil für alle 3. Oder ist das auf Grund der Leitungslänge nicht möglich? (Oder auch wegen des Kabels weil dieser dafür nicht verwendet werden darf)

    Wenn das hier noch beantwortet ist werde ich mal bestellen, damit ich vorran komme :) :danke_ATDE:


  • Somit hätte ich das geklärt. Allerdings bräuchte ich für die GPIO dann einen Pegelwandler der von 5v auf 3.3v runtergeht damit ich mir den Eingang nicht grille, richtig?


    das wohl, ja ...


    ....
    Funktioniert das über 15 Meter, oder habe ich da schon wieder das nächste Problem?
    ...


    ich denke schon ... hier kommt dir zugute, dass der Arduino mit 5V schaltet ... Den Pegelwandler jetzt direkt am Raspi angebracht, dann dürfte das schon funktionieren.

    Bestellliste bis hier: (Bitte auch mal ein Auge mit drauf werfen)
    - 3x Arduino Nano (oder Mini)
    - 3x MAX485 Modul RS-485 Modul TTL
    - 1x RS485 -> USB Modul

    - evtl. 3x Pegelwandler 5V -> 3.3V für GPIO ??
    ...


    ein 4facher, biditectionaler Wandler sollte reichen. Wie gesagt ... die Leitung erst am Raspi nach 3V3 wandeln. Das erhöht die Reichweite ;)
    Arduino ist u.a. eine Preisfrage: 3 x Pro Mini plus FTDI-Adapter oder 3 x Nano ...



    ...
    Ist es möglich die 5V + Ground für die Arduinos ebenfalls über die "Datenleitung" zu senden? Ich hätte ...


    wenn noch Leitungen frei sind, wäre das eine Option.
    Ausprobieren ;)

    cu,
    -ds-

  • Hallo zusammen,
    mitlerweile ist alles da und ich bin heiß darauf alles zu testen :)

    Gestern habe ich den ganzen Tag daran rumgebastelt eine Verbindung zwischen Pi und Arduino aufzubauen, lag an der Software, danke nochmal an die fleißigen Helfer im Chat.

    Nun geht es daran, die Kommunikation möglichst sinnvoll aufzubauen, da gibt's immernoch mehrere Möglichkeiten, wir hatten uns jetzt aber vorerst darauf festgelegt:
    Ich könnte wie bereits oben angesprochen mit GPIO und RS485 arbeiten, GPIO Meldung vom Modul welches die Keys benötigt und dann reagiert der Pi darauf.

    -----

    Nun habe ich noch ein paar Fragen: Der Bus wird ja als Master/Slave System aufgebaut, dass ist aber alles Softwareseitig, oder habe ich da etwas falsch verstanden? Ich müsste den Arduinos Kennungen verpassen, die der Pi weiß. Wenn jetzt Arduino 1 den für ihn speziellen GPIO schaltet, sendet der Pi die Keys mit der Kennung "Arduino1". Der Arduino 1 ließt ausschließlich die Datenpakete wo seine Kennung drin ist, er hat die Keys & öffnet die Tür. Als Rückantwort an den Master (der eine Endkennung übergeben hat und somit den Bus wieder freigibt), sendet der Arduino den genutzten Key. Somit weiß der Pi den Key (und damit die Person), die Kennung (und damit welche Tür), und einen Timestamp. Dies schreibt der Pi als Zutrittskontrolle nieder.
    Ist die Überlegung richtig, oder habe ich etwas vergessen? Hardwaremäßig werden die Datenleitungen einfach verbunden und Master/Slave wird also nur Softwareseitig geregelt.

    ---

    Keyspeicher: Wie lege ich sinnvoll die Keys auf dem Pi ab? Einen Zugriffsversuch schließe ich aus, muss also kein verschlüsseltes Superding sein. Wichtig ist, dass der Pi in kürzester Zeit die Keys hat und die sinnvoll an den Arduino schicken kann. Ebenfalls wichtig, ein Webinterface für die Keyverwaltung, generell reicht dafür eine normale Textdatei, richtig?

    ---

    Das wars erstmal, wenn ich dazu noch was weiß lege ich los. Wenn jemand irgendwelche Anleitungen, Berichte o.ä. hat würde ich mich sehr freuen. Gerne Codebeispiele die ich mir ansehen kann :)

    Gruß
    JumpY

  • Hi JumpY,
    hast du da eine Library für den RPi bzw. den Arduino im Einsatz und wenn ja welche?
    Vom Prinzip her sollte das so funktionieren, wie Du Dir das gedacht hast ... ich habe jetzt zumindest keinen gröberen Denkfehler entdeckt ;)

    Das Protokoll auf Software- wie Hardware-Ebene sollte die/eine Library managen ... deshalb meine Frage nach der Lib ... man muss ja nicht immer alles neu erfinden ;)

    cu,
    -ds-

  • Hallöle,


    ...
    ... Wenn du dazu was hast, gerne her damit :)
    ...

    Das -> hier <- hatte ich mal ausgegraben.
    Und für den Arduino das -> hier <- ...
    Und dann noch, zwar schon relativ alt, das -> hier <- ... auch für den Arduino ...


    ...
    ... schon mal über einen CAN-Bus nachgedacht?
    ...


    wär imho auch eine Möglichkeit ... ich finde die RS485-Variante allerdings einfacher

    cu,
    -ds-

  • Hi Fliegenhals ...
    ich denke wir werden das jetzt mal in einem neuen Thread über RS485 realisieren ... ist für mich auch Neuland - RS485 war zwar immer schon geplant aber praktisch angewandt ... nö :) ...
    Bin mal gespannt ... ein bisschen Abwechslung und mal was Neues.

    cu,
    -ds-


  • Hi Fliegenhals ...
    ich denke wir werden das jetzt mal in einem neuen Thread über RS485 realisieren ... ist für mich auch Neuland - RS485 war zwar immer schon geplant aber praktisch angewandt ... nö :) ...
    Bin mal gespannt ... ein bisschen Abwechslung und mal was Neues.

    cu,
    -ds-

    Ich kann eigendlich gar nicht glauben ( bei deinem Basteltrieb ), dass Du noch nix mit der RS485 gemacht hast. Bin aber auch gespannt, was Du noch so alles "ausbuddelst". :thumbs1:

  • Ja ne ... ich kann's selber kaum glauben ;) ...
    Ich bin seit einiger Zeit mit einer Funk-Vernetzungsgeschichte ziemlich eingespannt. Da war nix mit Basteltrieb in den letzten Wochen :) ...
    Und mit einem Mehrzweck-Board für den Arduino hab' ich mich in Sachen Hardware festgefahren ...
    Alles in allem: die Lage ist hoffnungslos :lol:

    Das Zauberwort heisst wohl MODBUS. Da hab' ich schon mal eine Menge Kram für den Raspi, den Arduino und allgemein für Ubuntu ( ja, auch mein Lieblings-Laptop muss hin und wieder für Experimente herhalten :) ) zusammengetragen und teilweise schon installiert.
    JumpY macht wohl morgen einen neuen Thread auf. Da kommen dann entsprechend Schaltung(en), Download-Links ... rein - damit das nachvollziehbar ist.
    Sieht aber imho im Moment noch schlimmer aus, als es dann wohl in Wirklichkeit ist.

    cu,
    -ds-

Jetzt mitmachen!

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