Последовательная связь от Arduino до ESP8266 NodeMCU работает, но от NodeMCU до Arduino не работает

Мое подключение цепи выглядит следующим образом: (Я следую этому учебнику)

Код, загруженный в Arduino:

#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>
int D5 = 14, D6 = 12;
SoftwareSerial s(D6,D5);
#include <ArduinoJson.h>

void setup() {
  // Инициализация последовательного порта
  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 получен и проанализирован");
 root.prettyPrintTo(Serial);
 Serial.print("Данные 1 ");
 Serial.println("");
 int data1=root["data1"];
 Serial.print(data1);
 Serial.print("   Данные 2 ");
 int data2=root["data2"];
 Serial.print(data2);
 Serial.println("");
 Serial.println("---------------------xxxxx--------------------");
}

Arduino отправляет данные JSON, а NodeMCU анализирует их, как и ожидалось.

--------Пока все нормально. ---------

Но мое требование-наоборот. Когда я создаю объект JSON в NodeMCU и пытаюсь разобрать его в arduino, JSON не получается.

На этот раз я написал этот код в NodeMCU:

#include <SoftwareSerial.h>
#include <ArduinoJson.h>

int D5 = 14, D6 = 12;
SoftwareSerial s(D6,D5);

void setup() {
  Serial.begin(9600);
  s.begin(9600);
  while (!Serial) continue;
}

void loop() {
 StaticJsonBuffer<1000> jsonBuffer;
 JsonObject& root = jsonBuffer.createObject();
 root["data1"] = 100;
 root["data2"] = 200;
 if(s.available()>0){
   root.printTo(s);
 } 
}

И код в Arduino:

#include <SoftwareSerial.h>
#include <ArduinoJson.h>
SoftwareSerial s(5,6);

void setup() {
  s.begin(9600);
  Serial.begin(9600);
}

void loop() {
  StaticJsonBuffer<1000> jsonBuffer;
  JsonObject& root = jsonBuffer.parseObject(s);
  if (root == JsonObject::invalid())
    return;

  Serial.println("JSON received and parsed");
  Serial.print("Data 1 : ");
  int data1=root["data1"];
  Serial.println(data1);
  Serial.print("Data 2 : ");
  int data2=root["data2"];
  Serial.println(data2);
  Serial.println("---------------------xxxxx--------------------");
 }

Этот код не работает. Я ничего не получаю в последовательном мониторе arduino. Схема подключения остается такой же, как и раньше.

Какую еще информацию я должен предоставить ? Какая модификация мне нужна?

, 👍0

Обсуждение

может быть, попробовать меньший буфер, @Juraj

вам требуется общее заземление, @jsotola

@jsotola, но я тоже пробовал. Более того, без заземления : данные поступают от arduino к NodeMCU. Тогда зачем мне земля ?, @partho

@Juraj , как ? И , если данные поступают из arduino в nodemcu без изменения буфера, действительно ли мне нужно меняться в случае NodeMCU на arduino ?, @partho

буфер 1000 байт слишком велик для 2кбайт оперативной памяти Uno, @Juraj

@Juraj что такое допустимое значение ? Нужно ли менять SoftwareSerial.h или HardwareSerial.h ?, @partho

StaticJsonBuffer<1000> jsonBuffer, @Juraj


1 ответ


-1

Проблема может быть связана с тем, что платы Arudino имеют логические контакты 5 В, в то время как платы ESP имеют логические контакты 3,3 В. напряжения 3,3 В может быть недостаточно для того, чтобы Arduino мог видеть данные.

,