Получение мусорных значений при отправке объекта Json из Arduino Uno в NodeMCU с использованием SoftwareSerial
Я пытаюсь отправить объект Json из Arduino UNO в NodeMCU с помощью SoftwareSerial. Я использую Arduino IDE. Я получаю значение мусора на последовательном мониторе NodeMCU. Пробовал с разными значениями мусора, не смог получить данные от Arduino UNO. Ниже приведен код. Пожалуйста, помогите. Заранее благодарю вас. Я не нашел общего языка. Я упомянул эту веб-страницу здесь.
Код Arduino UNO:
#include <SoftwareSerial.h>
#include <ArduinoJson.h>
SoftwareSerial s(5,6);
void setup() {
s.begin(9600);
}
void loop() {
StaticJsonBuffer<1000> jsonBuffer;
JsonObject& root = jsonBuffer.createObject();
root["data1"] = 100;
root["data2"] = 200;
if(s.available()>0)
{
root.printTo(s);
}
}
Код 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() {
StaticJsonBuffer<1000> jsonBuffer;
JsonObject& root = jsonBuffer.parseObject(s);
if (root == JsonObject::invalid())
return;
Serial.println("JSON received and parsed");
root.prettyPrintTo(Serial);
Serial.print("Data 1 ");
Serial.println("");
int data1=root["data1"];
Serial.print(data1);
Serial.print(" Data 2 ");
int data2=root["data2"];
Serial.print(data2);
Serial.println("");
Serial.println("---------------------xxxxx--------------------");
}
@Muskan Chotrani, 👍2
Обсуждение1 ответ
Лучший ответ:
Проблема с ArduinoJson.h заключается в том, что он не обеспечивает надежную и надежную передачу данных по UART serial.
Вместо этого вы должны использовать SerialTransfer.h для автоматической упаковки и анализа ваших данных для взаимодействия между Arduino без заголовка.Библиотека устанавливается через Arduino IDE и включает в себя множество примеров.
Вот особенности библиотеки:
Эта библиотека:
- можно загрузить через менеджер библиотек Arduino IDE (поиск "SerialTransfer.h").
- работает с "программно-последовательными" библиотеками
- является неблокирующим
- использует разделители пакетов
- использует последовательную начинку накладных байтов
- использует CRC-8 (полином 0x9B с таблицей подстановки)
- позволяет использовать пакеты динамического размера (пакеты могут иметь длину полезной нагрузки от 1 до 254 байт).
- может передавать байты, инты, флоат и даже структуры!!
Пример скетча TX Arduino:
#include "SerialTransfer.h"
SerialTransfer myTransfer;
void setup()
{
Serial.begin(115200);
Serial1.begin(115200);
myTransfer.begin(Serial1);
}
void loop()
{
char buff[] = "hi";
myTransfer.txObj(buff, sizeof(buff));
myTransfer.sendData(sizeof(buff));
delay(100);
}
Пример скетча Arduino:
#include "SerialTransfer.h"
SerialTransfer myTransfer;
void setup()
{
Serial.begin(115200);
Serial1.begin(115200);
myTransfer.begin(Serial1);
}
void loop()
{
if(myTransfer.available())
{
char buff[40];
myTransfer.rxObj(buff, sizeof(buff));
Serial.println("New Data: ");
Serial.write(buff, sizeof(buff));
Serial.println();
}
else if(myTransfer.status < 0)
{
Serial.print("ERROR: ");
if(myTransfer.status == -1)
Serial.println(F("CRC_ERROR"));
else if(myTransfer.status == -2)
Serial.println(F("PAYLOAD_ERROR"));
else if(myTransfer.status == -3)
Serial.println(F("STOP_BYTE_ERROR"));
}
}
Большое вам спасибо. Это решило мою проблему. Теперь передача работает нормально., @Muskan Chotrani
- AT-команда не отвечает на последовательный монитор
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- Ардуино для чтения с преобразователя RS232 в последовательный модуль TTL
- Как связаться с ESP8266 ESP01, отправив данные через программный сериал на Arduino Uno?
- myserial.available() возвращает нулевой байт
- Последовательная связь от Arduino до ESP8266 NodeMCU работает, но от NodeMCU до Arduino не работает
- SoftwareSerial данные недоступны
- последовательная передача данных на GPS-экране duinopeak
Я не нашел общего языка.
... они, может быть, тебе должны? https://majenko.co.uk/blog/importance-sharing-grounds, @MajenkoЯ тоже попытался найти общий язык, результат тот же, @Muskan Chotrani