Последовательная связь от 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. Схема подключения остается такой же, как и раньше.
Какую еще информацию я должен предоставить ? Какая модификация мне нужна?
@partho, 👍0
Обсуждение1 ответ
Проблема может быть связана с тем, что платы Arudino имеют логические контакты 5 В, в то время как платы ESP имеют логические контакты 3,3 В. напряжения 3,3 В может быть недостаточно для того, чтобы Arduino мог видеть данные.
- AT-команда не отвечает на последовательный монитор
- Как связаться с ESP8266 ESP01, отправив данные через программный сериал на Arduino Uno?
- Повреждение данных SoftwareSerial - поиск предложений
- Можно ли использовать SoftwareSerial в ESP01
- Проблемы с последовательной связью между Arduino и ESP8266.
- Ошибка отправки данных из ESP8266 в Uno
- Исправление последовательной связи, условие доступности последовательных данных проверяется даже после считывания всех отправленных данных.
- Как использовать 2 последовательных порта, когда библиотека WifiEsp использует один из обоих
может быть, попробовать меньший буфер, @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