Ich würde gerne 4 Arduino Unos untereinander kommunizieren lassen. Ich würde gerne einen als "Master" laufen lassen, der alle Daten empfängt, auswertet und Daten sendet. Dann würde ich gerne die anderen als "Slave" laufen lassen. Einer von ihnen soll Daten sammeln, via Sensoren und diese Daten dann an den Master schicken. Die anderen zwei sollen Relais usw. ansteuern. Sie bekommen die Befehle vom Master, also wann sie etwas an und aus schalten sollen.
Ich hoffe ihr versteht auf was ich hinaus will...
Ich habe keinerlei Erfahrung in dieser Richtung. Die Grundlagen eines Arduinos habe ich verstanden, aber solche Dinge wie in meiner jetzigen Frage, weiß ich nicht.
So, nun zu meinen Fragen.
Kann das so überhaupt funktionieren, wie ich mir das ganze vorstelle?
Wenn nein, was muss ich ändern dass das Ganze funktioniert?
Wie "verdrahte" ich die einzelnen Arduinos untereinander?
Welche Anschlüsse/Pins der einzelnen Arduinos muss ich verwenden?
Wie muss ich das Programm schreiben?
Falls ihr sonst noch Anregungen, Tipps, usw. zu dem Thema habt, würde ich mich sehr über Antworten freuen.
Hat vielleicht jemand eine Internetseite oder ein Video wo das ganze Thema besser erklärt wird?
Ich bedanke mich schon mal ganz herzlich im voraus. Ich hoffe ich habe den Rahmen nicht gesprengt.
Da ist noch eine wesentliche Frage offen: Wie weit sollen die Arduinos räumlich auseinander liegen?
Wenn sie nahe beieinander sind, könntest Du I2C als Bus nehmen.
Der Master ist nicht nur die Zentrale, er bestimmt dabei auch wann welcher Slave "reden" darf. Der "Mess-Slave" könnte aber auch über eine zusätzliche Leitung signalisieren, dass er neue Messwerte hat.
I2C ist für mich in diesem Fall auch die erste Wahl.
In diesem Beitrag findest du viele Beispiele, die du für dein Projekt nutzen kannst.
Und wie Tommy schon schrieb, wenn der Slave von sich aus Daten senden muss, musst du den Master per IRQ auffordern, die Daten vom Slave abzuholen.
Ihr habt von I2C als Bus geredet. Ist der Bus die 6 Pins, die einzeln auf dem Board sind?
Und du hast geschrieben, dass der Mess-Slave über eine zusätzliche Leitung signalisieren kann, dass er neue Daten hat. Wie genau ist das mit der zusätzlichen Leitung gemeint?
Nein, das ist SPI.
I2C liegt beim UNO auf A4/A5, beim MEGA auf D29/D31. D20 und D21
Wenn der MessSlave neue Werte hat, legt er z.B. einen Pin kurzzeitig auf Low. Dieser Pin geht zu einem Eingang des Masters und löst dort einen Interrupt aus, der eine Variable setzt, so dass im nächsten Loop-Durchlauf die Daten vom MessSlave abgeholt werden können.
Es geht auch ohne Interrupt, wenn man es etwas anders macht.
Gruß Tommy
[EDIT] I2C Pins des Mega korrigiert. Uwe, Moderator [/EDIT]
Bei SPI werden neben GND für den Bus SCK, MISO und MOSI benötigt, und für jeden Slave eine eigene CS Leitung, und bei Bedarf auch eine INT Leitung, die signalisiert daß Daten vorhanden sind.
Bei I2C braucht man kein CS und keinen extra Interrupt, wenn ein Slave Daten verfügbar hat; er kann dann die Daten direkt über I2C abschicken. Damit kommt so ein Bus mit der minimalen Anzahl von Strippen aus, ist aber in seiner Länge beschränkt.
DrDiettrich:
Bei SPI werden neben GND für den Bus SCK, MISO und MOSI benötigt, und für jeden Slave eine eigene CS Leitung, und bei Bedarf auch eine INT Leitung, die signalisiert daß Daten vorhanden sind.
Bei I2C braucht man kein CS und keinen extra Interrupt, wenn ein Slave Daten verfügbar hat; er kann dann die Daten direkt über I2C abschicken. Damit kommt so ein Bus mit der minimalen Anzahl von Strippen aus, ist aber in seiner Länge beschränkt.
Multimaster halte ich für den Einstieg nicht unbedingt geeignet, falls Du das gemeint haben solltest.
Leon-Ranger:
.....
Ihr habt von I2C als Bus geredet. Ist der Bus die 6 Pins, die einzeln auf dem Board sind?
Und du hast geschrieben, dass der Mess-Slave über eine zusätzliche Leitung signalisieren kann, dass er neue Daten hat. Wie genau ist das mit der zusätzlichen Leitung gemeint?
Warum liest du nicht den von mir zitierten Beitrag ?
Ich tendere auch zu einem Arduino MEGA2560 da dieser nur 2 Pins weniger hat als 4 UNOs. Der Mega hat 70 Pins während 4 UNOS 80 Pins haben, aber wegen der Vernetzung je 2 besetzt sind also im Endeffekt nur 72 zur Verfügung stehen.
Durch den MEGA entfällt die Master/Slave Protoll-Verbindung und der Sketch wird viel einfacher.
Laut Projektbeschreibung soll auf den Slaves keine Datenverarbeitung erfolgen und darum ist für mich 1 Mega 2560 die beste Lösung.
Sollten unerwartet dennoch zuwenig Pins vorhanden sein können I2C oder SPI Expander pins on mass bereitstellen.
Da noch nicht wirklich bekannt ist, was die UNOs so Alles nebenbei machen sollen, wenn der Messwert fertig ermittelt ist, könnte ich mir durchaus vorstellen, daß man Denen noch genug Arbeit aufhalsen kann, daß die Lösung einzelner 'Knoten' durchaus berechtigt sein kann.
Muß aber nicht
@Leon-Ranger
Was soll's werden, wenn's fertig ist?
Was hast Du bereits am Laufen und warum kann sich der Master nicht selber um die Temperatur kümmern? (sofern die Sensor-Abfrage die einzige Aufgabe des einen UNO ist).