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:
meine Beschaltung: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!
Code fürs nodeMCU:
und Code für Arduino: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()); } }
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:
Ausgabe vom Arduino serial port:
Code für nodeMCU:Code:Hello, world: 77! Hello, world: 78! Hello, world: 79!
Code für Arduino: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("!"); }
Funktioniert die Kommunikation nach den vorherigen Voraussetzungen auch per RX + TX - PinsCode:#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()); } }
Das musste ich auch noch wissen. Beide Verbindungskabel habe ich umgesteckt, so dass jetzt RX und TX vom Arduino genutzt werden können:
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:
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 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()); } }
Und nach etwas Fummelei funktioniert auch das, die Ausgabe vom nodeMCU serial port: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 } }
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.....................







Zitieren

Lesezeichen