Ich arbeite an der Kommunikation zwischen den beiden NodeMCUs basierend auf dem seriellen Kommunikationsprotokoll. Ich habe die SoftwareSerial- und ArduinoJson-Bibliothek für mein Programm gemäß einigen Quellen im Internet verwendet. Das Problem liegt an der Stabilität des Lesewerts von Serial. Was ich auf dem COM-Monitor gesehen habe, war entweder ein Mangel an Daten oder ein seltsamer Buchstabe. Ich möchte, dass die beiden Knoten Daten voneinander senden und empfangen können, aber die Instabilität hat mich in der ersten Richtung aufgehalten. Jedermanns Hilfe wird geschätzt. Ich versuche, UART wegen seiner Einfachheit und Geschwindigkeit anzuwenden, aber der Vorschlag einer anderen Lösung mit anderen Protokollen wäre großartig. Der Code des sendenden Knotens und des empfangenden Knotens wurde unten angehängt:
Das sendende Programm
#include <ArduinoJson.h>
SoftwareSerial s(D5,D6);
byte C1;
void setup() {
pinMode(D0,OUTPUT);
s.begin(115200);
}
void loop() {
//Sending code
StaticJsonBuffer<1000> jsonBuffer;
JsonObject& root = jsonBuffer.createObject();
root["Temp"] = 100;
if(s.available()>0)
{
root.printTo(s);
}
Das empfangende Programm
#include <SoftwareSerial.h>
SoftwareSerial s(D6,D5);
#include <ArduinoJson.h>
void setup() {
// Initialize Serial port
Serial.begin(115200);
pinMode(D0,OUTPUT);
s.begin(115200);
while (!Serial) continue;
}
void loop() {
//Receiving code
StaticJsonBuffer<1000> jsonBuffer;
JsonObject& root = jsonBuffer.parseObject(s);
if (root == JsonObject::invalid())
return;
root.prettyPrintTo(Serial);
Serial.print("Data 1 ");
Serial.println("");
int data1=root["Temp"];
if(data1==100)
digitalWrite(D0,HIGH);
else
digitalWrite(D0,LOW);
delay(100);
}
Sie sollten einen String oder ein char-Array in die angeben
JsonObject& root = jsonBuffer.parseObject(s);
Die s-Variable ist hier ein Objekt für die SoftwareSerial-Bibliothek.
Sie müssen zuerst die Seriennummer wie lesen
while(s.available()){
String r = s.readString();
JsonObject& root = jsonBuffer.parseObject(r);
}
Hier ist r ein rohes JSON-Array und das JSON-Objekt analysiert es. Und es ist gut, wenn Sie Ihre Ausgabe hochladen, um zu verstehen und zu sehen, was wirklich vor sich geht
Aktualisieren:
Die Verwendung von UART mit 115200 Baudrate ohne Verzögerung und mit Überbrückungskabeln kann dazu führen, dass die Zeichen fehlen.
Das andere Problem ist, dass dies möglicherweise auf die gleichzeitige Überwachung des seriellen Anschlusses zurückzuführen ist. Vielleicht können Sie es debuggen, indem Sie einfach auf die digitalen Pins schauen, die Sie steuern, um zu verstehen, dass Ihr Code gut funktioniert oder nicht. Sie können
Oder Sie können die I2c-Kommunikation ausprobieren, die anstelle von UART synchron und zuverlässiger und schneller ist.
Tatsächlich ist die SoftwareSerial-Bibliothek etwas langsamer als die eigentliche serielle Schnittstelle.
Elliot Alderson
Than Nhon
Elliot Alderson
Chris Stratton
Than Nhon