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…µEB\!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
7 ответов
Я думаю, что скорость передачи данных по умолчанию ESP8266 равна 115200.
Я попробовал все из них в последовательном мониторе, я написал только в 57600 и 9600. Должен ли я писать в 115200?, @Predrag Beocanin
да, попробуй с этим справиться. потому что, насколько я знаю, скорость передачи данных по умолчанию составляет 115200 бод модуля esp, @Muhammad Hassaan Bashir
Я попробовал 115200 и получил точно такой же результат, @Predrag Beocanin
Вы также подтянули вывод сброса ESP8266? Я не знаю, какой эффект может иметь невыполнение этого требования, но рекомендуемые соединения, которые я прочитал и которым следовал, включают это. Контакты RST и CH_PD находятся рядом; их легко соединить вместе.
Попробуйте стабилизировать источник питания.
Я параллельно подключил две батарейки типа АА к выходу 3,3 В Arduino, и мусор исчез, а мой ESP8266-01 стал намного стабильнее.
В этом случае похоже, что ваш последовательный монитор просто не настроен на правильную скорость передачи данных как с 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. Я не знаю, был ли это сбой или просто совпадение.
У меня была аналогичная проблема с платой 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 работать на меня:
Перед первым использованием Serial.print() или Serial.println() в программе (setup(), вероятно, хорошее место) выполните Serial.begin(74880);
Несмотря на шаг 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
У меня были ошибки при печати значений датчиков в 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
Я заземлил, стабилизировал источник питания, изменил код, чтобы не использовать прерывания, ничего не изменилось
Как я решил: У меня был запасной микроконтроллер, поменял его, теперь серийный работает безупречно.
Это может быть связано со старой прошивкой 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
- Как читать и записывать EEPROM в ESP8266
- Как сделать выводы Tx и Rx на ESP-8266-01 в выводах GPIO?
- Как навсегда изменить скорость передачи данных ESP8266 (12e)?
- Как заставить 5-вольтовое реле работать с NodeMCU
- Как исправить: Invalid conversion from 'const char*' to 'char*' [-fpermissive]
- ESP8266 не подключается к Wi-Fi
- AT-команда не отвечает на последовательный монитор
- Разница между этими двумя платами NodeMCU?
@NickGAmmon это не дубликат вопроса, на который вы ссылаетесь. Этот вопрос касается ESP8266, подключенного к Arduino и дающего очень почти правильные данные, это касается ESP8266, функционирующего * как * Arduino, подключенного к интерфейсу типа FTDI, и дающего * совершенно неправильные * результаты. Это совершенно разные проблемы с разными причинами., @Chris Stratton
@ChrisStratton - ну, если ты так думаешь. Я снова открыл его. У вас есть ответ на этот вопрос?, @Nick Gammon