Softwareserial между arduino uno и esp8266
У меня есть модуль Arduino UNO и HUZZAH ESP8266. Мне нужно отправить данные между Arduino UNO и модулем ESP через последовательный порт программного обеспечения. Прямо сейчас у меня есть данные записи модуля ESP и данные отображения Arduino UNO, но они не работают. Когда я запускаю Arduino UNO и открываю его последовательный монитор, ничего не печатается с использованием приведенного ниже исходного кода.
- Вывод приема ESP8266 подключен к выводу 2 Arduino UNO.
- Вывод ESP8266 TX, подключенный к PIN-3 PIN Arduino UNO.
- Использование кабеля 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);
}
@Marquinio, 👍8
3 ответа
Лучший ответ:
Убедитесь, что:
- Вывод RX на Arduino UNO подключен к выводу TX на ESP8266.
- Вывод TX на Arduino UNO подключен к выводу RX на ESP8266.
- Скорость передачи данных должна быть установлена на одно и то же значение как для Arduino, так и для ESP8266.
Не знаю, как у вас Arduino, но, судя по этой схеме, ваши RX и TX должны поменяться местами.
Дополнение к ответу выше. TX UNO имеет напряжение 5 В, а RX ESP8266 — 3,3 В, поскольку это модуль с напряжением 3,3 В. Поэтому лучше использовать резистивный делитель, чтобы довести напряжение TX UNO до 3,3 В, а затем подать его на RX ESP, вместо того, чтобы напрямую соединять их друг с другом.
//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
- AT-команда не отвечает на последовательный монитор
- Отправка данных Arduino в MySQL с помощью phpMyAdmin и XAMPP на Windows10
- Arduino выводит значения мусора на serial monitor с ESP8266
- ошибка: espcomm_upload_mem failed при загрузке скетча
- фатальная ошибка ESP8266WiFi.h: Такого файла или каталога нет
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Получить данные с сайта с помощью ESP8266 с помощью AT-команд
- Захват изображений с OV7670 (без FIFO) с использованием Arduino Uno?
И наоборот, вывода TX 3,3 В ESP8266 обычно достаточно для управления выводом RX 5 В Uno., @linhartr22