Arduino выводит значения мусора на serial monitor с ESP8266

Я подключил свой Arduino к ESP8266.

Когда я проверяю ESP8266, вручную вводя команды на последовательном мониторе, я получаю правильные результаты.

Однако, когда я запускаю эту программу

#include<SoftwareSerial.h>

SoftwareSerial esp8266(2,3);

void setup() {
  Serial.setTimeout(5000);
  Serial.begin(115200);
  esp8266.begin(115200);
  delay(1000);
}

void loop() {
  delay(2000);
  String command="AT";

  esp8266.println(command);
  if(esp8266.available())
  {
    while(esp8266.available())
    {
      char c=esp8266.read();
      Serial.write(c);          
    }
  }
}

Я получаю мусорные значения, где иногда между выводами есть ОК:

"Получено: "ВСЕ В ПОРЯДКЕ" Получено: "ВСЕ В ПОРЯДКЕ" Получено: "ВСЕ В ПОРЯДКЕ" Получено: "ВСЕ В ПОРЯДКЕ" Получено: "ВСЕ В ПОРЯДКЕ" Получено: "ВСЕ В ПОРЯДКЕ" Получено: "Все В ПОРЯДКЕ" Получено: "Все В ПОРЯДКЕ "

Кто-нибудь может мне помочь?

, 👍8

Обсуждение

Настроен ли ваш последовательный монитор на 115200? Вы проверили ESP с помощью последовательного монитора на 115200? Ты можешь вывесить мусор? Вы смотрели на провода с помощью осциллографа?, @frarugi87

Да, фраруги87. Я сохранил серийный монитор на 115200., @abdul rahuman

Хорошо @абдул рахуман, попробуйте использовать " если(esp8266.доступно()) { Серийная печать("Получено: \""); в то время как(esp8266.доступно()) { символ c=esp8266.чтение(); Серийная запись(c); } Серийная печать ("\" ");} " и отправьте обратно вывод последовательного монитора, @frarugi87

@frarugi87 я получил это по вашему коду". Получено: "ОТ ХОРОШО " Получено: "AÔ * " Получено: "AÔ ХОРОШО " Получено: "ОТ * " Получено: "ОТ OË " Получено: "АО ХОРОШО " Получено: "Á ХОРОШО " Получено: "ОТ OË ", @abdul rahuman

@frarugi87, как вы могли видеть, иногда печатается нормально, но он печатает какую-то комбинацию мусора с ОК. так что, пожалуйста, помогите мне., @abdul rahuman

Как вы питаете свой ESP8266? это от 3,3 В arduino. Я бы рекомендовал включать его отдельно. У меня были эти проблемы, и когда я включил его с помощью регулятора LM1117, он работал. Кроме того, если вы работаете над макетом, вы столкнетесь с аналогичными проблемами из-за ослабленного соединения. Попробуйте припаять соединения., @Sherin Mathew

Теперь я прошил его более новой версией прошивки. Теперь проблема мусорных значений уменьшена. Я имею в виду сокращение, но не полное исчезновение. Теперь я получаю фактический ответ между мусорными значениями мусора. Но иногда это прекрасно работает. @Шерин Мэтью, @abdul rahuman

Я сталкивался с этими проблемами в течение последнего месяца. Но теперь он работает нормально, потратив слишком много часов на проб и ошибок. Я пытался использовать ESP8266-01 вместе с arduino для включения флуоресцентной лампы. Теперь я могу это сделать без использования arduino. Я использую только ESP8266-01 с nodemcu. Он отлично работает в течение последних нескольких недель. Пожалуйста, сообщите нам, что вы пытаетесь сделать, чтобы мы могли помочь вам решить, требуется ли arduino в вашем случае., @Sherin Mathew

Я пытаюсь управлять реле и сделать ИК-клонатор. @Шерин Мэтью, @abdul rahuman


4 ответа


11

Как отметил Мэтт, скорость передачи данных для ESP8266 может варьироваться в зависимости от версии прошивки/производителя. Наиболее распространенными являются 9600 и 115200. Если вы можете подключиться с помощью программы последовательного терминала (например, CoolTerm), вы можете затем протестировать скорость передачи данных.

Похоже, что ESP8266 установлен на 115200, но по моему опыту (и по опыту других) SoftwareSerial не поддерживает скорость передачи 115200 бод (несмотря на "разрешение" этого параметра). Некоторые отчеты предполагают, что допустимо до 57600, хотя, по моему опыту, 9600 лучше всего подходит для надежности. Но вы можете сбросить это значение и посмотреть, какое максимальное надежное значение для вас в вашей конфигурации.

Как изменить скорость передачи данных на ESP8266, будет зависеть от версии прошивки. У меня был успех с AT+IPR=9600. Вам нужно выполнить эту команду только один раз (это постоянная настройка). Я бы предположил, основываясь на вашем описании, что это наиболее вероятный виновник, вызывающий прерывистый вывод "мусора", который вы описываете.

,

9

Использование 115200 содержит слишком много инструкций для Arduino Uno для надежного декодирования символов, и вот откуда берется мусор.

Скорость передачи данных ESP8266 по умолчанию составляет 115200 бод, поэтому вам необходимо подключиться со скоростью по умолчанию и выполнить команду AT, чтобы снизить скорость передачи данных до 9600.

Каждый раз при сбросе ESP8266 возвращается к скорости передачи данных по умолчанию.

Вот пример сценария, который подключается со скоростью передачи данных по умолчанию, а затем уменьшает ее до 9600. Вы подключите последовательный монитор на 9600. При более низкой скорости передачи данных я не получаю никаких символов мусора.

#include <SoftwareSerial.h>
SoftwareSerial ESPserial(2, 3); // RX | TX

void setup() 
{
  Serial.begin(9600);
  ESPserial.begin(115200);
  ESPserial.println("AT+IPR=9600");
  delay(1000);
  ESPserial.end();
  // Start the software serial for communication with the ESP8266
  ESPserial.begin(9600);

  Serial.println("Ready");
  ESPserial.println("AT+GMR");
}

void loop() 
{
    // listen for communication from the ESP8266 and then write it to the serial monitor
    if ( ESPserial.available() )   {  Serial.write( ESPserial.read() );  }

    // listen for user input and send it to the ESP8266
    if ( Serial.available() )       {  ESPserial.write( Serial.read() );  }
}

Странная вещь, которая произошла со мной, заключается в том, что я попытался использовать скорость передачи данных 4800 бод и замуровал один модуль ESP8266. Я не знаю, был ли это сбой или просто совпадение.

,

Здорово. После попытки этого мой esp8266 несколько раз мигает синим светодиодом, застрявшим в петле. Хороший ответ. +1000., @GeneCode


6

Использование AT+IPR-очень опасная команда. Многие ESP8266 будут замурованы после команды. Единственный способ сделать это-увеличить ваш ESP до 9600 бодрейтов.

Я просто должен был сделать это сам с другом сегодня после использования команды AT+IPR, и множество веб-сайтов советуют вам никогда не использовать эту команду.

,

1

Наконец, устранены символы мусора в последовательном мониторе, снизив скорость передачи данных ESP со 115200 до 9600 с помощью следующей команды: ПРИ+UART_DEF=9600,8,1,0,0 Основной причиной проблемы являются ограничения скорости программного обеспечения. При последовательном подключении оборудования он должен нормально работать со скоростью до 115200.

Есть моя информация о ESP по адресу+GMR:

AT version:1.3.0.0(Jul 14 2016 18:54:01)
SDK version:2.0.0(5a875ba)
v1.0.0.3
Mar 13 2018 09:37:06
,