Verbingung von zwei Arduinos - Werte über Digitalpins übergeben

Hallo,

ich habe eine (wahrscheinlich) triviale Frage, aber ich komme leider derzeit auf keine Lösung die funktioniert.

Ich würde gerne von einem Arduino den Wert eines Digitalpins (LOW oder HIGH) an einen anderen Arduino übergeben.

Ich habe schon gelesen, dass man für die Datenkommunikation zwei Arduinos zwar komplett über I2C verbinden kann, das ist für dieses Projekt aber ein übertriebener Aufwand (programmiertechnisch).

Ich habe einfach nur einen Digitalpin der den Zustand high oder low hat und diesen Wert will ich mit einem anderen Arduino abgreifen.

Ich hätte beim Sender-Arduino den gewünschten Digitalpin auf Output gesetzt und beim Empfänger-Arduino den gewünschten Digitalpin auf Input, aber es funktioniert nicht.

Der Sender-Arduino hat am Outputpin LOW aber sobald ich das Kabel beim Empfänger-Arduino anstecke, wechselt der Wert beim Inputpin auf HIGH.

Bitte um Hilfe.

Bitte einen Schaltplan!

Vorerst gibt es viele verrückte Möglichkeiten, was Du alles falsch gemacht haben könntest, die mir nicht alle einfallen.

Hast Du NUR den jeweiligen Digital-Pin der beiden Arduinos verbunden? es ist nämlich notwendig, auch den GND beider Arduinos miteinander zu verbinden, damit der empfangende Arduino ein Bezugspotential bekommt, sonst funktioniert das nicht (oder zumindest nicht zuverlässig).

So sieht das aus:
@Deltaflyer, ja Ground ist verbunden.

Die 3,3V darfst Du auf keinen Fall verbinden.
Wie werden die beiden Arduinos versorgt? Hängen die an USB?

Wie hast Du das festgestellt? Gemessen oder per Programm? Zeig uns mal die beiden Sketche.

Ich bitte um Entschuldigung für die Verwirrung, es sind in meinem Fall keine zwei Arduino UNO sondern ein Arduino UNO und ein D1 Mini mit ESP8266, der meines Wissens ja mit 3,3 V versorgt werden muss. Da ich in Fritzing kein passendes Board gefunden habe, dachte ich zur Veranschaulichung geht es auch so.

Der UNO ist an USB angeschlossen, der D1 vom UNO über 3,3V und Ground verbunden.

Da ich am D1 schon ein größeres Programm laufen habe, wo ich diese Funktion nur noch als Erweiterung brauche, macht es keinen Sinn den gesamten Code zu posten, aber dieser Code ist am D1 Mini (mit allem vor dem LOOP was notwendig ist):

digitalWrite(3, LOW);

Dieser Code am UNO:

inPin7=digitalRead(7);

Und der Digitalpin 3 vom D1 ist mit dem Digitalpin 7 vom UNO verbunden.

Am Pin 7 hab ich manchmal 0 manchmal 1 im Programm angezeigt, aber nichts Stabiles mit dem ich arbeiten kann.

Das kann nicht funktionieren. Der D1 braucht eine richtige Stromversorgung.

OK, werde ich morgen probieren und mich dann wieder melden, ob es bzw. welche Neuigkeiten es gibt.

Danke einstweilen für die Hilfsbereitschaft.

@michael_z
Du kannst die 5Volt vom Uno an die 5Volt des ESP8266 anschließen. Aber du brauchst für die Datenleitung einen Spannungsteiler, der die 5Volt aus dem Uno auf 3,3Volt für den ESP8266 herunter teilt. Anders geht der Pin des ESP defekt. Der verträgt nur 3,3Volt.

2 Likes

Wenn ich das

richtig verstehe, ist der D1 'output' und der UNO 'Input'. Wobei es sein kann, dass der Output des D1 nicht ausreicht, um den Eingang des UNO zuverlässig auf HIGH zu bringen. Das ist grenzwertig - je nach Vcc von UNO und D1.

Ja, ist auch möglich.
Ich musste den Text 3 mal lesen und habe es nicht verstanden.
Hier

war für mich eigentlich klar, dass der ESP8266 der "Empfänger" sein sollte.
Der TO kann uns ja mal aufklären.

Sollte es anders herum sein, würde ich zur Sicherheit der Stabilität einen Transistor zwischen schalten. Der kann nicht schaden.

Zudem sollte der TO mal mitteilen, was genau der Uno dann machen soll.
Dann müssen wir nicht immer im Nebel stochern.

Bitte entschuldigt die ganze Verwirrung gestern Abend, ich habe den Fehler schon gefunden.

Bei einem "normalen" Arduino UNO, MEGA usw. spricht man die Digitalpins ja einfach mit den Ziffern an, also z.B. durch

digitalWrite(3, LOW);

Was ich nicht wusste war, dass das beim D1 nicht funktioniert, aber wenn man stattdessen so den Code schreibt:

digitalWrite(D3, LOW);

dann funktioniert es. Wusste ich bisher nicht und bin auch nur zufällig drauf gekommen. Vielleicht hat ja jemand anderer auch das Problem und die ganze Diskussion hat so zumindest einen Zweck gehabt.

Trotzdem vielen Dank fürs Grübeln und für Hilfestellungen. Jetzt weiß

Dast aber nur die halbe Wahrheit.
Bei den ESP (ESP8266 oder ESP32) ist besser die jeweilige GPIO-Kennzeichnung zu verwenden. Diese Kennzeichnung ist bei den ESP einheitlich, somit kann es nicht zu Verwechslungen kommen.

Doch das funktioniert schon. Es bedeutet nur etwas anderes. Dx entspricht - wenn man das richtige Board auswählt - dem aufgedruckten Pin. Die 'blanke' Nummer ist - wie HotSystems schon erwähnt hat - die GPIO Nummer:

Wenn Du also

geschrieben hättest, hatte es auch funktioniert.

OK, super, dann habe ich jedenfalls etwas gelernt und hoffentlich hilft es auch anderen, die ähnliche Probleme haben.

Wieder einmal ein großes Lob an die Community, ich liebe das Forum, immer ist jemand fachkundiger zur Stelle, der oft innerhalb von Minuten weiterhilft, wirklich genial. Danke, Danke, Danke.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.