Последовательная связь между ESP8266 и Arduino Uno

Я хочу отправить данные с Arduino на ESP8266. Я сделал все соединения RX и TX. Проблема в том, что данные отправляются не каждую секунду, а останавливаются после одного байта. Когда я отсоединяю кабель Arduino, данные считываются.

Мой код Arduino:

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

void loop() {

    Serial.write("50");
    delay(1000);
}

Мой код ESP8266:

void setup() {

Serial.begin(9600);

  // подключаемся к вайфаю.
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);

  while (WiFi.status() != WL_CONNECTED) {

    delay(500);
  }
  Serial.println("Connected !");

}   

void loop() {     

 Serial.print(Serial.readString());

}

, 👍1


2 ответа


5

Поскольку вы Arduino Uno, он имеет только один Serial. Этот последовательный порт можно использовать для передачи данных в режиме USART на другое последовательное устройство, а также для просмотра любых данных отладки в последовательном терминале.

Однако обе функции нельзя использовать одновременно. Пара Tx Rx Arduino может быть подключена к одной паре другого устройства, то есть либо к компьютеру через кабель, либо к Tx Rx ESP8266.

Но если вам действительно нужно подключить Uno к компьютеру и одновременно отправить данные на ESP8266, вам придется использовать Библиотека SoftwareSerial для преобразования любого цифрового вывода в вывод Tx Rx и подключения их к ESP8266 для передачи данных.

,

0

Как объяснил goddland_16. Использование библиотеки Software Serial решит проблему. Код приведен ниже. При инициализации другого цифрового вывода в качестве коммуникационного контакта прерывание между Tx и Rx и ESP8266 отделяется.

Код Arduino UNO/Nano:

/*
 * bismillah hir rahman nir raheem
 * UNO/Nano = Pin 7 & Pin 8
 * Note: Uno and ESP8266 cross connection
 */

#include <SoftwareSerial.h>

SoftwareSerial ArduinoUno(7,8);
String f;

void setup() {
    Serial.begin(9600);
    ArduinoUno.begin(115200);
}

void loop() {
    float i = (random(100) + 1);
    float j = (random(100) + 1);

    f = String('H') + String(i) + String('T') + String(j);
    ArduinoUno.println(f);
    delay(2000);
}

Код ESP8266:

/*
 * bismillah hir rahman nir raheem
 * ESP8266 = Pin D7 & Pin D8
 * Note: Uno and ESP8266 cross connection
 */

#include <SoftwareSerial.h>
#include <ESP8266WiFi.h>

SoftwareSerial NodeMCU(D7,D8);

void setup() {
    Serial.begin(9600);
    NodeMCU.begin(115200);

    pinMode(D7,INPUT);
    pinMode(D8,OUTPUT);
}

void loop() {
    String content = "";
    char character;

    while (NodeMCU.available()) {
       character = NodeMCU.read();
       content.concat(character);
    }

    if (content != "") {
        Serial.println(content);
    }

    Serial.println("Temperature");
    Serial.println(content.substring(1, 6));
    Serial.println("Humidity");
    Serial.println(content.substring(7, 12));
    delay(2000);
}
,

Привет и добро пожаловать на биржу стека Arduino. Пожалуйста, улучшите свой ответ, объяснив всем, что делает ваш код и как он решает проблему., @sa_leinad