PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Serielle Kommunikation zwischen Arduino Uno R3 und NodeMCU 12-E



fcn200
01.04.2019, 16:12
Hallo,

habe mir vor einiger Zeit ein NodeMCU-Board besorgt (NodeMCU 12-E) welches ich für ein Projekt benötige bei dem ich ein ferngesteuertes Auto von einem PC aus steuern möchte.
Dabei sind einige Sensoren (z.B. Abstandssensor) mit dem Arduino verbunden, dies sollen via Serielle Verbindung (RX/TX) an das NodeMCU-Board gesendet werden und dann über
Wlan (AP) an den PC weitergeleitet werden.
Ich habe bereits viele Anleitungen zur Seriellen Verbindung zwischen Arduino und NodeMCU versucht, jedoch gelang jedes Mal nur eine Verbindung in eine Richtung, konkret: NodeMCU -> Arduino
Jedoch habe ich noch keine Möglichkeit gefunden wie ich Daten vom Arduino an das NodeMCU-Board senden kann, hat da jemand Erfahrung mit?:confused:

Hilfe gerne erwünscht!:p

Grüße
fcn200

Moppi
01.04.2019, 19:15
Bitteschön: https://www.roboternetz.de/community/threads/72336-nodeMCU-an-Arduino?p=646697&viewfull=1#post646697

fcn200
01.04.2019, 19:45
Dies habe ich auch versucht, funktioniert leider auch nicht:o

HaWe
01.04.2019, 20:53
Dies habe ich auch versucht, funktioniert leider auch nicht:o

benutzt du Hardware-Serial oder zumindest das richtige (!) SotwareSerial für den NodeMcU?
Ggf. welche Lib (Link)?

hast du Rx/Tx zwischen beiden Boards richtig, d.h. überkreuzt verkabelt?

Moppi
01.04.2019, 20:59
Dies habe ich auch versucht, funktioniert leider auch nicht:o

Dann musst Du es wohl nochmal versuchen. Es ist ja alles da: Bebilderung, Beschreibung, Quellcode für Arduino und nodeMCU.
Wenn Du gar nicht weiter kommst, kann es helfen, nochmals von vorn anzufangen. Neues Spiel - neue Chance.
Wenn Du Dich einarbeitest und alles nachvollziehst, wirst Du zur Lösung kommen. Es sei denn, Geräte sind defekt. Ich hatte auch schon ein nodeMCU, das rumgesponnen hat. Da ich sicherheitshalber aber Mehrere habe kann ich immer testen, wenn was nicht funktioniert, ob es am Board liegt.

MfG

fcn200
01.04.2019, 21:09
SoftwarSerial , Standard Bibliothek

- - - Aktualisiert - - -

Wie schreibe ich das im Code beim arduino bzw node mcu board über welchen pin er senden soll?

HaWe
01.04.2019, 21:25
1. ist die SoftwareSerial - Standard Bibliothek nicht für den NodeMCU geeignet, weil er durch seine internen WiFi Tasks das Software (bitbang) UART stört.
https://github.com/arduino/Arduino/issues/8733
https://github.com/plerup/espsoftwareserial

2. Hardware-Serial geht automatisch über RX und TX, während die Pins für Softwareserial im Code definiert werden. Schau dir mal Moppis Code an.
https://www.arduino.cc/en/Reference/SoftwareSerial

Moppi
01.04.2019, 21:29
SoftwarSerial , Standard Bibliothek

- - - Aktualisiert - - -

Wie schreibe ich das im Code beim arduino bzw node mcu board über welchen pin er senden soll?


Arduino: SoftwareSerial mySerial(3, 2); // RX, TX

nodeMCU: SoftwareSerial mySerial(4, 5); // RX, TX

Arduino: Pin#2 = TX
nodeMCU: Pin D2 = GPIO4 = RX

Zum Senden von Arduino auf nodeMCU muss der Pin#2 des Arduino, mit dem Pin D2 des nodeMCU verbunden werden. Der Funktion mySerial() wird beim nodeMCU die GPIO-Nummer übergeben.
Übrigens könnte man auch andere Pins bei den Geräten verwenden. Aber ich beziehe mich hier auf das Beispiel mit den Bildern, dass ich oben schon verlinkt habe.

HaWe
01.04.2019, 21:47
@Moppi:
auf nodeMCU (ESP8266, das ist KEIN Arduino!) werden spezielle angepasste SoftwareSerial Versionen empfohlen, weil die für die Standard-Aduinos oft nicht korrekt funktionieren, auch wenn es manchmal ausnahmsweise funktionieren mag .
Wäre das nicht so, würde sich niemand die Mühe machen, spezielle angepasste SoftwareSerial Versionen für nodeMCUs und ESP32 zu schreiben

fcn200
01.04.2019, 21:52
Arduino: SoftwareSerial mySerial(3, 2); // RX, TX

nodeMCU: SoftwareSerial mySerial(4, 5); // RX, TX

Arduino: Pin#2 = TX
nodeMCU: Pin D2 = GPIO4 = RX



Wird dann GPIO 2 am Arduino einfach zu einem TX_Pin umprogrammiert? (frage deshalb weil bei meinem Arduino Uno R3 RX und TX an Pin 0 und 1 ist..)

HaWe
01.04.2019, 21:55
ja, das ist doch genau der Sinn von SoftwareSerial!

Achte auch auf die genauen Pin-Nummern beim nodeMCU!
Pin 4 ist NICHT pin D4 (sondern D2!
Pin 5 ist NICHT pin D5 (sondern D1)!

Pins 4+5 zu nehmen ist aber sehr ungünstig, weil normalerweise i2c darüber läuft (SDA+SCL).

Zum Testen OK, aber später würde ich Pins D3(0)+D4(2) oder auch D6(12) bzw. D7(13) u/o D8(15) nehmen
(Aber Pins D5 bis D8 sind evtl. für SPI wichtig, wenn man's braucht).

https://lastminuteengineers.com/wp-content/uploads/2018/08/ESP-12E-Development-Board-ESP8266-NodeMCU-Pinout.jpg

Quelle:
https://lastminuteengineers.com/esp8266-nodemcu-arduino-tutorial/

Moppi
01.04.2019, 22:32
@HaWe

Es mag sein, dass zig Versionen irgendwelcher Geschichten für verschiedene Boards existieren.

Ich habe alle Installationen für nodeMCU vorgenommen, wie das hier im Forum mal beschrieben war (klick hier (https://www.roboternetz.de/community/threads/70117-Um-was-geht-es-in-diesem-NodeMCU-ESP8266-Forum)). Das ist eine ziemlich gute Beschreibung, mit allem was man zunächst benötigt. So habe ich es gemacht, so verwende ich es, so funktioniert es bis jetzt. Mit welcher Version welcher Bibliothek für Arduino und nodeMCU funktioniert denn das nicht? - Verstehe jetzt Dein Problem hier nicht!

Da ja auch alles vorhanden ist:
Bilder auf denen man alles erkennen kann (also wo welche Drähte von wo nach wo gehen, an welchen Pin welchen Boards), warum was wie angeschlossen wurde, der Quelltext in aller Kürze, das alles in den verschiedenen Varianten (vom nodeMCU zum Arduino, vom Arduino zum nodeMCU; per SoftwareSerial und per serieller Hardware-Schnittstelle; Kommunikation nur vom Arduino zum nodeMCU und umgekehrt, sowie Kommunikation vom Arduino zum nodeMCU und gleichzeitig vom nodeMCU zum Arduino); Erläuterungen zur Pegelanpassung zwischen nodeMCU und Arduino

und

weil das alles funktioniert und nicht nur zusammengeschrieben ist,

ziehe ich mich jetzt hier zurück.

MfG

HaWe
01.04.2019, 22:49
dass die Standard-Bibliotheken mit nodeMCU oft nicht funktionieren, ist z.B. in diesem Topic erwähnt:
https://www.roboternetz.de/community/threads/73034-Softwareserial-Console-Output-geht-nach-mySerial?p=650110&viewfull=1#post650110

Aus diesem Grunde - und weil sich Bugs oft erst im Laufe der Zeit zeigen - wurden angepasste Versionen entwickelt (und ständig weiter entwickelt).
Es mag ausnahmsweise auch mit deinem speziellen Programm funktionieren, was aber nicht für alle Fälle generell gilt.

fcn200
02.04.2019, 12:28
Habe soeben das Ganze mit dem beschriebenen Aufbau versucht, jedoch ohne jeglichen Erfolg:
Links NodeMCU Rechts Arduino
34063

Aufbau
34064

HaWe
02.04.2019, 14:54
Habe soeben das Ganze mit dem beschriebenen Aufbau versucht, jedoch ohne jeglichen Erfolg:
Links NodeMCU Rechts Arduino
34063

Aufbau
34064

man kann es nicht genau erkennen:

wie lauten jetzt die Pin-Inits in der Software für die beiden Softserials (Arduino und esp)?
an welchen Pins hast du beide boards miteinander verbunden?

es sieht aber so aus als hättest du zumindest am Arduino die UART-Hardware-Pins verwendet!

fcn200
02.04.2019, 15:45
man kann es nicht genau erkennen:

wie lauten jetzt die Pin-Inits in der Software für die beiden Softserials (Arduino und esp)?
an welchen Pins hast du beide boards miteinander verbunden?

es sieht aber so aus als hättest du zumindest am Arduino die UART-Hardware-Pins verwendet!

Arduino Pin 2 -> NodeMCU D2
Arduino Pin 3 -> NodeMCU D1

und der Code ist wie inPost #8 beschrieben

HaWe
02.04.2019, 17:27
hast du auch die beiden Masse-Potentiale verbunden?
(zumindest auf den Fotos sehe ich es nicht)

fcn200
02.04.2019, 19:50
hast du auch die beiden Masse-Potentiale verbunden?
(zumindest auf den Fotos sehe ich es nicht)

Hat leider auch nichts gebracht.
Man sieht zwar das der Arduino sendet (TX-led blinkt in regelmäßigen Abständen ), aber auf Seiten des NodeMCU Boards kommtnichts an:(

- - - Aktualisiert - - -

Beim Programmieren ist mir noch Folgendes aufgefallen:

Ich lasse mir vom Arduino zur Kontrolle auf der Konsole den gesendeten Wert (10.0) ausgeben, jedoch taucht dort auch in regelmäßigen Abständen der Wert "0.00" auf, der aber ürsprünglich gar nicht gesendet wird:
34065

HaWe
02.04.2019, 20:01
Hat leider auch nichts gebracht.
Man sieht zwar das der Arduino sendet (TX-led blinkt in regelmäßigen Abständen ), aber auf Seiten des NodeMCU Boards kommtnichts an:(

- - - Aktualisiert - - -

Beim Programmieren ist mir noch Folgendes aufgefallen:

Ich lasse mir vom Arduino zur Kontrolle auf der Konsole den gesendeten Wert (10.0) ausgeben, jedoch taucht dort auch in regelmäßigen Abständen der Wert "0.00" auf, der aber ürsprünglich gar nicht gesendet wird:
34065

das Massekabel ist unverzichtbar, du scheinst also mehrere Fehler drin zu haben.
Probier mal einfach nur moppis codes aus, bevor du noch mehr eigene Fehler reinbaust.

fcn200
02.04.2019, 21:38
das Massekabel ist unverzichtbar, du scheinst also mehrere Fehler drin zu haben.
Probier mal einfach nur moppis codes aus, bevor du noch mehr eigene Fehler reinbaust.

Habe ich bereits, auch mit Massekabel.
ergebnis bleibt das selbe, kein Datenempfang beim NodeMCU Board..

HaWe
02.04.2019, 22:56
Habe ich bereits, auch mit Massekabel.
ergebnis bleibt das selbe, kein Datenempfang beim NodeMCU Board..

dann poste mal deinen genauen Code für beide Boards (in code tags), dann muss moppi gucken, denn der code äuft ja bei ihm - oder ggf jemand anderes, der sich da auskennt.

fcn200
03.04.2019, 07:04
dann poste mal deinen genauen Code für beide Boards (in code tags), dann muss moppi gucken, denn der code äuft ja bei ihm - oder ggf jemand anderes, der sich da auskennt.

NodeMCU:


#include <SoftwareSerial.h>
SoftwareSerial NodeMCU (4,5);
void setup(){
Serial.begin(9600);
NodeMCU.begin(4800);
}

void loop(){
while(NodeMCU.available()){
float f = NodeMCU.parseFloat();
Serial.println(f);
}
}




Arduino:

#include <SoftwareSerial.h>
SoftwareSerial ArduinoUno(3,2);

void setup(){
Serial.begin(9600);
ArduinoUno.begin(4800);
}

void loop(){
float i = 10;
Serial.println(i);
ArduinoUno.print(i);
delay(1000);
}

Ceos
03.04.2019, 07:54
void loop(){
while(NodeMCU.available()){
float f = NodeMCU.parseFloat();
Serial.println(f);
}
}

Da gruselt es mir, das ist eine klassische Falle für ein deadlock

"never ever loop in loop() without escape route"

mach da mal lieber ein if draus und mach es wie in der arduino doku


if(SWS.available > 3)

wenn du aus irgendwelchen Gründen nur Bytesalat empfängst (Baudratenfehler z.B.) den dein parseFloat nicht versteht, kommst du nie aus der while raus, damit wird die loop() nie beendet und andere Prozesse im Hintergrund können nicht bearbeitet werden

PS: "> 3" habe ich gewählt, weil eine float Zahl mindestens aus 3 Zeichen für "0.0" besteht

HaWe
03.04.2019, 10:08
du solltest doch erst mal moppis code verwenden, weil der doch nach seiner Aussage funktioniert, und du hast doch behauptet, dass du ihn verwendest -
aber das ist doch nicht moppis code, oder?

außerdem las ich gerade, dass ein Levelshifter von nodeMCU 3.3V auf Arduino 5V verwendet werden soll, da die beiden Boards ja mit verschiedenen Spannungen laufen: Bei Moppi kam dieser Hinweis auch erst ganz am Ende seines Topics.



Arduino TX --| ( 5V Level )
|
33k
|
|---- ESP RX ( 3.3V Level)
|
47k
|
GND



du brauchst nur diesen Levelshifter Arduino TX -> ESP RX, nicht anders herum!

@Ceos:
zum Testen würde ich erst mal mit Buchstaben und Ints anfangen, solange es noch nicht klappt,
aber moppis Code funktioniert ja offenbar zum Testen - dann kann man das ja immer noch mal ändern, wenn es erstmal überhaupt funktioniert wie es soll!

Ceos
03.04.2019, 13:17
ann kann man das ja immer noch mal ändern, wenn es erstmal überhaupt funktioniert wie es soll!

Wenn es ein Baudratenfehler ist, wäre das schon eine Erklärung das er nichts empfängt, denn dann wäre der NodeMCU im deadlock :)

fcn200
03.04.2019, 16:34
du solltest doch erst mal moppis code verwenden, weil der doch nach seiner Aussage funktioniert, und du hast doch behauptet, dass du ihn verwendest -
aber das ist doch nicht moppis code, oder?

außerdem las ich gerade, dass ein Levelshifter von nodeMCU 3.3V auf Arduino 5V verwendet werden soll, da die beiden Boards ja mit verschiedenen Spannungen laufen: Bei Moppi kam dieser Hinweis auch erst ganz am Ende seines Topics.



Arduino TX --| ( 5V Level )
|
33k
|
|---- ESP RX ( 3.3V Level)
|
47k
|
GND



du brauchst nur diesen Levelshifter Arduino TX -> ESP RX, nicht anders herum!

@Ceos:
zum Testen würde ich erst mal mit Buchstaben und Ints anfangen, solange es noch nicht klappt,
aber moppis Code funktioniert ja offenbar zum Testen - dann kann man das ja immer noch mal ändern, wenn es erstmal überhaupt funktioniert wie es soll!

Genau dies habe ich versucht, exakt so wie beschrieben.
Nur die Ausgabe vom NodeMCU Board... bleibt nach wie vor leer..

HaWe
03.04.2019, 17:07
Genau dies habe ich versucht, exakt so wie beschrieben.
Nur die Ausgabe vom NodeMCU Board... bleibt nach wie vor leer..

ja, wie gesagt: du wirst mehrere Fehler drin haben. Also merze einen nach dem anderen aus, bis du auch den letzten Fehler erwischt hast.
Fehlendes Massekabel und fehleneder Levelshifter waren ja schon 2 entdeckte Fehler, vlt ist durch den fehlenden Levelshifter jetzt auch dein nodeMCU inzwischen defekt.

Und jetzt als allererstes: nimm Moppis Code, denn der soll ja funktionieren.
Und wenn er das tut, dann sieh weiter.

Wenn nicht, ist vlt noch was anderes kaputt oder fehlerhaft.
Also erstmal Moppis Code verwenden, NICHT deinen eigenen.

fcn200
03.04.2019, 17:12
ja, wie gesagt: du wirst mehrere Fehler drin haben. Also merze einen nach dem anderen aus, bis du auch den letzten Fehler erwischt hast.
Fehlendes Massekabel und fehleneder Levelshifter waren ja schon 2 entdeckte Fehler, vlt ist durch den fehlenden Levelshifter jetzt auch dein nodeMCU inzwischen defekt.

Und jetzt als allererstes: nimm Moppis Code, denn der soll ja funktionieren.
Und wenn er das tut, dann sieh weiter.

Wenn nicht, ist vlt noch was anderes kaputt oder fehlerhaft.
Also erstmal Moppis Code verwenden, NICHT deinen eigenen.

Ich habe aber schon
- Moppis Code
- Massekabel
- Levelshifter

verwendet und es tut sich nichts..

HaWe
03.04.2019, 17:16
du hast aber oben nicht einen von moppis Codes gepostet, den du verwendet hast, worum ich dich gebeten hatte, oder doch?
Ansonsten poste jetzt bitte die Codes, die du verwendest, samt neuem Foto deines Aufbaus.

fcn200
03.04.2019, 17:25
du hast aber oben nicht einen von moppis Codes gepostet, den du verwendet hast, worum ich dich gebeten hatte, oder doch?
Ansonsten poste jetzt bitte die Codes, die du verwendest, samt neuem Foto deines Aufbaus.

Arduino:


#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("!");
}

NodeMCU:


#include <SoftwareSerial.h>

SoftwareSerial mySerial(4, 5); // RX, TX

void setup() {

// Open serial communications and wait for port to open:
Serial.begin(9600);


// set the data rate for the SoftwareSerial port
mySerial.begin(4800);
}

void loop() { // run over and over
if (mySerial.available()) {
Serial.write(mySerial.read());

}
}

Aufbau:
34066

34067

HaWe
03.04.2019, 17:33
sieht aus, als hättest du den Spannungsteiler falsch verkabelt, oder?

fcn200
03.04.2019, 17:42
sieht aus, als hättest du den Spannungsteiler falsch verkabelt, oder?

Laut der Anleitung hier nicht:
34068

An D2 ist er dran, genau wie bei mir:
34069

HaWe
03.04.2019, 17:46
ich denke: auf beiden Bildern falsch angeschlossen.
Siehe mein Schema oben.

fcn200
03.04.2019, 17:50
Du meinst jetzt damit aber nicht die Pins am NodeMCU wo wirklich "TX" und "RX" steht oder?

HaWe
03.04.2019, 17:55
nein.
beide Widerstände liegen in Serie von Arduino Soft-TX nach GND.
dazwischen (!!)
wird eine Leitung zum ESP-Soft-RX Pin geführt!

- - - Aktualisiert - - -



Arduino TX ( 5V Level )
|
33k
|
|---- ESP RX ( 3.3V Level)
|
47k
|
GND

fcn200
03.04.2019, 18:00
nein.
beide Widerstände liegen in Serie von Arduino Soft-TX nach GND.
dazwischen (!!)
wird eine Leitung zum ESP-Soft-RX Pin geführt!

- - - Aktualisiert - - -



Arduino TX ( 5V Level )
|
33k
|
|---- ESP RX ( 3.3V Level)
|
47k
|
GND


Immer noch nichts...
34070

HaWe
03.04.2019, 18:01
immer noch falsch verkabelt, wie es aussieht!
klemm die Widerstände hintereinander in Reihe und führe den letzten an GND.
Dazwischen an den ESP führen!

fcn200
03.04.2019, 18:04
immer noch falsch verkabelt, wie es aussieht!
klemm die Widerstände hintereinander in Reihe und führe den letzten an GND.
Dazwischen an den ESP führen!

Besser so? :
34071

HaWe
03.04.2019, 18:07
immer noch nicht.
machs mal systematisch ganz neu und guck endlich mal genau hin!

Und vergiss auch nicht wieder das zusätzliche verbindende Massekabel zwischen beiden GNDs!

fcn200
03.04.2019, 22:04
Habe ich alles gemacht, hat nur leider nichts gebracht..

Habe es einmal hiermit versucht:
https://www.youtube.com/watch?v=-6Nb5kL43GY

Funktioniert auch fast, nur das ich als Ausgabe "Platzhalter" bekomme.
Hängt das vllt. damit zusammen das auch beim NodeMCU die RX TX Pins mit USB verbunden sind und das nicht gleichzeitig funktioniert?

Ceos
04.04.2019, 08:41
mal unabhängig ob die Pins nutzbar sind, habe ich die Schaltung mal exemplarisch auf einem Breadboard aufgesteckt und geknipst

34073

Was bei dir fehlt ist die Masseverbindung zwischen Arduino und NodeMCU

der rote Draht geht zum Arduino TX, der schwarze zum Arduino GND, der weiße als Mittelabgriff vom Spannungsteiler zum RX der NodeMCU und das blaue Kabel verbindet die GND Rail ebenfalls mit der NodeMCU ... das blaue vermisse ich bei deinen Fotos nämlich

hab aber leider keinen Arduino zum selber probieren da, also keine Gewähr auf Funktion

HaWe
04.04.2019, 09:52
Habe ich alles gemacht, hat nur leider nichts gebracht..

Habe es einmal hiermit versucht:
https://www.youtube.com/watch?v=-6Nb5kL43GY

Funktioniert auch fast, nur das ich als Ausgabe "Platzhalter" bekomme.
Hängt das vllt. damit zusammen das auch beim NodeMCU die RX TX Pins mit USB verbunden sind und das nicht gleichzeitig funktioniert?

USB beim esp wird für die Serial()-Ausgabe am PC benutzt, daher müssen dann RxTx unbenutzt bleiben.
Gleiches gilt ggf für USB und RxTx am Arduino.
Daher dürfen fürs Verkabeln nur die definierten SoftSerial-pins verwendet werden.

Moppi
04.04.2019, 13:38
dann poste mal deinen genauen Code für beide Boards (in code tags), dann muss moppi gucken, denn der code äuft ja bei ihm - oder ggf jemand anderes, der sich da auskennt.

Wenn ich neue Dinge anfange und eine Anleitung habe, baue ich die Schaltung so, wie sie in der Anleitung drin ist. Zur Not nehme ich sogar noch dieselben Farben für die Verbindungskabel. Dann nehme ich exakt den Code aus der Anleitung und schaue mir das Ergebnis an.

Und noch mal was zur Bibliothek, @HaWe. Du hast natürlich nicht unrecht, es steht im Netz so geschrieben. Ich habe aber nie eine andere Version installiert, sondern habe die vom Arduino genommen. Es gibt wohl bei den unterschiedlichen Versionen teils Probleme mit den Geschwindigkeiten, vom nodeMCU (>80MHz). Ich konnte aber keine Probleme feststellen, ich verwende im Code auch nur 4800, als Geschwindigkeit. Aber die Geschwindigkeit ist ja egal, jedenfalls für grundlegende Sachen.

Wieder zurück: wenn ich das dann erfolgreich nachgebaut und ausprobiert habe, dann erst gehe ich dran und fange an, Dinge nach meinen Vorstellungen zu verändern. Gerade wenn man Anfänger ist, im Programmieren und Hardwarebereich, erleidet man jede Menge Probleme, wenn man von den Vorgaben abweicht. Das fängt bei Massekabeln zwischen den Geräten an, geht weiter bei evtl. Spannungsteilern die ich einbaue, wo keine sind, geht weiter mit anderen Softwarebibliotheken und anderen Geschwindigkeiten (hier Kommunikation), zieht sich dann über Schreibfehler (Syntax) im Quellcode und hört evtl dann auf, weil ich nicht mehr weiter weiß. Deshalb habe ich schon ganz zu Anfang geschrieben, dass er nochmal von vorn anfängt. Alles abbauen, durchatmen, Kaffee holen, die Bilder ausdrucken oder wie auch immer, den Code kopieren in einen eigenen Sketch, die Schaltung exakt nachbauen. Da ist nichts dran. Eine Masse-Leitung und ein Kommunikationskabel und 5 Zeilen Code. Wenn es dann noch nicht funktioniert, muss man sehen, woran das liegt. Da gibt es dann ja u.U. verschiedene Gründe.
Wenn der Testaufbau erfolgreich war, kann man Änderungen vornehmen. Aber dann auch bitte eine nach der andern! nicht zwei oder drei auf einmal und wundern warum es nicht funktioniert.
Beim Aufspielen des Sketch auf das nodeMCU un den Arduino muss man wohl auch aufpassen, dass man die richtigen Geräte auswählt. Weiß der Teufel, was da noch alles für Fehler zustande kommen können.

Aller Anfang ist leider schwer, das musste jeder irgendwann mal lernen. Aber da hilft nur Mühe geben und zu versuchen, die Dinge zu verstehen. Ist ja schließlich über mehrere Seiten alles beschrieben und diskutiert worden, kann man also in Ruhe lesen. Wenn man Dinge nicht versteht, muss man dann gezielt fragen, warum das eine so ist und das andere so. Aber Geduld ist das wichtigste und der Glaube daran, dass man es hinbekommen wird.


So ein Thema hatten wir schon mal, dass jemand meinte die Übertragung von UDP-Paketen mit dem nodeMCU wäre ein Problem. Da waren es letztlich ähnliche Fallstricke, wie ich eben geschrieben habe, die zum Misserfolg führten.

Zur Pegelanpassung:


ich denke: auf beiden Bildern falsch angeschlossen.
Siehe mein Schema oben.

Nein, nicht falsch angeschlossen auf dem Bild, dass ich vom Aufbau gemacht habe. Der Grund steht im Thread, kann man nachlesen. Es gibt für einen Versuch hier vier Möglichkeiten: nur mit Widerstand den Pegel anpassen, mit Spannungsteiler den Pegel anpassen, mit gekauftem Pegelwandler den Pegel anpassen und gar nicht den Pegel anpassen. Alle Möglichkeiten haben bei mir funktioniert. Keine der Möglichkeiten ist "falsch", man muss nur wissen, wie man sie einsetzt.





MfG

- - - Aktualisiert - - -


Laut der Anleitung hier nicht:
34068

An D2 ist er dran, genau wie bei mir:
34069

Sehe ich das falsch, dass beide Widerstände keine Verbindung miteinander haben? Sieht vielleicht auch nur so aus.
Im Übrigen hatte ich 220k und 470k in Reihe (weil ich keine 680k bis 700k hatte), kann nicht genau erkennen, was Du für Werte genommen hast.
Vom Arduino kommen bei HIGH-Pegel 5V, die über den Widerstand (680k) fließen. Nach dem Widerstand (oder eben den zwei in Reihe) müssen dann zwischen 2.7V und 3.2V anliegen. Liegen dort weniger an, könnte es mit dem nodeMCU zu Schwierigkeiten bei der Pegelerkennung kommen. Ich bin nicht sicher, aber die Grenze müsste bei 2.5V liegen, da sollte man sicher drüber bleiben.
Zur Not und ohne Gewähr: das Kabel vom Arduino-Ausgang direkt mit dem D2 des nodeMCU verbinden, ohne was dazwischen (bei mir hat es so auch funktioniert, Erklärung dafür steht im Thread). Also einfach GND mit GND und den zweiten Draht, statt über Widerstände, direkt an D2 des nodeMCU.


Spannungsteiler:

Das kam damals von Ceos:

also 5V TX -> 4kOhm -> 3.3V RX + 6kOhm -> GND

Wenn ich mich recht entsinne, funktionierte das auch.

MfG

Gnom67
04.04.2019, 14:17
Ich verfolge den Thread nun schon eine Weile und werde das Gefühl nicht los, dass hier relativ ziellos rumgefrickelt wird.

Meine Frage dazu: Woran erkennst du eigentlich, dass es nicht funktioniert? Du hast oben geschrieben, du erhältst nur "Platzhalter". Was soll das sein? Die netten Quadrate, die ein Serial Monitor anzeigt, wenn er die Signale nicht richtig versteht?
Du sendest die Daten vom Arduino zum ESP und dann von dort weiter zum Serial Monitor auf dem PC... Woher weißt du, dass der Fehler in der Übertragung zwischen Arduino und ESP liegt?

Wie wäre es, wenn du das Problem erstmal systematisch eingrenzt.
Arduino an den PC und testen, ob die Signale überhaupt gesendet werden. Mit geringen Baudraten anfangen.
Mit einer LED sollte man sehen können, ob überhaupt Signale auf die Leitung gegeben werden. (an der Hardwareschnittstelle des Arduino ist ja auch eine dran).
Mit Loopback-Kable schauen, ob der PC an sich selbst Daaten schicken kann.
Anschließen ESP an den PC und schauen, ob Signale an den ESP gesendet werden können. In einem Testprogramm einfachen Code schreiben, der mit einer LED anzeigt, ob ob ein Dateneingang registriert wird. Später ASCII Codes senden und die LED entsprechend dem Code blinken lassen, um zu sehen, was ankommt.
Dann die beiden Geräte direkt verbinden und schauen, ob die Daten dann ankommen (wieder mit LED-Blinken zur Prüfung)
Erst dann den Code so abwandeln, wie du ihn brauchst.
Ich nehme an, einen Logicanalyzer oder Oszi hast du nicht. Sonst könnte man es sich noch einfacher machen.

Seitenlang immer wieder zu betonen "ich hab alles richtig gemacht, aber es geht trotzdem nicht" ist halt wenig ergiebig.

HaWe
04.04.2019, 15:50
@ Moppi:
ich hatte mich immer auf MEINE gepostete Schaltung mit Spannungsteiler bezogen mit den dort angegebenen Widerstandswerten 33k+47k, nur Spannungsteiler (oder richtige Levelshifter) funktionieren nach meiner (langjährigen) Erfahrung mit ARM MCUS von Arduino und Raspi wirklich zuverlässig.
Nach meinen Erfahrungen funktionieren aber auch 10k+15k.
Geht man deutlich höher, wird das Signal zu schwach.
Geht man deutlich niedriger, werden die Rechteck-Impulse zu schwammig.
Mit Vorwiderständen OHNE Spannungsteiler erniedrigst du nicht die Spannung von 5V auf 3.3V sondern verringerst nur die Stromstärke der zu hohen 5V Spannung, das ist nicht lege artis.

@Gnom67:
wenn man die Verbindungen richtig steckt und funktionierenden Code (wie offenbar den von Moppi) verwendet, dann wäre zu erwarten, dass es auch 100%ig funktioniert.
Das wäre IMO als allererstes einmal zu bewerkstelligen, und daran hat es bisher ja schon gehapert.
Funktioniert es dann NICHT, muss man den Fehler weiter eingrenzen, was IMO aber nicht zu erwarten wäre.


PS,
als Board sollte man den core
nodeMCU 1.0
in der aktuellsten Version installieren und auswählen.

fcn200
04.04.2019, 16:14
@ Moppi:
ich hatte mich immer auf MEINE gepostete Schaltung mit Spannungsteiler bezogen mit den dort angegebenen Widerstandswerten 33k+47k, nur Spannungsteiler (oder richtige Levelshifter) funktionieren nach meiner (langjährigen) Erfahrung mit ARM MCUS von Arduino und Raspi wirklich zuverlässig.
Nach meinen Erfahrungen funktionieren aber auch 10k+15k. Geht man deutlich höher, wird das Signal zu schwach.
Mit Vorwiderständen OHNE Spannungsteiler erniedrigst du nicht die Spannung von 5V auf 3.3V sondern verringerst nur die Stromstärke der zu hohen 5V Spannung, das ist nicht lege artis.

@Gnom67:
wenn man die Verbindungen richtig steckt und funktionierenden Code (wie offenbar den von Moppi) verwendet, dann wäre zu erwarten, dass es auch 100%ig funktioniert.
Das wäre IMO als allererstes einmal zu bewerkstelligen.
Funktioniert er dann NICHT, muss man den Fehler weiter eingrenzen, was IMO aber nicht zu erwarten wäre.


PS,
als Board sollte man den core
nodeMCU 1.0
in der aktuellsten Version installieren und auswählen.

Habe es jetzt exakt so gemacht, trotz alledem bleibt die Konsole des nodeMCU leer.

Aufbau + Code:
34076

34077

34078

34079

Gnom67
04.04.2019, 16:30
Ich hab auch gar nicht den Spannungsteiler in Frage gestellt. Aber an sowas muss ja nun auch kein Aufbau scheitern. Sorry, wenn ich das mal sage, aber wer schon Probleme hat, einen Spannungsteiler anzuschließen, wird sich mit der Sache nicht ganz leicht tun.

Statt beharrlich fußstampfend zu sagen: "Menno! Ich habs doch alles richtig gemacht, aber es geht trotzdem nicht!", wäre es vielleicht angebracht, mal zu schauen, WAS ÜBERHAUPT geht. Vielleicht hat er sich die IOs des ESP schon längst zerschossen mit den 5 Volt. Oder der Fehler liegt ganz woanders. Ich habe kürzlich an einem µC getüftelt und letztlich herausgefunden, dass die Pinbezeichnungen im Datenblatt falsch sind. Da kann man sich einen Wolf suchen. (Ich hab aber alles ganz korrekt angeschlossen... und es ging trotzdem nicht! Menno!!!)
Also, da würd ich doch erstmal schauen, was das beschoppte Teil TUT und nicht dauernd drauf rumreiten, was es NICHT TUT!

HaWe
04.04.2019, 16:32
Habe es jetzt exakt so gemacht, trotz alledem bleibt die Konsole des nodeMCU leer.

Aufbau + Code:
34076

34077

34078

34079


wo hast du denn die ESP-Tx/Arduino-Rx Verbindung? Die OHNE Spannungsteiler? (HIMMEL!!)

Und welche Widerstandswerte hast du für den Spannungsteiler verwendet?


@GNOM: wenn unser OP noch nicht mal die Boards korrekt verkabeln kann, wie man es ihm hier zeigt, dann werden auch andere Tests nichts bringen... :roll:

Gnom67
04.04.2019, 16:47
Sehe ich das in deinem Code richtig, dass Pin 2 als Tx konfiguriert ist? Das Kabel steckt doch auf dem Bild nicht in Pin 2 ???

HaWe
04.04.2019, 16:58
Gno[/B]m67;651217]Sehe ich das in deinem Code richtig, dass Pin 2 als Tx konfiguriert ist? Das Kabel steckt doch auf dem Bild nicht in Pin 2 ???

Du hast wschl recht! :p
Ich wäre auch dafür, NIE die GPIO Nummern zu verwenden, sondern IMMER die D-Nummern, auch im Code.
Dort muss es dann ntl D2 bzw. D1 heißen (statt GPIO 4 oder 5) und schon gar nicht 2 oder 1 !!


PS:
man kann also immer noch konstatieren:
alles exakt richtig ist es hier noch absout nicht!

Gnom67
04.04.2019, 17:06
Der Arduino-Pin mit der Bezeichnung 2 hat die physische Pinnummer 4 und die IDE-Pinnummer 2. (https://aws.robu.in/wp-content/uploads/2017/12/Arduino-UNO-R3-Pins.jpg) Welche bei Softserial anzugeben ist, ist fraglich. Ich nehme an, dass 2 richtig ist.
Also Kabel in den Pin mit dem Aufdruck "2" und in die Software für Tx = 2 eintragen. Vielleicht klappts.

Moppi
04.04.2019, 17:13
Hat es von euch außer mir mal jemand ausprobiert?

34080
34081

Alles prima!
Code bleibt derselbe wie im Thread ursprünglich.

MfG

HaWe
04.04.2019, 17:14
Der Arduino-Pin mit der Bezeichnung 2 hat die physische Pinnummer 4 und die IDE-Pinnummer 2. (https://aws.robu.in/wp-content/uploads/2017/12/Arduino-UNO-R3-Pins.jpg) Welche bei Softserial anzugeben ist, ist fraglich. Ich nehme an, dass 2 richtig ist.
Also Kabel in den Pin mit dem Aufdruck "2" und in die Software für Tx = 2 eintragen. Vielleicht klappts.

Bitte verwirre hier die Leute nicht, wenn du dich selber nicht richtig auskennst!

Die Arduino-Nummern tragen ein "D" davor, also D2, nicht 2.
Die Arduino-D-Nummern sind es auch, die beim nodeMCU aufgedruckt sind, in der richtigen Reihenfolge ab D0 bis D8, daher sind sie verwechslungssicherer als die verworren unsortierten GPIO-Nummern.

Es muss also heißen für den nodeMCU:
SoftSerial mySerial(D2,D1).

(Beim UNO gigt es ntl KEINE D-Nummern!)

fcn200
04.04.2019, 17:22
Hat es von euch außer mir mal jemand ausprobiert?

34080
34081

Alles prima!

MfG

Ja.. Ich habe genau denselben Aufbau, bekomme aber nichts ausgegeben..

HaWe
04.04.2019, 17:24
Ja.. Ich habe genau denselben Aufbau, bekomme aber nichts ausgegeben..

Moppi meinte irgendwen anderen, nicht dich! (ich selber kann es nicht, ich habe keine Boards frei)

mach DU die Verkabelung mit Spannungsteiler, wie ich dir gezeigt habe und wie es richtig ist!
Und merze bitte endlich auch alle anderen Fehler aus, die man dir aufgezählt hat, samt Pinnummern und Massekabel, dann klappt es auch, da wette ich drauf (es sei denn, du hast inzwischen deinen ESP verbrutzelt durch Verkabelungsfehler)!

Moppi
04.04.2019, 17:28
Bitte verwirre hier die Leute nicht, wenn du dich selber nicht richtig auskennst!

Die Arduino-Nummern tragen ein "D" davor, also D2, nicht 2.
Die Arduino-D-Nummern sind es auch, die beim nodeMCU aufgedruckt sind, in der richtigen Reihenfolge ab D0 bis D8, daher sind sie verwechslungssicherer als die verworren unsortierten GPIO-Nummern.

Es muss also heißen für den nodeMCU:
SoftSerial mySerial(D2,D1).

(Beim UNO gigt es ntl KEINE D-Nummern!)

Falsch!


Ergebnis:

exit status 1
'D2' was not declared in this scope


Jetzt kann mal raten, warum ich, der Einfachheit halber, GPIO-Nummern verwendet habe.


MfG

HaWe
04.04.2019, 17:30
Ergebnis:

exit status 1
'D2' was not declared in this scope


MfG

dann hast du den falschen Board-Core, du musst nodeMCU 1.0 über Boardmanager esp8266 by ESP8266 COMMUNITY installieren und auswählen, denn nur der wird von der ESP-Community für ihre API-Libs unterstützt.

https://cdn.instructables.com/FPF/I7DM/IKJ8C6SP/FPFI7DMIKJ8C6SP.LARGE.jpg
https://cdn.instructables.com/FAG/LWJD/IKLFPSOW/FAGLWJDIKLFPSOW.LARGE.jpg

inzwischen nicht Version 2.0.0 sondern 2.5.0 !

Gnom67
04.04.2019, 17:42
Ein "D" kann ich in dem Code nirgends sehen - und auf dem Uno auch nicht.
Beim Node steht auf dem Board D2 und auf jeder Pinreferenz (https://i1.wp.com/henrysbench.capnfatz.com/wp-content/uploads/2016/12/Lolin-Node-MCU-IO-Pin-Map-Arduino-IDE.png) steht da GPIO4 - also könnte man 4 angeben oder D2.
Auf dem Uno steht bei den Analogen A0, A1, A2, ... und bei den Digitalen nur 0, 1, 2, ... in der Pinreferenz (https://aws.robu.in/wp-content/uploads/2017/12/Arduino-UNO-R3-Pins.jpg) findet man die Bezeichnung 2 und die Zuordnung zu IDE-Nr. 2. D2 finde ich da nirgends. Lediglich die Bezeichnung PD2, die aber nur sagt Port D Bit 2. Im Code müsste demnach 2 oder D2 funktionieren.
Komischerweise widerspricht sich somit die Programmierung von NodeMCU und Uno. Es sei denn, man greift im Uno auf die physische Nummer (4) zurück.

PS: Mit persönlich ist das völlig egal - ich interpretiere nur die verlinkten Quellen. Wenn du dich "richtig auskennst", kannst du uns ja sicher erklären, warum es in der Quelle heißt: "D2 - Pin Numer to Use in Arduino IDE = 4".

fcn200
04.04.2019, 17:45
Moppi meinte irgendwen anderen, nicht dich! (ich selber kann es nicht, ich habe keine Boards frei)

mach DU die Verkabelung mit Spannungsteiler, wie ich dir gezeigt habe und wie es richtig ist!
Und merze bitte endlich auch alle anderen Fehler aus, die man dir aufgezählt hat, samt Pinnummern und Massekabel, dann klappt es auch, da wette ich drauf (es sei denn, du hast inzwischen deinen ESP verbrutzelt durch Verkabelungsfehler)!

was glaubst du wohl was ich die ganze zeit mache...

HaWe
04.04.2019, 17:48
@ Gnom67
wie gesagt, wenn du dich nicht auskennst, verwirre bitte hier nicht die Leute!

Ich schrieb doch: auf dem ESP sind es die Nummer MIT D davor, beim Uno OHNE D.
Daran sollte man sich gewöhnen, der ESP ist kein Arduino-Board, und die ESP-Community hat eben die D-Nummern gewählt (optional zu den verworrenen GPIO Nummern).
Die D-Nummrn sind aud dem ESP aufgedruckt, also verwendet man besser diese.

- - - Aktualisiert - - -


was glaubst du wohl was ich die ganze zeit mache...

du machst irgendwas, aber offenbar nicht exakt so wie du es sollst, weil du immer nur die Hälfte liest.

Ich bich jetzt erst mal raus.

Moppi
04.04.2019, 17:53
@fcn200

Wenn es nicht funktioniert, mit meinem Code, stimmt was anderes nicht:

1. Baudrate im Terminalfenster auf 115200 einstellen
2. COM-Schnittstelle richtig einstellen
3. nodeMCU funktioniert? Wurde das jemals getestet? Sendet es Daten über die serielle Schnittstelle (USB) an das Terminalfenster? Hierzu mal einen Sketch auf das nodeMCU laden, der nur Daten auf die serielle Schnittstelle ausgibt.

Hier mal ein Beispiel-Sketch:




void setup() {
// Open serial communications and wait for port to open:
Serial.begin(115200);
while (!Serial) {} // wait for serial port to connect. Needed for native USB port only
Serial.println();
Serial.println();
Serial.println("Goodnight moon!");


}


void loop() {
Serial.println("Goodnight moon!");
}




Auf das nodeMCU übertragen und schauen, ob Daten im Terminalfenster ankommen.

Gnom67
04.04.2019, 17:59
@ Gnom67
Ich schrieb doch: auf dem ESP sind es die Nummer MIT D davor, beim Uno OHNE D.


Verwirr du mal nicht die Leute.
Zitat:
"Die Arduino-Nummern tragen ein "D" davor, also D2, nicht 2."

Was jetzt? Mit oder ohne?

Aber wenn das Kabel in (D)5 steckt, ist es auch egal, ob man 2 oder 4 programmiert. Ich hab allmählich den Eindruck, der TO verarscht uns nur. So kann man sich doch nicht mal anstellen, wenn man sich richtig Mühe gibt, sich keine Mühe zu geben.

HaWe
04.04.2019, 18:02
auf dem nodeMCU sollte verwendet werden
D2 statt 4, bzw.
D1 statt 5,
weil das nicht zu Verwirrungen mit der Beschaltung führt, aber funktionieren tut beides.

DASS es zu Verwirrungen führt, sieht man an der falschen Beschaltung des OPs.
Man muss dann aber auch im Code D2 schreiben und UM GOTTES WILLEN NICHT 2 !!


Ich hab allmählich den Eindruck, der TO verarscht uns nur. So (edit: doof) kann man sich doch nicht mal anstellen, wenn man sich richtig Mühe gibt, sich keine Mühe zu geben.
langsam glaub ichs auch... ;)

fcn200
04.04.2019, 18:27
@fcn200

Wenn es nicht funktioniert, mit meinem Code, stimmt was anderes nicht:

1. Baudrate im Terminalfenster auf 115200 einstellen
2. COM-Schnittstelle richtig einstellen
3. nodeMCU funktioniert? Wurde das jemals getestet? Sendet es Daten über die serielle Schnittstelle (USB) an das Terminalfenster? Hierzu mal einen Sketch auf das nodeMCU laden, der nur Daten auf die serielle Schnittstelle ausgibt.

Hier mal ein Beispiel-Sketch:




void setup() {
// Open serial communications and wait for port to open:
Serial.begin(115200);
while (!Serial) {} // wait for serial port to connect. Needed for native USB port only
Serial.println();
Serial.println();
Serial.println("Goodnight moon!");


}


void loop() {
Serial.println("Goodnight moon!");
}




Auf das nodeMCU übertragen und schauen, ob Daten im Terminalfenster ankommen.

funktioniert wunderbar.. habe das schon früher mal getestet gehabt.


Ich hab allmählich den Eindruck, der TO verarscht uns nur. So (edit: doof) kann man sich doch nicht mal anstellen, wenn man sich richtig Mühe gibt, sich keine Mühe zu geben.

Was sind denn das für unverschämte Anschuldigungen hier?
Es geht mir ganz gewiss nicht darum, irgend jemand zu verarschen.

Und so "retarded" wie ihr glaubt bin ich auch nicht!!!

HaWe
04.04.2019, 19:29
sorry, sollte witzig sein und nicht beleidigend. schließlich stammt das Topic vom 1. April...

und soviel falsch machen wie du es bisher gemacht - also nee...
und dann immer behaupten, du hättest alles "exakt richtig" gemacht... #-o

geh nochmal ALLE MEINE Hinweise Schritt für Schritt durch

- Massekabel zwischen beiden Boards
- Spannungsteiler geerdet
- richtige Pinbezeichnungen in den Codes !!
- richtige Pinverbindungen an den Boards !!
- Arduino-TX über den Spannungsteiler an ESP-RX
- ESP-TX direkt an Arduino-RX
- richtiges Board und richtige Version im Boardmanager ausgewählt
und dann:
- angepasstes SoftSerial aus der ESP-Lib

Und damit verabschiede ich mich jetzt hier wirklich und werde auch keine Fotos mehr kontrollieren, sorry.

Moppi
04.04.2019, 20:43
funktioniert wunderbar.. habe das schon früher mal getestet gehabt.





Gut. Wenn also die Ausgabe vom nodeMCU zum Terminal funktioniert, dann mal bitte diesen Code auf das nodeMCU übertragen und ausprobieren:


#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
delay(1000);
Serial.print(": ");
if(mySerial.available()){
Serial.print(" - ");
Serial.write(mySerial.read());
}
}


Nun muss ja was in Deinem Terminalfenster erscheinen. Das, was dort im Terminalfenster erscheint, bitte kopieren und hier mitteilen, damit wir die Ausgabe sehen.
Mach das bitte einmal, wenn der Arduino mit dem nodeMCU verbunden ist und einmal nur mit dem nodeMCU, ohne dass der Arduino damit verbunden ist.

MfG

fcn200
04.04.2019, 22:07
dann mal bitte diesen Code auf das nodeMCU übertragen und ausprobieren:


#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
delay(1000);
Serial.print(": ");
if(mySerial.available()){
Serial.print(" - ");
Serial.write(mySerial.read());
}
}


Nun muss ja was in Deinem Terminalfenster erscheinen. Das, was dort im Terminalfenster erscheint, bitte kopieren und hier mitteilen, damit wir die Ausgabe sehen.
Mach das bitte einmal, wenn der Arduino mit dem nodeMCU verbunden ist und einmal nur mit dem nodeMCU, ohne dass der Arduino damit verbunden ist.

MfG
Für mich zum Verständnis:
ein weiterer Code auf dem Arduino ist nicht erforderlich?
und welche pins muss ich verbinden?

Moppi
04.04.2019, 23:06
@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:


#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("!");
}



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).

- - - Aktualisiert - - -

Nochmal was zur Pegelwandlung:

https://www.mikrocontroller.net/articles/Pegelwandler

Mehr kann man da jetzt kaum noch dazu sagen.

MfG

fcn200
05.04.2019, 09:02
@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:


#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("!");
}



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).

- - - Aktualisiert - - -

Nochmal was zur Pegelwandlung:

https://www.mikrocontroller.net/articles/Pegelwandler

Mehr kann man da jetzt kaum noch dazu sagen.

MfG


Ergebnis:

34082

34083

- - - Aktualisiert - - -

Bei einem weiteren Versuch, den empfangenen Text außerhalb der if-bedingung auszugegeben erhalt ich folgende Ausgabe:
34084

Moppi
05.04.2019, 17:26
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

fcn200
05.04.2019, 17:35
Man kann leider auf den Bildern kaum etwas erkennen. Kopiere doch mal den Text aus dem Terminalfenster und mach kein Bildschirmfoto!


bei den ersten beiden Bildern (mit und ohne Arduino verbunden) ist die Ausgabe leer,
bei dem dritten Bild bekomme ich in etwa so was hier"

: -1
: -1

Moppi
05.04.2019, 20:51
bei den ersten beiden Bildern (mit und ohne Arduino verbunden) ist die Ausgabe leer,
bei dem dritten Bild bekomme ich in etwa so was hier"

: -1
: -1

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.

HaWe
06.04.2019, 11:08
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.



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.

Moppi
06.04.2019, 11:35
Ist eben beim nodeMCU nicht so einfach. Da muss jeder selber seine Prioritäten setzen. Alle Pins sind für irgendwas gedacht. Muss man gucken, auf was man am ehesten verzichten könnte. Vielleicht sollte man dazu einen neuen Thread aufmachen, welche Pins wann wofür Verwendung finden können und wann nicht. Für mich stellte sich die Frage anders, wenn ich drüber nachdenke, wie ich zwei Geräte miteinander zur Kommunikation verbinde. Brauche ich SoftwareSerial, wenn ich I2C nutze? Brauche ich I2C, wenn ich SoftwareSerial nutze? Ich würde mich für eins von beiden entscheiden. MISO, MOSI etc. würde ich mir für div. andere Zwecke frei halten. Da kommt u.U. noch ein anderes Gerät ans nodeMCU dran.
Aber da gibts eben verschiedene Vorlieben und Auffassungen. Hat aber mit dem eigentlichen Problem hier , finde ich, nichts zu tun und führt jetzt auf Abwege, die im Moment nicht zielführend sind.