arduino - 当我尝试与 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
解决方案
该页面如何在两个板之间进行串行通信?说InvalidInput是由于以下原因之一:
- 时钟偏差
- 接线不良/电噪声
- 接收器读取速度太慢并丢失字节
- 电压不匹配(5V 与 3.3V)
除了在两侧使用相同的 MCU 之外,您无法对时钟偏差做任何事情。
如果您提高“调试”串行端口的速度,那将是最好的。它必须比“传输”串行端口快一个数量级。
您可以使用逻辑电平转换器修复电压不匹配问题。
推荐阅读
- javascript - 如果我滚动得太快,滚动链接定位不起作用。有没有更好的方法?
- excel - 如何阻止 Excel VBA 组合框将返回的一条记录拆分为多行?
- java - 编译错误:无法转换 Set
> 设置 >> - android - Firebase 电话身份验证未发送带有代码的短信
- html - 如何将正文定位在 CSS 导航栏对面的中间和徽标的左侧?
- r - 如何在远程机器上使用 GoogleVis R 包?
- excel - 在工作表中选择变量值
- django - Django,按用户全名过滤 Q 对象
- javascript - 未捕获的 ReferenceError:未定义 firebaseui
- algorithm - 生成大列表中元素之间总和的有序列表