Задать вопрос
YaroslavHub
@YaroslavHub

ESP8266 (ESP-01) не слушается Arduino. Что делать?

Пытаюсь законнектить Arduino Mega и ESP8266 (ESP-01). Для примера взял простую программу проверки связи, которая слушает два порта (один порт USB-Arduino, второй порт Arduino-ESP), и дублирует информацию из них друг в друга. Вот сама программа:
#include <SoftwareSerial.h>
#define RX 19
#define TX 18

SoftwareSerial esp8266(RX, TX);

void setup() {
  Serial.begin(115200);
  esp8266.begin(115200);
}

void loop() {
  if (esp8266.available()) {
    Serial.write(esp8266.read());
  }

  if (Serial.available()) {
    esp8266.write(Serial.read());
  }
}


Проблем в прошивке нет, модуль работает корректно (отвечает на AT команды, если посылать их напрямую). Проблем со схемой подключения тоже не должно быть, т.к. после перепрошивки модуля её не менял (только снял землю с RESET на Arduino и переставил RX и TX на Arduino, идущие с ESP (теперь RX-TX и TX-RX, где RX и TX Arduino соответствуют пинам, обозначенным в программе)). Также скорость модуля точно 115200, и при отправке данных стоит NL&CR.

Причём при отправке чего-либо с Arduino, используя вышеуказанную программу, на самой плате загорается RX светодиод, а на модуле загорается синий, т.е. данные вроде как передаются.

P.S. Даже при перезагрузке самого модуля в USB порт ничего не выводится.
  • Вопрос задан
  • 1262 просмотра
Подписаться 1 Средний 1 комментарий
Решения вопроса 1
YaroslavHub
@YaroslavHub Автор вопроса
По итогу решил проблему иначе: вместо объявления программного UART через SoftwareSerial использовал уже существующий аппаратный Serial1 (те же пины, что я пытался использовать в первоначальной программе). Если честно, до сих пор не понимаю почему одно работает, а другое нет, когда результат должен быть одинаковый (я имею ввиду результат объявления Serial1 и объявления через SoftwareSerial, используя те же пины). Если вдруг кто знает, расскажите, пожалуйста.

Рабочий код выглядит вот так:
#define esp Serial1
 
void setup()
{
  Serial.begin(9600);
  esp.begin(115200);
}
 
void loop()
{
  if (esp.available()) {
    Serial.write(esp.read());
  }
  if (Serial.available()) {
    esp.write(Serial.read());
  }
}


P.S. Первоначальный вариант не работает, даже если поменять скорость ESP на 9600, как советовали другие ответившие.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
gbg
@gbg Куратор тега Arduino
Любые ответы на любые вопросы
Скорости, и разрядности/четности должны совпадать на обоих устройствах.

И надо учесть, что у ардуины IO работают на 5 вольт, а у ESP - на 3.3, нужно согласование.
Ответ написан
@BakaTopcat
SoftwareSerial отвратительно работает на 115200, по сути шлёт и принимает мусор. С SoftwareSerial мне удалось подружить ESP-01 только на 38400. Есть библиотека AltSoftSerial, там более-менее поднялось на 57600.
Для того чтобы переключить ESP, нужно ввести АТ команду: AT+UART_DEF=38400,8,1,0,0
Не забывайте про согласование уровней логики и питания, простое подключение ESP к Ардуино сожжёт ESPшку.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы