@fnc200
Nur der Code soll auf das nodeMCU. Arduino den Code drauf, wie gehabt und die Pins verbinden, wie gehabt. Und dann einmal mit Verbindung zum Arduino und einmal ohne Verbindung zum Arduino. Es soll jetzt darum gehen, was das nodeMCU im Terminalfenster ausgibt. Das es dort was ausgibt und das also richtig funktioniert, schriebst Du ja schon.
Wegen der Verwirrung, nochmal der Code für Arduino:
Bitte die Pins verwenden, so, wie ich sie auch hatte. Pin#2 (der neben TX am Arduino) an Pin#D2 vom nodeMCU. GND an GND. Ob Du Spannungsteiler da rein baust oder nicht oder auch einen Widerstand oder gar nichts. Du kannst auch einen 10k-Widerstand (oder 1k) vom Pin#2 Arduino an Pin#D2 reinsetzen (warum?- siehe Link unten zur Pegelwandlung, da steht was zu 5V-tolleranten Eingängen).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("!"); }
- - - Aktualisiert - - -
Nochmal was zur Pegelwandlung:
https://www.mikrocontroller.net/articles/Pegelwandler
Mehr kann man da jetzt kaum noch dazu sagen.
MfG
Geändert von Moppi (04.04.2019 um 22:14 Uhr)
Man kann leider auf den Bildern kaum etwas erkennen. Kopiere doch mal den Text aus dem Terminalfenster und mach kein Bildschirmfoto!
Aufgabe war: Arduino den Code drauf, wie gehabt und die Pins verbinden, wie gehabt. Und dann einmal mit Verbindung zum Arduino und einmal ohne Verbindung zum Arduino.
Wenn ich dazu die schlecht lesbaren Bilder interpretiere, sieht es so aus, dass Du:
a) im ersten Fall keinen Arduino abgeschlossen hattest.
b) im zweiten Fall der angeschlossene Arduino nichts sendet oder das nodeMCU nichts empfängt
Dein dritter Fall. Wo kommt das "08:58:27.013 ->" her? Kann ich nicht zuordnen, habe ich noch nie gesehen. Die "-1" ist allenfalls der Status von mySerial.read(), wenn keine Daten vorhanden sind.
Du hattest irgendwann mal geschrieben, das beim nodeMCU nur so Kästchen im Terminalfenster angezeigt werden, mehr käme nicht an. Ich meine das passiert, wenn die Baudrate im Terminalfenster nicht richtig eingestellt ist.
Jetzt, kommt gar nichts an, weder Kästchen noch sonst was.
Ich fasse das noch mal zusammen:
- Du hast alles richtig angeschlossen, sprich, im Zweifel nur zwei Drähte von Gerät A nach Gerät B
- Du hast die Software richtig aufgespielt
Es gibt jetzt genau zwei Möglichkeiten, weil ich bei Dir nicht vorbeikommen kann, um es zu zeigen:
1. Letzter Strohhalm: Du lädst in der Tat eine andere Bibliothek für "SoftwareSerial.h", HaWe hatte ja einen Link dazu gegeben, in dem Code für das nodeMCU.
2. Das nodeMCU funktioniert nicht richtig, Du probierst es mit einem anderen Modul.
Die letzte Möglichkeit wäre, dass der Arduino an den Ausgängen eine Macke hat. Dann muss der durchgecheckt werden, bzw. nimmst Du einfach einen anderen Atmega328P-PU mit richtigem Bootloader. So einen bekommt man bei Conrad zusammen mit einem Quarz.
MfG
Geändert von Moppi (05.04.2019 um 16:51 Uhr)
Die Ausgabe ist nicht leer. Kann sie auch nicht sein.
Zu der "-1" habe ich ja schon was geschrieben. Macht keinen Sinn, einen Puffer auszulesen in dem nichts drin steht (also außerhalb der IF-Bedingung).
------------------------------------------------------------------
Nachtrag:
Es gibt ein Beispiel, von SoftwareSerial für den Arduino.
Das befindet sich bei mir in einem Verzeichnis "... \avr\libraries\SoftwareSerial\examples\SoftwareSer ialExample". Darin gibt es eine Datei "SoftwareSerialExample.ino".
Dort kann man auch mal reinschauen und sich damit beschäftigen.
Das nodeMCU hat 2 Pins, die für nichts anderes vorgesehen sind, als für Ein-/Ausgaben. Das sind GPIO4 (D2) und GPIO5 (D1). Daran habe ich mich bei den ersten Gehversuchen (die ich hier im andern Thread dokumentiert habe) gehalten, um keine Überraschungen zu erleben. Wenn die Kommunikation über GPIO4 nicht funktioniert, kann man sie also auf jeden Fall noch über GPIO5 ausprobieren. Statt den Arduino dann mit "D2" des nodeMCU zu verbinden, kann man den dann also mit "D1" verbinden und muss das in der Software dann anpassen. Müsste man für das nodeMCU dann z.B. schreiben: SoftwareSerial mySerial(5, 4); // RX, TX
Der Arduino UNO hat mehr freie Ein-/Ausgänge, mit denen man das auch noch versuchen könnte.
Es gibt noch eine andere Möglichkeit, die ich damals auch beschrieben habe und die ebenfalls funktionierte. Nämlich Daten vom Arduino über die normale serielle Hardwareschnittstelle an das nodeMCU zu übertragen.
Beschrieben ist das unter "Funktioniert die Kommunikation nach den vorherigen Voraussetzungen auch per RX + TX - Pins". Den Link dazu habe ich ich als erste Antwort in diesem Thread hier schon gegeben. Man könnte das Beispiel auch umkehren und Daten über die serielle Hardwareschnittstelle des nodeMCU zum Arduino schicken und dort dann per SoftwareSerial empfangen; so würde man die "SoftwareSerial.h" auf dem nodeMCU zunächst umgehen.
Geändert von Moppi (06.04.2019 um 06:51 Uhr)
Nur weil ich die ESPs bereits seit rund 2 Jahren verwende und einige Fallstricke kenne, und weil ich vermeiden will, dass hier Infos fasch verstanden u/o weitergegeben werden:
das mit den "vorgesehenen Pins" beim ESP ist evtl. missverständlich, wenn man sich auf die Arduino-IDE bezieht -
fest vorgesehen sind IMO nur D0 für Wake/Reset, D3 für die (verzichtbare) eingebaute LED, die Hardware-SPI-Pins D5-D7 und die Hardware UART Pins D9+D10 für Rx und Tx.
Code:digital GPIO default D0 16 WAKE D1 5 I2C SCL D2 4 I2C SDA D3 0 FLASH/LED D4 2 TX1 D5 14 SPI SCK D6 12 SPI MISO D7 13 SPI MOSI D8 15 MTD0 PWM D9 3 UART RX0 D10 1 UART TX0 (D12) 10 SPIWP intern
wenn man kein SPI braucht (z.B. für TFT-Displays oder eine SD-Card), sind auch D5-D8 frei als IOs konfigurierbar;
D8 darf beim Booten nicht auf GND gezogen sein.
D1 und D2 werden in der Arduino IDE standardmäßig als I2C Pins verwendet, aber sie können auch mit dem Befehl
Wire.begin(d,c) // d,c: Pin-Nummern für SDA und SCL
auf andere Pins umkonfiguriert werden.
WENN man also SoftSerial am ESP verwendet und auch andere eingebaute Standard-Funktionalitäten verwendet, sollte man möglichst NICHT verwenden
D0, D1,D2, D5,D6,D7, D9,D10
sondern
D3,D4 (unter Verzicht auf die eingebaute LED an D3) und ggf. auch D8 (z.B. als Output),
und wenn man kein SPI braucht, gehen auch: D5,D6,D7.
D1,D2,D4 (und mit Einschränkungen auch D3,D8 ) sind aber für den praktischen "Arduino-Gebrauch" allesamt für nichts "fest vorgesehen".
Wenn man also D1/D2 nicht für I2C braucht und sich spätere Inkompatibitäten mit Standard-Examples für I2C nicht unbedingt sicherheitshalber ersparen will, kann man ntl auch D1/D2 für SoftSerial verwenden:
Es wird funktionieren, wenn man es richtig verkabelt und richtig programmiert, nur ist es IMO nicht besonders geschickt, es so zu tun: ich persönlich würde D3+D4 dafür verwenden.
Wenn es aber beim OP nicht funktioniert und man Software-Code-Fehler ausschließen kann, liegt es nicht an SoftSerial(D1,D2) sondern an defekter Hardware oder falscher Verkabelung.
Vielleicht ist auch ein Kabel oder eine Steckboard-Klemme defekt (passiert auch schon mal).
Vielleicht ist auch wirklich der ESP inzwischen defekt an einem oder mehreren GPIOs wegen vorhergegangener Schaltungsfehler, oder vlt war er auch von vornherein defekt: da hilft dann nur ein Vergleich nach Neukauf.
Der UNO hingegen ist sehr Fehler-tolerant, dass der kaputt sein sollte ist zwar nicht unmöglich, aber deutlich unwahrscheinlicher.
Geändert von HaWe (06.04.2019 um 10:37 Uhr)
Lesezeichen