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
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
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 deadlockann kann man das ja immer noch mal ändern, wenn es erstmal überhaupt funktioniert wie es soll!![]()
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
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:
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 - - -
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:
Wenn ich mich recht entsinne, funktionierte das auch.also 5V TX -> 4kOhm -> 3.3V RX + 6kOhm -> GND
MfG
Geändert von Moppi (04.04.2019 um 13:28 Uhr) Grund: Korrektur
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.
Lesezeichen