Softwareserial между arduino uno и esp8266

У меня есть модуль Arduino UNO и HUZZAH ESP8266. Мне нужно отправить данные между Arduino UNO и модулем ESP через последовательный порт программного обеспечения. Прямо сейчас у меня есть данные записи модуля ESP и данные отображения Arduino UNO, но они не работают. Когда я запускаю Arduino UNO и открываю его последовательный монитор, ничего не печатается с использованием приведенного ниже исходного кода.

  1. Вывод приема ESP8266 подключен к выводу 2 Arduino UNO.
  2. Вывод ESP8266 TX, подключенный к PIN-3 PIN Arduino UNO.
  3. Использование кабеля FTDI, поставляемого в комплекте с HUZZAH ESP8266, для питания этого модуля. Я просто подключил контакты RX и TX к PIN 2 и 3 ARDUINO по отдельности, как упоминалось выше.

Есть идеи, почему не работает? Ниже приведен код для обоих модулей. Спасибо,

Ардуино УНО

#include <SoftwareSerial.h>

SoftwareSerial ESPserial(2, 3); // прием | передача

void setup(void){
  //Запускаем аппаратную последовательную связь
  Serial.begin(115200);

  //Запускаем серийный номер программного обеспечения для связи с компонентом ESP8266
  ESPserial.begin(57600);  

}


void loop(void){



if (ESPserial.available()){
  Serial.println("ESP available!!!");
  Serial.println(ESPserial.read());
}


}

ХУЗЗА ESP8266

#include <ESP8266WiFi.h>

#include <SoftwareSerial.h>

SoftwareSerial ESPserial(2, 3); // прием | передача

void setup(void){
  //Запускаем последовательный порт программного обеспечения для связи с компонентом Arduino UNO
  ESPserial.begin(57600);

  //TODO: настроить Wi-Fi
}


void loop(void){
   ESPserial.write("This message generated by ESP module.");
   delay(500);
}

, 👍8


3 ответа


Лучший ответ:

4

Убедитесь, что:

  1. Вывод RX на Arduino UNO подключен к выводу TX на ESP8266.
  2. Вывод TX на Arduino UNO подключен к выводу RX на ESP8266.
  3. Скорость передачи данных должна быть установлена на одно и то же значение как для Arduino, так и для ESP8266.

Не знаю, как у вас Arduino, но, судя по этой схеме, ваши RX и TX должны поменяться местами.

,

2

Дополнение к ответу выше. TX UNO имеет напряжение 5 В, а RX ESP8266 — 3,3 В, поскольку это модуль с напряжением 3,3 В. Поэтому лучше использовать резистивный делитель, чтобы довести напряжение TX UNO до 3,3 В, а затем подать его на RX ESP, вместо того, чтобы напрямую соединять их друг с другом.

,

И наоборот, вывода TX 3,3 В ESP8266 обычно достаточно для управления выводом RX 5 В Uno., @linhartr22


0

//ESP

#include "SoftwareSerial.h"

SoftwareSerial ArduinoUno(D2,D3); //Rx, Tx

void setup() {

Serial.begin(9600);

ArduinoUno.begin(4800);

pinMode(D2, INPUT);

pinMode(D3, OUTPUT);

}

void loop() {

}

/******************************************************************************/

//УНО

#include "SoftwareSerial.h"

SoftwareSerial ArduinoUno(3,2); //Rx, Tx

void setup() {

Serial.begin(9600);

ArduinoUno.begin(4800);

}

void loop() {

  if(ArduinoUno.available() > 0){

    //float val = ArduinoUno.parseFloat();

    Serial.println(ArduinoUno.read());

  }

  delay(30);

}
,

правильно отформатируйте код (CTRL+K), @MichaelT