Forum: Mikrocontroller und Digitale Elektronik Raspberry Pi + Arduino Kommunikation Hausautomatisierung


von Dominik M. (dominik2000)


Lesenswert?

Hallo,

ich beschäftige mich derzeit mit dem Thema Hausautomatisierung im 
Zusammenhang mit Raspberry und Arduino.

Der Raspberry übernimmt die Rolle der Zentralen Steuereinheit, der 
Arduino (in jedem Stock einer?) die Rolle des Schaltens der Lampen usw. 
Außerdem sind am Arduino auch die Sensoren angeschlossen.

Ich überlege nun, wie ich die Kommunikation zwischen Raspberry und 
Arduino bewerkstellige. Ich könnte per USB kommunizieren, habe hier aber 
das Problem, dass ich nur einen Arduino (max. 2) an den Raspberry 
anhängen kann.

Bessere Lösung wäre meiner Meinung I2C, somit kann ich einige Arduinos 
ansteuern.
Aber hier gibt es ein anderes Problem. In einigen Beiträgen hier steht, 
dass es Relaiskarten mit SPI oder eben I2C Anschluss gibt, und man diese 
eher verwenden sollte, als 1:1 Ports des Arduinos mit denen der 
Relaiskarte zu verbinden. Anderer Vorteil ist natürlich, dass man auch 
nur einen "kleineren" Arduino braucht und vielleicht keinen MEGA 
verwenden muss.
Nur belegt meine Kommunikation mit dem Raspberry ja schon den I2C 
Port... Hier habe ich also das Problem, dass mein I2C Port schon 
anderwertig belegt ist. Außerdem haben vielleicht auch Sensoren einen 
I2C Port. Wie kann ich das lösen?

Lg
Dominik

von Dr. Sommer (Gast)


Lesenswert?

Sowohl I²C als auch USB sind schwierig für Kommunikation über derart 
lange Wege. USB ist aufwändig, aber differentiell hat Vorteile, schau 
mal unter Hausbus, da wären z.B. CAN, EIB, RS-485.

von PittyJ (Gast)


Lesenswert?

USB ist auf 5 Meter beschränkt. Und auch bei i2C würde ich nicht mehr 
als 2 Meter nehmen. Fällt im Prinzip alles flach, was onboard ist.

Am einfachsten wäre wohl noch WLAN. Adapter und Shields gibt es ja zu 
kaufen.

von Wolfgang (Gast)


Lesenswert?

Dominik Mimler schrieb:
> Nur belegt meine Kommunikation mit dem Raspberry ja schon den I2C
> Port... Hier habe ich also das Problem, dass mein I2C Port schon
> anderwertig belegt ist.

I2C ist ein Bus. Wenn du den schon mit einem Kommunikationspartner so 
zustopfst, dass da nix mehr geht, solltest du die auszutauschenden 
Dateninhalte etwas reduzieren.

von Max H. (hartl192)


Lesenswert?

Ich würde RS-485 verwenden. Der RPi ist der Master, die Arduinos sind 
die Slaves. Der Master fragt alle Slaves nacheinander ab, um Messwerte 
einzulesen, und sendet eventuelle Befehle.
Ich würde in jeder gesendeten Nachricht des Masters das erste Byte ein 
Startbyte und das zweite die Adresse des Slaves sein lassen. Dann kommt 
der Befehlz zum Senden de Messwerte oder ein Licht einzuschalten...
Wenn der Slave dann seine Adresse und die Aufforderung zum Sender erhält 
sendet er die Werte an den RPi

: Bearbeitet durch User
von Conny G. (conny_g)


Lesenswert?

Hallo Dominick,

ich habe eine Schaltung mit ATMega328 per UART am Raspberry Pi, die über 
RFM12 Funkbefehle an Satellitenschaltungen mit ATMega8 oder ATMega328 
schickt und die Antworten der Module wieder an den Raspberry Pi.
Sind keine Arduinos, sondern selbst gemacht, aber das liesse sich 
genauso mit Arduino lösen - es gibt sicher ein Shield für Arduino mit 
RFM12.

Mal kurz gesucht:
http://jeelabs.org/2011/02/02/meet-the-rfm12b-board/
http://arduino-praxis.ch/2012/10/experimente-mit-rfm12b-shield/
http://openenergymonitor.org/emon/node/271

Versorge eine ganze Etage mit Funkbefehlen, sogar vom 2. OG ans andere 
Ende des Gartens (40 Meter?) reicht es - mit den richtigen Antennen.

Vg,
Conny

von Dr. Sommer (Gast)


Lesenswert?

M. H. schrieb:
> Ich würde jeder in gesendeten Nachricht des Masters das erste Byte ein
> Startbyte und das zweite die Adresse des Slaves sein lassen und dann
> kommt der Befehlz zum Senden de Messwerte oder ein Licht
> einzuschalten...
> Wenn der Slave dann seine Adresse und die Aufforderung zum Sender erhält
> sendet er die Werte an den RPi
Ein CAN-Controller macht das alles quasi automatisch, was die 
Implementierung stark vereinfacht...

von Max H. (hartl192)


Lesenswert?

Dr. Sommer schrieb:
> Ein CAN-Controller macht das alles quasi automatisch, was die
> Implementierung stark vereinfacht...

Wenn man UART schon kann, muss man nur ein bisschen Programmieren und 
sich nicht in den CAN-Bus einarbeiten.

von Dr. Sommer (Gast)


Lesenswert?

M. H. schrieb:
> Wenn man UART schon kann, muss man nur ein bisschen Programmieren und
> sich nicht in den CAN-Bus einarbeiten.
Ist die große Frage, ob das Programmieren und Testen mehr Aufwand ist 
als den Wikipedia-Artikel zu CAN durchzulesen...

von Max H. (hartl192)


Lesenswert?

Dr. Sommer schrieb:
> Ist die große Frage, ob das Programmieren und Testen mehr Aufwand ist
> als den Wikipedia-Artikel zu CAN durchzulesen...

Und CAN muss man auch Programmieren und Testen...

von Dr. Sommer (Gast)


Lesenswert?

M. H. schrieb:
> Und CAN muss man auch Programmieren und Testen...
Ja, da aber die Message-ID-Filterung, Arbitrierung (inkl. Vermeidung von 
gleichzeitigem Senden von mehreren Seiten), Checksum-Berechnung macht 
alles die Hardware, daher fällt das wesentlich einfacher aus. Im 
Endeffekt packt man die Nutzdaten (Kommando ala "Licht an" oder 
Messwerte) in ein Register und der Rest geht automatisch, man braucht 
kein Protokoll zu implementieren.

von Fachmann (Gast)


Lesenswert?

Ich empfehle Modbus TCP.

von Dominik M. (dominik2000)


Lesenswert?

Also, wenn ich das hier so zusammenfasse: I²C und USB sind unbrauchbar 
für meine Zwecke, aufgrund der Leitungslänge.

Möglichkeiten sind RFM12, CAN und RS-485.
RFM12: Ich möchte derzeit noch kein Funkmodul nutzen (In der späteren 
Ausbaustufe schon, um auch Funksteckdosen steuern zu können).

RS-485: Hier muss ich das Protokoll selber programmieren -> Mehr Aufwand
CAN: Protokoll und Shields vorhanden -> Mehr Kosten

Ich kann es mir also aussuchen :) Wie lange dauert es erfahrungsgemäß 
ein funktionierendes Protokoll in RS-485 auf die Beine zu stellen?
CAN wird sicher eine geringere Einarbeitungszeit haben, da durch die 
Controller schonmal vieles wegfällt.

Danke!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.