- 12V Akku mit 280 Ah bauen         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: nodeMCU an Arduino

  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650

    nodeMCU an Arduino

    Anzeige

    E-Bike
    Ich denke gerade über Möglichkeiten nach und frage daher mal, vielleicht hat jemand Erfahrung was geht und was nicht geht.

    1) Geräte wie nodeMCU mit Arduino über RX/TX verbinden?
    2) Analog Ein/Ausgänge unterschiedlicher Boards verbinden?
    3) Digital Ein/Ausgänge unterschiedlicher Boards verbinden?

    Wenn man diese 3 Möglichkeiten betrachtet, was müsste man jeweils beachten, damit nichts kaputt geht?

    Grüße

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    Grundsätzlich darauf achten dass man Boards gleicher Spannung verwendet und mit mindestens gemeinsamer Masse verbindet, besser auch mit der gleichen Versorgung

    zu 3. kann man einfach einen Widerstand dazwischen hängen. Klein genug damit evtl. verwndete PullUp oder PullDown auch sauber bedient werden und groß genug damit im Falle eines direkten Kurzschluss nicht mehr Strom fließt als die Pins/Port verkraften können. ein 5k bei 5V oder ein 3.3k bei 3.3V und man ist mit 1mA Kurzschlusstrom absolut sicher, solange die Pull UP/DOWN nicht zu klein sind, ansonsten einfach mal in das Datenblatt der Controller schauen was sie verkraften und den R etwas kleiner wählen.

    Bei Analog fehlt mir die Erfahrung aber es gibt wohl auch je nach Einstellung Eingänge die einem zu viel Spannung übel nehmen.

    Es gibt auch Controller die 5V tolerant sind und mit 5V Pegel trotz 3.3V Versorgung angesprochen werden können ohne schaden zu nehmen.

    Bei RX/TX würde ich wie bei GPIO einfach einen Widerstand dazwischen hängen für maximale Sicherheit
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Ja, so in etwa ging mir das auch durch Kopf. Bei TTLs habe ich zur Not dann Optokoppler genommen, bei Digitalen Ein/Ausgängen. Aber ich denke, das muss nicht unbedingt sein. Gleiche Spannungsversorgung vorausgesetzt. Sonst kann man die Pins ja noch messen, was dort anliegt. Aber RX/TX sollte doch funktionieren, wenn man es direkt verbindet?

    So weit ich gesehen habe, arbeitet nodeMCU ja nur mit 3.3V. Aber Arduino mit 5V.

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    es gibt Arduino Klone mit variierender Spanung, daher die Warnung

    wegen RX/TX, das ist nichts weiter als ein Schaltpin wie die GPIOs nur dass dahinter ein wenig Logik steckt die ungestört arbeitet während dein Programm die CPU beansprucht. Also würde ich da einfach die gleichen Sicherheitsmaßnahmen treffen, falls du beim verkabeln mal was vertauschst oder ein Programm den Pin unter bestimmten Umständen vll. anders bedient als du das erwartest.

    Dass du den TX des einen an den RX des anderen und umgekehrt anschließen musst ist dir aber bewusst?

    Nur weil RX auf dem Pins steht bedeutet das übrigens nicht dass der auch mal auf Ausgang als GPIO stehen kann
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Danke für die Hinweise! RX/TX über Kreuz war klar, ja.

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Der Vollständigkeit halber habe ich das heute mal ausprobiert.

    Wenn der Arduino Uno mit 3.3V betrieben wird, sollte er als LOW-Pegel 0V und als HIGH-Pegel 3.3V liefern.
    Wenn der Arduino Uno mit 5V betrieben wird, liefert er als LOW-Pegel 0V und als HIGH-Pegel 5V.

    Das nodeMCU liefert als LOW-Pegel 0V und als HIGH-Pegel 3.3V.

    Die Ausgänge des nodeMCU passen vom Pegel zum Arduino Uno. So dass man von einem nodeMCU-Ausgang direkt auf einen Arduino-Eingang gehen kann.
    Sollte der Arduino 5V-HIGH-Pegel liefern, hilft ein 732kOhm Widerstand zwischen Ausgang des Arduino und Eingang des nodeMCU. Mit den ca. 730kOhm werden die 5V auf ca. 2.8V reduziert, womit das nodeMCU gut zurecht kommt.
    820kOhm Widerstand wäre etwas gängiger in der Größe und müsste auch noch funktionieren, um einen High-Pegel über 2.4V sicherzustellen, allerdings dann als Metallschichtausführung. 680kOhm wären etwas zu wenig, wenn das nodeMCU nicht mehr als 3.3V am Eingang verträgt.
    Geändert von Moppi (15.09.2018 um 11:51 Uhr)

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    Mit den ca. 730kOhm werden die 5V auf ca. 2.8V
    kannst du mir das mal erläutern?

    Angenommen du meinst R = U / I ... dann müsste bei U 5-2,8V / R 730k = 0,003mA Strom fließen

    Angenommen der TX Ausgang wäre 5V, der RX Eingang des Empfängers ist aber undefiniert hoch, denn es ist ein Eingang, da fließt (eigentlich) kein Strom! Bestenfalls fließt Strom über Schutzdioden ab aber die sollte man am besten garnicht erst dazu bringen überhaupt durchzuschalten.

    Was du meinst wäre vermutlich ein Spannungsteiler von 5V TX auf 3.3V RX, das wäre besser berechenbar.
    Für die andere Richtung von 3.3V TX auf 5V RX würde ich das Risiko eingehen und einfach direkt anschließen, denn die meisten 5V Eingänge erkennen ab 2.7V einen High Pegel, im schlimmsten Fall empfängst du halt nichts, dann müsste man über eine Lösung dafür nachdenken aber ich bin sicher dass es funktioniert.
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Ceos, ich habe es ausprobiert Am einem Ausgang des Arduino Uno verschiedene Widerstände angeschlossen und durchgemessen, nachdem der Ausgang auf High geschaltet war. Ich weiß, dass dort kaum ein Strom fließt, das ist auch gut so. Das nodeMCU benötigt an den Eingängen offenbar nur die Spannung, keine Leistung. Um über einen Widerstand die Spannung zu reduzieren, muss dieser sehr groß gewählt sein, in Folge fließt kaum mehr ein Strom. Deshalb, wenn man Stromfluss benötigt, setzt man auch Spannungsteiler ein. Also, hier ging es mir primär um die Frage, was man an das nodeMCU anschließen kann, wie man Pegel transportiert und diese möglichst einfach anpassen kann. Das nodeMCU "misst" an einem digitalen Eingang die Spannung, geht die auf LOW-Pegel, schaltet der Eingang auf LOW um und bleibt auch auf LOW, selbst wenn man an dem Pin nichts mehr anschließt oder die Verbindung trennt. Erkennt der Eingang ein HIGH (>2.4V), dann kippt er auf HIGH um und bleibt auf HIGH. Das bezieht sich auf die digitalen Ein-/Ausgänge (nodeMCU D1 + D2, GPIO4 + CPIO5, normale I/O Pins). Manche Eingänge haben auch einen Pull-Up oder Pull-Down-Widerstand auf dem Board verbaut. TX und RX ist wieder etwas anders: TxD (GPIO1): Serieller Ausgang des ESP über 470Ω mit dem USB-UART verbunden, RxD (GPIO3) Serieller Eingang des ESP über 470Ω mit dem USB-UART verbunden.

    Nun gibt es verschiedene Ausführungen, hier die, die ich verwende:

    Klicke auf die Grafik für eine größere Ansicht

Name:	nodeMCU.jpg
Hits:	9
Größe:	68,3 KB
ID:	33637
    Geändert von Moppi (15.09.2018 um 16:05 Uhr)

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    Um über einen Widerstand die Spannung zu reduzieren, muss dieser sehr groß gewählt sein, in Folge fließt kaum mehr ein Strom
    worauf ich hinaus wollte, war dass ein Widerstand bei undefinierter Stromaufnahme (und das ist sogar von hergestelltem Chip zu Chip unterschiedlich wieviel Leckstrom dort herrscht) nichts bewirkt sondern eher unerwartete Störungen produziert, ein Spannungsteiler ist definitiv die bessere Lösung.

    Was du beschreibst ist ungefähr so als würdest du sagen, wenn ich mit einem Vorschlaghammer gegen eine Rohrleitung schlage, wird einem nach 730km nichts passieren wenn man sein Ohr direkt an die Leitung legt ... das kann stimmen, muss aber nciht, kommt drauf an wie die Leitung verlegt ist und wie gut sie dämpft ... aber es kann dir auch mal das Trommelfell zerreißen.

    Wenn ich jetzt einen definierten Strom über einen Spannungsteiler nach GND fließen lasse kann ich genau einstellen wie stark die Spannung abfällt egal ob der Chip einen Leckstrom vom 3uA, 100uA poder nur 0.5uA hat.

    Als Gesamtwiderstand wären 5V / 500uA = 10kOhm wohl Sinnvoll und das Verhältnis wäre dann 2/3, da der Leckstrom selten >50uA wird und somit nur maximal 10% Einfluss auf den Gesamtstrom und die Genauigkeit deines Spannungsteilers hat.

    also 5V TX -> 4kOhm -> 3.3V RX + 6kOhm -> GND
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Hier erst meine 1-Wire-Lösung (mit 220k- und 470kOhm-Widerstand). Damit kann der Arduino Daten zum nodeMCU schicken:

    Ausgabe vom nodeMCU serial port:
    Code:
    Hello, world: 275!
    Hello, world: 276!
    Hello, world: 277!
    Hello, world: 278!
    Hello, world: 279!
    Hello, world: 280!
    Hello, world: 281!
    Hello, world: 282!
    Hello, world: 283!
    Hello, world: 284!
    meine Beschaltung:
    Klicke auf die Grafik für eine größere Ansicht

Name:	Schaltung1.jpg
Hits:	63
Größe:	70,3 KB
ID:	33641

    Code fürs nodeMCU:
    Code:
     #include <SoftwareSerial.h>
    
    SoftwareSerial mySerial(4, 5); // RX, TX
    
    void setup() {
      
      // Open serial communications and wait for port to open:
      Serial.begin(115200);
      while (!Serial) {}
      
      // set the data rate for the SoftwareSerial port
      mySerial.begin(4800);
    }
    
    void loop() { // run over and over
      if (mySerial.available()) {
        Serial.write(mySerial.read());
      }
    }
    und Code für Arduino:
    Code:
    #include <SoftwareSerial.h>
    
    SoftwareSerial mySerial(3, 2); // RX, TX
      int a;
    
    void setup() {
      // set the data rate for the SoftwareSerial port
      mySerial.begin(4800);
    }
    
    void loop() { // run over and over
      delay(3000);
      a++;
      mySerial.print("Hello, world: ");
      mySerial.print(a);
      mySerial.println("!");
    }

    Nun muss es auch vom nodeMCU zum Arduino funktionieren, Daten zu übertragen

    Deshalb die Software auf den Geräten vertauscht und eine zweite Leitung, vom nodeMCU zum Arduino, hinzugefügt:
    Klicke auf die Grafik für eine größere Ansicht

Name:	Schaltung.jpg
Hits:	44
Größe:	78,8 KB
ID:	33642

    Ausgabe vom Arduino serial port:
    Code:
    Hello, world: 77!
    Hello, world: 78!
    Hello, world: 79!
    Code für nodeMCU:
    Code:
    #include <SoftwareSerial.h>
    
    SoftwareSerial mySerial(4, 5); // RX, TX for nodeMCU
    //SoftwareSerial mySerial(3, 2); // RX, TX for Arduino
    
      int a;
    
    void setup() {
      // set the data rate for the SoftwareSerial port
      mySerial.begin(4800);
    }
    
    void loop() { // run over and over
      delay(3000);
      a++;
      mySerial.print("Hello, world: ");
      mySerial.print(a);
      mySerial.println("!");
    }
    Code für Arduino:
    Code:
    #include <SoftwareSerial.h>
    
    //SoftwareSerial mySerial(4, 5); // RX, TX for nodeMCU
    SoftwareSerial mySerial(3, 2); // RX, TX for Arduino
    
    void setup() {
      
      // Open serial communications and wait for port to open:
      Serial.begin(115200);
      while (!Serial) {}
      
      // set the data rate for the SoftwareSerial port
      mySerial.begin(4800);
    }
    
    void loop() { // run over and over
      if (mySerial.available()) {
        Serial.write(mySerial.read());
      }
    }
    Funktioniert die Kommunikation nach den vorherigen Voraussetzungen auch per RX + TX - Pins

    Das musste ich auch noch wissen. Beide Verbindungskabel habe ich umgesteckt, so dass jetzt RX und TX vom Arduino genutzt werden können:

    Klicke auf die Grafik für eine größere Ansicht

Name:	Schaltung2.JPG
Hits:	33
Größe:	56,2 KB
ID:	33643

    Die Pins am nodeMCU bleiben dieselben, an der Beschaltung hat sich dort nichts verändert.

    Damit ich die Verbindung hin und zurück testen kann, muss der Arduino nun Daten auf dem seriellen Port lesen und wieder ausgeben. Das nodeMCU schickt die Daten und wartet, bis sie zurückkommen.

    geänderter Code für Arduino:
    Code:
    //#include <SoftwareSerial.h>
    
    //SoftwareSerial mySerial(4, 5); // RX, TX for nodeMCU
    //SoftwareSerial mySerial(3, 2); // RX, TX for Arduino
    
    void setup() {
      // set the data rate for the SoftwareSerial port
      //mySerial.begin(4800);
    
      //der Arduino arbeitet nur noch über die norm. serielle Schnittstelle
      //die wir hier zur Kommunikation öffnen
      Serial.begin(4800);
      //und dann warten wir, bis das geklappt hat
      while (!Serial) {}
    }
    
    void loop() { // run over and over
      //der Arduino soll Daten vom nodeMCU empfangen und zurück schicken
      //deshalb schauen wir, ob was angekommen ist
      //und wenn, dann lesen wir das und schicken es zurück
      while(Serial.available()){
        Serial.write(Serial.read());
      }
    }
    geänderter Code für nodeMCU:
    Code:
     #include <SoftwareSerial.h>
    
    SoftwareSerial mySerial(4, 5); // RX, TX for nodeMCU
    //SoftwareSerial mySerial(3, 2); // RX, TX for Arduino
    
      int a;
    
    void setup() {
      
      // Open serial communications and wait for port to open:
      Serial.begin(115200);
      while (!Serial) {}
      Serial.println();
      
      // set the data rate for the SoftwareSerial port
      mySerial.begin(4800);
    }
    
    void loop() { // run over and over
      // Kontrollzähler
      a++;
      //nodeMCU verwendet hier andere Pins statt der echten RX, TX
      //weil die ser. Schnittstelle zur Ausgabe genutzt wird
      //deshalb Senden über Software Serial Port zum Arduino
      mySerial.print("Hello, world: ");
      mySerial.print(a);
      mySerial.println("!");
      
      //Arduino wird das empfangen und zurückschicken
      //deshalb warten wir mal kurz, bis was zurück kommt
      while(mySerial.available()==0){
        delay(1000);
        Serial.print(".");    //Zeigen, dass gewartet wird 
        mySerial.print(".");  //falls Verbindung getrennt wird, um aus der Schleife auszubrechen
      }
      
      //Schauen, ob auf dem Software Serial Port etwas angekommen ist
      //wenn ja, dann wird das eingelesen und zur Kontrolle ausgegeben
      //auf dem norm. seriellen Port
      while(mySerial.available()){ //solange Zeichen verfügbar
        char c=mySerial.read();     //ein Zeichen lesen
        Serial.print(c);       //Zeichen ausgeben
      }
    
    }
    Und nach etwas Fummelei funktioniert auch das, die Ausgabe vom nodeMCU serial port:
    Code:
    Hello, world: 16030!
    Hello, world: 16031!
    Hello, world: 16032!
    Hello, world: 16033!
    Hello, world: 16034!
    Hello, world: 16035!
    Hello, world: 16036!
    Hello, world: 16037!
    Hello, world: 16038!
    Hello, world: 16.....................
    Geändert von Moppi (16.09.2018 um 18:47 Uhr)

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. html-Code für nodeMCU mit Arduino IDE + Wifi libs
    Von HaWe im Forum Arduino -Plattform
    Antworten: 7
    Letzter Beitrag: 14.08.2018, 19:30
  2. nodeMCU zu nodeMCU: keine Kommunikations-Verbindung mehr nach wenigen Minuten
    Von HaWe im Forum NodeMCU-Board und ESP8266, ESP32-Serie
    Antworten: 0
    Letzter Beitrag: 02.10.2017, 15:01
  3. Antworten: 1
    Letzter Beitrag: 26.06.2017, 10:06
  4. NodeMCU an Arduino-IDE, Fehler beim Kompilieren
    Von gkd im Forum NodeMCU-Board und ESP8266, ESP32-Serie
    Antworten: 5
    Letzter Beitrag: 28.05.2017, 23:21
  5. ESP8266/NodeMCU Kommunikationsprobleme
    Von thewulf00 im Forum NodeMCU-Board und ESP8266, ESP32-Serie
    Antworten: 5
    Letzter Beitrag: 30.03.2016, 06:04

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests