当我尝试与arduino通信nodemcu时出现无效输入错误

时间:2019-12-25 18:36:38

标签: arduino

我正在尝试从Arduino向nodemcu发送多个数据。但是它一直显示错误

deserializeJson()失败,代码为InvalidInput

这是代码

Arduino UNO

#include <SoftwareSerial.h>

#include <ArduinoJson.h>

SoftwareSerial s(5,6);

void setup() {

s.begin(9600);

}

void loop() {

StaticJsonDocument<1000> doc;

doc["data1"] = 100;

doc["data2"] = 200;

serializeJson(doc,s);
delay(1000);

}

nodemcu

#include <SoftwareSerial.h>
SoftwareSerial s(D6,D5);
#include <ArduinoJson.h>

void setup() {
  // Initialize Serial port
  Serial.begin(9600);
  s.begin(9600);
  while (!Serial) continue;

}

void loop() {
  StaticJsonDocument<200> doc;
  while(s.available()){
    //delay(1000);
    Serial.write(s.read());
    auto error = deserializeJson(doc,s);
    if(error) {
      Serial.println();
        Serial.print(F("deserializeJson() failed with code "));
        Serial.println(error.c_str());
    }
    serializeJsonPretty(doc,Serial);
    delay(1000);
  }
}

这是结果

{

deserializeJson() failed with code IncompleteInput

false"

deserializeJson() failed with code InvalidInput

null:

deserializeJson() failed with code InvalidInput

100"

deserializeJson() failed with code InvalidInput

null:

deserializeJson() failed with code InvalidInput

200{

deserializeJson() failed with code IncompleteInput

false"

deserializeJson() failed with code InvalidInput

null:

deserializeJson() failed with code InvalidInput

1 个答案:

答案 0 :(得分:0)

页面How to do serial communication between two boards?指出InvalidInput是由于以下原因之一:

  • 时钟偏斜
  • 接线不良/电噪声
  • 接收器读取速度太慢并丢失字节
  • 电压失配(5V vs.3.3V)

除了在两侧使用相同的MCU外,您无法做任何时钟偏斜的事情。

最好提高“调试”串行端口的速度。它必须比“传输”串行端口快一个数量级。

您可以使用logic level converter来解决电压不匹配的问题。