Hauptmenü

Arduinos mit I2C verbinden

Begonnen von tresa, 11 September 2014, 10:38:01

Vorheriges Thema - Nächstes Thema

tresa

Hallo zusammen,

ich will gerne 2 Arduinos mit I2C verbinden. Auf dem einen läuft ein Arduino Programm mit dem ich verschiedene Werte über das SMA Protokoll von 2 Stromzählern auslese Zähler 1 Daten von der PV und Zähler 2 Daten vom Hausanschlusszähler.
Jetzt würde ich gerne diese 4 Werte an Fhem übertragen. Da habe ich bereits einen zweiten Arduino mittels FIRMATA angebunden.
Jetzt wäre meine Idee, dass ich die beiden Arduinos über I2C verbinde und dann die Daten über FRM_I2C an Fhem auslesen kann.
Hat das schon mal jemand gemacht, bzw. weiß jemand ob das Möglich ist, dass man z.B. vier Werte übertragen kann?
Kann mir da jemand einen Ansatz geben wie ich das realisieren kann?

Grüße
Tresa



hexenmeister

Hm... Dafür ist I2C eigentlich nicht da... Inter IC Communication eben.  Also Kommunikation zwischen ICs, die sich auf
einer Platine befinden. Allein die Max. Länge ist sehr begrenzt. Länger geht mir speziellen Extender. Paar (Dutzend) Meter wären schon möglich, aber eigentlich wäre für diese Zwecke besser RS422/RS485 geeignet.

Davon abgesehen, von einer Firmata-Unterstützung für I2C to I2C habe ich bis jetzt noch nichts gehört ;)

Müssen es unbedings 2 Arduinos sein, wie wäre es z.B. mit einer Ethernet-Firmata?

ntruchsess

ich denke, dass sollte schon funktionieren, der 2. Arduino muss halt einen I2C-slave darstellen, der den/die gewünschten Werte als RegisterInhalte unter der gewünschten I2C Adresse bereitstellt. (@Alexander: auf dem 2. Arduino läuft natürlich keine Firmata, sondern ein eigener Sketch). Das ist ziemlich genau das, was FRM_I2C kann. ggf. muss ich das Modul noch ein bisschen aufbohren, dass es mehrere RegisterInhalte separat zugreifbar macht. Fang halt erst mal mit einem Wert an (das kann FRM_I2C schon jetzt) und wenn das klappt, erweitern wir das auf mehrere Werte. Ich halte das für eine relativ elegante Lösung in eigenen Sketches ermittelte Werte auszuwerten.

Gruß,
Norbert
while (!asleep()) {sheep++};

hexenmeister

Ja, das habe ich mir schon gedacht, das mit den eigenem Sketch. Nach Deiner Erklährung sehe ich auch, wie das funktionierne kann. Ist vielleicht in der Tat eine recht einfach unzusetzende Lösung. Bleibt nur noch das Problem der begrenzten Länge. Was schafft man ohne Extender noch stabil? 70-100 cm?

Grüße,

Alexander


ntruchsess

was spricht dagegen die beiden Arduinos direkt nebeneinander zu platzieren und die lange Verbindung zwischen PC und Arduino zu haben? (wahlweise USB oder Ethernet)

Gruß,
Norbert
while (!asleep()) {sheep++};

hexenmeister

Ja, eingentlich nichts, aber dann könnte man gleich Firmata-Sketch erweitern. Ok, etwas mehr aufwand und man kann nicht einfach bestehenden nehmen, aber dafür spart man sich eine Arduino. Also ca. ganze 2 Euro ;)

tresa

Danke mal für eure Antworten, also die beiden Arduinos sind nebeneinander also wegen der Entfernung ist das kein Problem. Ich teste das mal heute Nachmittag. Mit dem FRM_I2C.

Gruß
Tresa

tresa

So jetzt habe ich das mal getestet, aber leider bekomme im FRM_I2C keinen Wert angezeigt.

Zum Test habe ich mal das Arduino Beispiel mit Wire genommen. Also slave_sender und master_reader mit den Arduinos funktionieren.
Mein nächster Test war dann slave_sender auf dem 2. Arduino und dann FRM_I2C mit Fhem aber da kommen keine Daten an. Bzw. mir ist noch nicht ganz klar, wie ich FRM_I2C konfigurieren muss. Welchen Wert muss ich bei Register angeben?

Grüße
Tresa