Posts by JumpY

    Hallo zusammen,
    hier ensteht nach und nach eine Dokumentation über eine Kommunikation zwischen Raspberry Pi und Arduino über RS485. Ziel der ganze Sache ist es eine stabile Verbindung zwischen mehreren Arduinos/Raspberrys über eine längere Strecke sicherzustellen. In einem konkreten Fall, der ausgiebig getestet und hier vorgestellt wird geht es grundsätzlich um folgende Komponenten:


    - 3x Arduino Nano (+ TTL -> RS485 Modul | MAX485)
    - 1x Raspberry Pi 2 (+ RS485 USB Converter)
    - evtl. Pegelwandler für 5V->3.3V für GPIO Anwendung (Kommt später hinzu)


    Aktueller Stand des Aufbaus ist auf dem Fritzing Plan zu sehen, dieser wird laufende aktualisiert, wenn Änderungen vorgenommen werden. Das ganze wird über eine 2-Draht RS485 Verbindung realisiert, als Kommunikationsprotokoll ist MODBUS vorgesehen.


    [Blocked Image: http://abload.de/img/rs485_steckplatinet4u5i.jpg]
    Das genaue Modul war nicht verfügbar, die Belegung des Chips sollte aber identisch sein. Die Anschlüsse DE+RE wurden gebrückt an den Arduino angeschlossen, der USB Converter am Raspberry Pi ist in wirklichkeit nur 2-polig!


    Dieses Projekt wird aktuell dreamshader und mir durchgeführt. Bei Interesse ist jede Beteiligung natürlich erwünscht, bitte wichtige Informationen an mich weiterleiten damit diese hier im Startpost dauerhaft aktualisiert werden können, damit eine schöne Dokumentation für jeden vollständig einsehbar ist!


    Gruß
    JumpY


    Stand: 01.04.2015


    Linksammlung: Diskussionsthread Übertragunsarten | Ergebnis: RS485

    CAN-Bus hatte irgendjemand von abgeraten, mitlerweile sind die ganzen RS485 Sachen ja auch da, sollte sich ja auch so umsetzen lassen.


    Danke für die Links, dann werde ich mein Glück damit mal versuchen.

    Bislang habe ich auf dem Pi nur mit einer normalen seriellen Konsole gearbeitet, also ohne Script. Ich habe noch keine feste Library gefunden, zumindest keine wo ich weiß, dass diese dafür geeignet ist. Wenn du dazu was hast, gerne her damit :)


    Gruß

    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


    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:

    Ich habe jetzt mit jemandem im Chat gesprochen, wenn ich alles richtig drin habe jetzt, gibts bei RS485 ja ebenfalls Probleme. Und zwar:
    Die Arduinos stellen ja zusammen mit der Ausleseeinheit die "Lesestation" dar. Dadurch wird z.B. ein 8 Stelliger Code ermittelt, der auf Wahr/Falsch geprüft werden soll. 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.
    Möglich wäre es noch, dass der Master per Nachricht an alle 3 Slaves die Zutrittsberechtigten Codes sendet. Dies würde dann nur einmal passieren und bei jeder Änderung der Codes, wäre also umsetzbar.
    Jetzt habe ich aber ja noch folgende Probleme:
    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. (Weiß zwar nicht was das ist, aber scheint ein Problem zu sein).


    Ist das genau so, oder gibts da simple umzusetzende Sachen zu? Wenn ich die Methode mit den Codes pushen vom Master aus nur bei Änderung mache, bräuchte ich noch eine Möglichkeit um eine "Zutrittsausfzeichnung" zu machen. 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 das nun wirklich alles nicht geht, vielleicht halt doch Ethernet. Kostet deutlich mehr für etwas was ich eigentlich ja garnicht so wirklich brauche, Zeit für 2 Monate auf China zu warten ist eigentlich nicht, da das ganze möglich zeitlich umgesetzt werden soll/muss.. Wäre es mit Ethernet einfacher umzusetzen oder stehe ich da nachher vor den gleichen Problemen?


    Ich hoffe ihr versteht was ich genau meine und könnt darauf nochmal eingehen.


    Vielen Dank nochmal! ;)


    EDIT: Wie ich jetzt nochmal gefragt habe, scheints zu gehen RS485 soll keine 5V auf der Leitung haben. Dementsprechend werde ich mir die Sachen zulegen und das auch mal testen.

    Also die generelle Kommunikation mit einem Arduino und Pi per I2C funktioniert, habe gerade testweise ein ~20m Cat Kabel eingesteckt, da kommt allerdings nichtsmehr an... Ich werde das morgen nochmal testen, das war gerade nur gebastel könnte auch daran gelegen haben.
    Ich werde mir die verschiedenen Systeme mal durchlesen, gibt es dabei Geschwindigkeitsunterschiede? Wenn ich jetzt 3 dieser USB/RS485 Wandler nutze hätte ich nurnoch 1 USB Frei, falls da noch was erweitert wird, oder reicht ein Wandler und alle 3 Arduinos können über eine RS485 Leitung gehen? Kenne mich damit wie schon gesagt nicht sonderlich aus, ob das alles auseinander zu halten ist welcher Arduino da gerade anspricht.

    So, hier bin ich wieder:
    USB fällt weg, soweit ich mich erinner ist USB auch absolut nicht für diese Entfernungen geeignet. Ich möchte nochmal erwähnen, dass die Sache über Kabel laufen soll und die Kommunikation bei ~15m stabil und zügig laufen soll!


    I2C .. Das hatte ich auch so überall mal gelesen, konnte aber bislang nichts richtiges damit anfangen. Da ich mir (wie oben angesprochen) noch Arduinos & sonstiges bestellen muss, bitte auch dazu um kurze Einschätzung:


    - Müssen bei I2C die Arduinos durch einen Spannungswandler bearbeitet werden? Normalerweise läuft dort ja alles in 5V, der Pi aber auf 3,3V. Bei serieller Übertragung (TX/RX) muss das ja aufjedenfall begrenzt werden, sonst zerschießt man die Ports sofort. Wenn das bei I2C auch so ist (wovon ich ausgehe), gibt es alternative µC mit 3,3V oder aber wandel ich das einfach?
    - Wenn gewandelt wird: Werden alle 3 Arduinos am Input auf eine Schnittstelle für den Pi gelegt, also bräuchte ich nur einen Wandler von 5V auf 3,3V oder muss ich jedes Signal einzelnd wandeln, weil jedes auf einer anderen Schnittstelle am Pi liegt? Kenne mich mit I2C nicht aus wie das gehandhabt wird.
    - Ist die Leitungslänge (15m!!!) für I2C kein Problem?
    - Wie würde ich 3 Arduinos gleichzeitig anklemmen? Alle 3 Leitungen einfach zusammenführen am Pi eingang, oder muss ich da was bestimmtes machen. (In der Regel wird nur von einem ein Signal gesendet, wäre warscheinlich auch Müll wenn 2 gleichzeitig senden, oder würde das sogar gehen?)


    Da ich noch Sachen bestellen muss für eine Festinstallation, bitte da sagen wieviele Spannungswandler ich brauche. Dann würde ich mir auch 3 Nano Arduinos bestellen, die sind in der Wand deutlich besser zu verstecken. Sonst noch was, was ich unbedingt benötige für erste Tests?


    Gruß

    Ach, hatte ich garnicht genannt: Wenn möglich eine Verbindung über Draht! Es ist überall Platz einen Kabel dort hin zu legen (muss sowieso noch Strom durchziehen) & das ganze erscheint mir weniger anfällig für Störungen.

    Hallo,
    der Pi soll später auch noch weiter verwendet werden (so zumindest meine Überlegung dazu). Wenn ich diesen jetzt fertig installiere und eingebaut habe, lassen sich damit leicht andere Sachen umsetzen (Lichtsteuerung o.ä.). Natürlich könnte das auch ein Arduino an dieser Stelle übernehmen, wünsche mir aber eigentlich gerne den Pi dort.
    Du meinst also komplett anders herum, dass die "Haupteinheit" alle 3 Leseeinheiten abfragt und auf Reaktion wartet und nicht, dass die Leseeinheiten bei der Hauptstation einen abgleich machen? Gibt es dafür einen besonderen Grund, oder ist das vollkommen egal wie das passiert.


    Die "Datenbank" kann natürlich auch einfach eine Textdatei sein, zum testen sowieso. Geht nur darum, wie ich die Kommunikation umsetze, also Client fragt mit Kennung XY und Server prüft dies.

    Hallo zusammen,
    ich bin aktuell an einem Projektaufbau am arbeiten, bevor ich aber jetzt in die völlig falsche Richtung arbeite frage ich schonmal nach, später werde ich das Projekt (wenn's dann läuft) auch hier veröffentlichen, damit alle was davon haben.


    Ich möchte mehrere Mikrocontroller mit einer zentralen Einheit verbinden um dort etwas abzufragen. Aktuell sieht das ganze wie folgt aus:


    - 3x Arduino Uno
    - 1x Raspberry Pi


    Die 3 Arduinos stellen die Ausleseeinheit für RFID Tags, der Pi soll die zentrale Einheit des Systems werden. An jeder zu steuernden Tür hängt ein RFID Leser zusammen mit einem Arduino Uno. Dieser liest den Tag aus und speichert die benötigten Informationen in einer Variablen.
    Da für jede Tür die gleichen Tags gültig sein sollen und ich nicht bei jeder Änderung an jeden Arduino ran möchte, soll der Zugang über den Pi geregelt werden. Das heißt, die Arduinos sollen bei erfolgreichem lesen automatisch am Pi nachfragen ob diese ID eine Zutrittsberechtigung hat --> Der Pi soll dann nur Ja/Nein antworten und der Arduino soll entsprechend Türöffner bedienen oder eben nicht.


    Dazu dachte ich eine kleine Datenbank auf dem Pi anzulegen, worin die ganzen Informationen gespeichert sind. Diese sollen später von überall verändert werden können, also irgendwie mit Netzwerkanbindung über eine Eingabemaske, dass ist aber alles spätere Entwicklung und relativ einfach umgesetzt.


    Die Entfernung von den Arduinos zum Pi ist zwischen 5 und 15 Meter. Wie bekomme ich da jetzt eine stabile und möglichst schnelle Verbindung hin? Ich kenne mich mit den nutzbaren Übertragunssystemen garnicht aus, also CAN/i2c und was es da alles gibt...
    Wenn jemand mir zumindest sagen kann, welche Übertragung überhaupt geeignet ist würde ich mich schon sehr freuen, vielleicht hat ja jemand einen passenden Tutorial/Projektlink verfügbar ;)


    ---------------------------------------------------------------------------------


    Es ist auch möglich die Geräte zu ersetzen. Aktuell habe ich das alles hier, weil es eben in meinem Besitz ist, ich kann aber auch gerne auf andere Sachen umschwenken. Ich gehe davon aus, dass ein vollständiger Uno sowieso überdimensioniert ist, für eine fertige Lösung benötige ich doch fast nur einen einzelnen µC oder sehe ich das falsch? Desdo kleiner das ganze wird, desdo besser eigentlich, da nicht unendlich viel Platz vorhanden ist. Wenn jemand Erfahrung damit hat löte ich mir auch gerne eine kleine Sache zurecht oder kaufe andere Arduinos (vielleicht Arduino Nano???).


    Gruß
    JumpY

    Hallo @ kosch,
    bin gerade dabei so etwas zu bauen, allerdings für RFID Chips, unterscheidet sich aber ja nicht all zu viel (Frequenz und somit Lesegeräte sind natürlich unterschiedlich).
    Ich weiß allerdings nicht genau wie NFC sich bei 2cm Holz schlägt, ich glaube zu wissen, dass NFC in der Regel eine noch kleine Weichreite hat als normale RFID 125khz Tags, ist aber ja einfach zu testen.
    Wenn du alles von Innen anbringen willst bist du aufjedenfall auf der "sicheren Seite", da müsste man dann testen ob es durch das Holz zufriedenstellend durchgeht. Falls nicht, bitte nur die Leseeinheit außen anbringen und den Rest nach Innen. Schau dir "PN532 NFC RFID Reader/Writer" mal an, gibt da etliche verschiedene Ausführungen. Der Raspberry Pi würde sich bei nur dieser Anwendung natürlich enorm langweilen, dieser müsste lediglich abfragen ob ein NFC Tag in Reichweite ist, wenn ja automatisch die Prüfung ausführen und bei Übereinstimmung den Türsummer ansteuern. Für das ganze dann einen zeitlichen Rahmen festlegen, wann die Prüfung überhaupt nur ausgeführt werden soll.


    Solltest du (weswegen auch immer), doch in Richtung 125khz RFID tendieren, ich habe gerade etwas zu Testzwecken bestellt, meine Fortschritte dazu stehen dann in Zukunft hier: http://www.mikrocontroller.net/topic/360924


    Gruß