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.
Druckbare Version
NodeMCU:
Code:#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:
Code:#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);
}
Da gruselt es mir, das ist eine klassische Falle für ein deadlockCode:void loop(){
while(NodeMCU.available()){
float f = NodeMCU.parseFloat();
Serial.println(f);
}
}
"never ever loop in loop() without escape route"
mach da mal lieber ein if draus und mach es wie in der arduino doku
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 werdenCode:if(SWS.available > 3)
PS: "> 3" habe ich gewählt, weil eine float Zahl mindestens aus 3 Zeichen für "0.0" besteht
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.
du brauchst nur diesen Levelshifter Arduino TX -> ESP RX, nicht anders herum!Code:Arduino TX --| ( 5V Level )
|
33k
|
|---- ESP RX ( 3.3V Level)
|
47k
|
GND
@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!
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 :)Zitat:
ann kann man das ja immer noch mal ändern, wenn es erstmal überhaupt funktioniert wie es soll!
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.
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:
NodeMCU: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("!");
}
Aufbau:Code:#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());
}
}
Anhang 34066
Anhang 34067