Estoy trabajando en la comunicación entre los dos NodeMCU basándome en el protocolo de comunicación en serie. He usado la biblioteca SoftwareSerial y ArduinoJson para mi programa según algunas fuentes en Internet. El problema está en la estabilidad del valor de lectura de Serial. En cuanto a lo que vi en el monitor COM, era falta de datos o aparecía alguna letra extraña. Quiero que los dos Nodos puedan enviar y recibir datos entre sí, pero la inestabilidad me ha detenido en la primera dirección. La ayuda de cualquiera será apreciada. Estoy tratando de aplicar UART por su simplicidad y velocidad, pero la sugerencia de otra solución con otros protocolos sería excelente. A continuación se adjunta el código del nodo transmisor y del nodo receptor:
El programa de envío
#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);
}
El programa receptor
#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);
}
Debe proporcionar una cadena o una matriz de caracteres en el
JsonObject& root = jsonBuffer.parseObject(s);
La variable s es un objeto aquí para la biblioteca SoftwareSerial.
Primero necesitas leer la serie como
while(s.available()){
String r = s.readString();
JsonObject& root = jsonBuffer.parseObject(r);
}
Aquí r será una matriz json sin procesar y el objeto json la analizará. Y será bueno si subes tu salida para entender y ver lo que realmente está pasando.
Actualizar:
El uso de UART con 115200 baudios sin demora y con cables de puente puede causar la pérdida de caracteres.
El otro problema es que tal vez esto esté sucediendo debido a la supervisión del puerto serie al mismo tiempo. Tal vez pueda depurarlo con solo mirar los pines digitales que está controlando para comprender que su código funciona bien o no. Puede
O puede probar la comunicación I2c, que es sincrónica, más confiable y más rápida en lugar de UART.
En realidad, la biblioteca SoftwareSerial es un poco más lenta que el puerto serie real.
eliot alderson
Thanh Nhon
eliot alderson
chris stratton
Thanh Nhon