首页 > 解决方案 > 当我尝试与 arduino 通信 nodemcu 时出现无效输入错误

问题描述

我正在尝试将多个数据从 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);

}

节点库

#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

标签: arduino

解决方案


该页面如何在两个板之间进行串行通信?InvalidInput是由于以下原因之一:

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

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

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

您可以使用逻辑电平转换器修复电压不匹配问题。


推荐阅读