ESP8266 показывает мусор в последовательном мониторе

У меня есть мой ESP8266, подключенный через последовательный порт к USB, как показано на рисунке:

Однако это сработало просто отлично, когда я попытался перепрошить код Blynk

#define BLYNK_PRINT Serial    
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>


char auth[] = "YourAuthToken";

void setup()
{
  Serial.begin(9600);
  Blynk.begin(auth, "ssid", "pass");
}

void loop()
{
  Blynk.run();
}

Он начал выводить кучу мусора на последовательный монитор, в то время как приложение Blynk сообщило, что ESP не подключен к сети. С тех пор я пробовал мигать пустыми скетчами или какими-то другими вещами, что бы я ни делал, последовательный монитор показывает кучу мусора. Я пробовал менять режимы, пробовал менять скорость передачи данных в бодах (по умолчанию было 57600, и AT работал просто отлично).

Нежелательный пример:

  …ÕZªP‚,JHVYº—¡VÕ]­J*ÉW¥¡Õ¥Õ-”ªUŠQd®”¡âJ%H
!HiZÊIIRPÖuUPÒ‚BñZT¥ *EUeZB\)*EVjU!\©Š_¥¢”ÅVªqYiUµP”¬ÕPQT°*uH)HZKB*ÕXªuH!HBHBH…µEIâHBH!H©ªqY+hZVB\BH!HÊ*Òµe�qHBHBHŠ*i±…Z¦-hUµPÔ¬ÔPQT°*uH)H-KB*ÕXªuH!HBHBH…µE­B\!H!HBVªqY+iZVB\BH!HeVÒZ¢qHBHBHŠ*iQ…Z¦-hUµPÔ¬ÔPQTaYRB\    jHiBHªaYRB\BH!HBVªaYRB\BH!HBVªqY+iZVB\BH!HÊVÒZ¢qHBHBHŠ*i±Õ\V
iUµPÔ¬ÕPQT°*uH)H-JBVªaYRB\BH!H!VªaYR!\BHBH!Vªq©+hZW!\BHBHJ*iµE�âHBH!HŠ*i±…Z¦-hUµPÕ¬ÔPQTaYR!\    %Hi!HÕXªuH!HBHBH…µEIqHBHBH

, 👍1

Обсуждение

@NickGAmmon это не дубликат вопроса, на который вы ссылаетесь. Этот вопрос касается ESP8266, подключенного к Arduino и дающего очень почти правильные данные, это касается ESP8266, функционирующего * как * Arduino, подключенного к интерфейсу типа FTDI, и дающего * совершенно неправильные * результаты. Это совершенно разные проблемы с разными причинами., @Chris Stratton

@ChrisStratton - ну, если ты так думаешь. Я снова открыл его. У вас есть ответ на этот вопрос?, @Nick Gammon


7 ответов


3

Я думаю, что скорость передачи данных по умолчанию ESP8266 равна 115200.

,

Я попробовал все из них в последовательном мониторе, я написал только в 57600 и 9600. Должен ли я писать в 115200?, @Predrag Beocanin

да, попробуй с этим справиться. потому что, насколько я знаю, скорость передачи данных по умолчанию составляет 115200 бод модуля esp, @Muhammad Hassaan Bashir

Я попробовал 115200 и получил точно такой же результат, @Predrag Beocanin


0

Вы также подтянули вывод сброса ESP8266? Я не знаю, какой эффект может иметь невыполнение этого требования, но рекомендуемые соединения, которые я прочитал и которым следовал, включают это. Контакты RST и CH_PD находятся рядом; их легко соединить вместе.

,

2

Попробуйте стабилизировать источник питания.

Я параллельно подключил две батарейки типа АА к выходу 3,3 В Arduino, и мусор исчез, а мой ESP8266-01 стал намного стабильнее.

,

2

В этом случае похоже, что ваш последовательный монитор просто не настроен на правильную скорость передачи данных как с NL, так и с CR. Даже если ваш монитор настроен на скорость передачи данных 115200 бод по умолчанию, вы все равно увидите некоторые мусорные символы, что приведет к следующей проблеме.

Использование 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();
  // Запустите software Serial для связи с ESP8266
  ESPserial.begin(9600);

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

void loop() 
{
    // прослушайте сообщение от ESP8266, а затем запишите его на последовательный монитор
    if ( ESPserial.available() )   {  Serial.write( ESPserial.read() );  }

    // прослушайте ввод пользователя и отправьте его на ESP8266
    if ( Serial.available() )       {  ESPserial.write( Serial.read() );  }
}

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

,

0

У меня была аналогичная проблема с платой NodeMCU ESP-12E (Amica v2) ... после нажатия и отпускания ПЕРВОЙ кнопки с открытым последовательным монитором и установленным на 115200 бод, он отобразит загрузочное сообщение (начиная с " ets Jan 8 2013, rst cause: 2, boot mode (3,6)", и заканчивается на "~ld"), а затем отображает тарабарщину, когда сама программа пытается использовать Serial.print() или Serial.println() .

Похоже, это странная ошибка, связанная с самим NodeMCU, но следующий обходной путь заставил Serial.print работать на меня:

  1. Перед первым использованием Serial.print() или Serial.println() в программе (setup(), вероятно, хорошее место) выполните Serial.begin(74880);

  2. Несмотря на шаг 1, установите скорость передачи данных в последовательном мониторе на 115200.

Я предполагаю, что где-то между библиотекой Arduino и CP2102 значение регистра просчитывается (или искажается), и вызов Serial.begin(74880) приводит к установке регистра на значение, которое должен был установить вызов Serial.begin(115200).

Вот страница, где я читаю об ошибке: https://github.com/esp8266/Arduino/issues/4005

,

это не ошибка. загрузчик esp ROM ожидает кристалл с частотой 40 МГц, но большинство модулей esp8266 используют кристалл с частотой 26 МГц. тогда результирующая скорость передачи данных составляет 74880 бод вместо 115200, используемых загрузчиком. но это не имеет ничего общего со скоростью передачи данных в бодах, используемой приложением / скетчем, который использует правильную настройку частоты, @Juraj


1

У меня были ошибки при печати значений датчиков в serial, нормальный вывод начинается с "D:" и заканчивается "all".

D: 23 24 25 23 22 22 21 22 22 22 23 24 23 24 24 24 24 25 25 25 26 26 25 25 21 21 21 21 21 21 all   
 36 36 37 45 44 43 41 41 41 40 39 39 38 38 37 38 38 38 37 40 all
&&B⸮⸮R⸮B &⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮
⸮⸮5
D: 29 45 29 28 27 26 25 27 29 26 22 23 24 22 21 21 20 20 22 22 149 26 25 24 27 26 23 21 21 22 all

Я заземлил, стабилизировал источник питания, изменил код, чтобы не использовать прерывания, ничего не изменилось

Как я решил: У меня был запасной микроконтроллер, поменял его, теперь серийный работает безупречно.

,

0

Это может быть связано со старой прошивкой ESP-01. Я имею в виду прошивку 2018 года выпуска в 01s, которую я купил 3 года назад или около того.

У меня была та же проблема - write_flash работает, но после сброса появляется мусор. Попробуйте это [устанавливает micropython; измените последовательное устройство в соответствии с вашими настройками]:

esptool.py -p /dev/tty.usbserial-02022FD3 erase_flash
esptool.py -p /dev/tty.usbserial-02022FD3 write_flash 0xfc000 esp_init_data_default.bin
esptool.py -p /dev/tty.usbserial-02022FD3 write_flash -fs 1MB 0x00000 ../upython-esp8266-1m-20220117-v1.18.bin

Примечание: местоположение зависит от размера флэш–памяти - мои ESP-01 имеют 1 МБ флэш-памяти, и вы можете проверить это с помощью esptool.py команда flash_id. Используйте эту ссылку:

  • 0x7c000 для 512 КБ, модули, подобные большинству ESP-01, -03, -07 и т. Д.
  • 0xfc000 для 1 МБ, такие модули, как ESP8285, PSF-A85, некоторые ESP-01, -03 и т.д.
  • 0x1fc000 для 2 МБ
  • 0x3fc000 для 4 МБ, такие модули, как ESP-12E, NodeMCU devkit 1.0, WeMos D1 mini

Файл esp_init_data_default.bin взят из Espressif SDK, вот мой SHA256:

shasum -a 256 esp_init_data_default.bin
81e04e5ec0afef0aad3b52cca2a9bbccc205f4c57334c438e1d81e38ce94b932  esp_init_data_default.bin

Но я предполагаю, что файл инициализации из Github также должен работать НОРМАЛЬНО [хотя и не пробовал].

https://github.com/espressif/ESP8266_RTOS_SDK

,