AT-команда не отвечает на последовательный монитор

Я пытаюсь отправить команды AT на ESP8266. Я перепрошил ESP8266 http://imgur.com/a/J8Ueh Я следовал этому руководству < a href="http://remotexy.com/en/help/esp8266-firmware-update/">http://remotexy.com/en/help/esp8266-firmware-update/ и я надеюсь, перепрошил успешно, так как ошибки не было.

Когда я загрузил эту программу http://www.pastebin.com/frhZY7tD, я пытаюсь запустить AT-команду на частоте 9600. скорость передачи данных на последовательном мониторе, затем нет ответа..

Ниже показано, как выглядит моя схема

#include "SoftwareSerial.h"

SoftwareSerial esp8266(2, 3); // прием, передача

void setup()
{
  Serial.begin(9600); // последовательный порт, используемый для отладки
  esp8266.begin(9600);  // скорость передачи данных вашего ESP может отличаться
}

void loop()
{
  if(esp8266.available())  // проверяем, отправляет ли ESP сообщение
  {
    while(esp8266.available())
    {
      char c = esp8266.read();  // прочитать следующий символ.

      Serial.write(c);  // записывает данные в последовательный монитор
    }
  }

  if(Serial.available())
  {
    delay(10);  // ждем, пока все входные команды попадут в последовательный буфер
    // прочитать введенную команду в виде строки
    String cmd = "";
    while(Serial.available())
    {
      cmd += (char)Serial.read();
    }
    // отправляем на esp8266
    esp8266.println(cmd); 
  }
}

Попытка выполнить команду AT -

При нажатии на кнопку отправки отображается пустой ответ, как показано ниже -

Когда я отсоединяю кабель питания и подключаю его снова, на последовательном мониторе печатается какое-то искаженное сообщение. Я также проверил напряжение на RX, оно было около 3,5 В, что тоже в порядке.

Я столкнулся с этой проблемой после того, как прошил прошивку WiFi на ESP8266, а затем обратно на прошивку AT. Похоже, прошивка AT не была успешно прошита, поэтому я попытался стереть все, используя команду ниже.

esptool.py --port /dev/ttyUSB0 erase_flash

C:\Users\williams>esptool.py --port COM4 -b 9600 erase_flash
esptool.py v1.3
Connecting...................

A fatal error occurred: Failed to connect to ESP8266: Timed out waiting for pack
et header

Перед выполнением вышеуказанной команды я внес изменения в свою схему, как показано ниже: -

Обновить

Я перепрошил ESP8266 на скорости 115200 бод и загрузил пустую программу, после чего она начала отвечать на команды AT. Я подключил, как указано выше, только изменение TX на TX и RX на RX соответственно. Хорошо!

AT


OK
AT


OK
AT+GMR

AT version:0.50.0.0(Sep 18 2015 20:55:38)
SDK version:1.4.0
compile time:Sep 18 2015 21:46:52
OK

Ну, я хочу отправить команды AT из окна последовательного монитора Arduino на ESP8266 и напечатать ответ ESP8266 на команду. Когда я загружаю вышеуказанную программу, она перестает отвечать, тот же результат, что и пустой экран, это странно. Разве нет?

, 👍5

Обсуждение

Комментарии не для расширенного обсуждения; этот разговор был [перемещен в чат](http://chat.stackexchange.com/rooms/58709/discussion-on-question-by-williams-at-commands-is-sending-response-in-square-box) ., @Nick Gammon

Комментарии к вопросу предназначены для уточнения вопроса, а не для ответа на него. Если у вас есть ответ, пожалуйста, опубликуйте его., @Nick Gammon

@Nick Почему кто-то переместил мою ссылку на другой пост в чат? Там смысла нет, это тоже не "ответ". Так же, если вы обращались ко мне, я не получил уведомления, но вы все равно не использовали примечание., @handle

Переместить в чат только некоторые комментарии не так-то просто. Вы можете сделать репост этого конкретного комментария, если хотите. Как я уже сказал, комментарии под вопросами или не предназначены для длительного сеанса вопросов/ответов., @Nick Gammon

Что сказали все остальные. Первое, о чем я подумал, глядя на этот вывод, это «неправильная скорость передачи данных»., @PaulMurrayCbr


5 ответов


3

Прошивка AT ESP, вероятно, настроена на более высокую скорость передачи данных, обычно 115 200. SoftwareSerial надежно работает только до 9600 бод. Он может передавать «достаточно надежно» на скорости 115200, чтобы вы могли вслепую отправлять команды изменения скорости, хотя ответ ESP, вероятно, будет искажен. Таким образом, вам нужно либо: уменьшить скорость передачи данных ESP, либо использовать аппаратный последовательный порт Uno для ESP, что означает отказ от вывода терминала Uno и усложняет повторное подключение вашего ПК каждый раз, когда вам нужно обновить код Uno. Я более подробно описал процесс изменения скорости передачи ESP в этот ответ.

Обновление: я не знаком с различными версиями интерпретатора команд AT; все мои ESP работают с установленной на них версией прошивки; "AT+GMR" (показать информацию о версии) отвечает:

AT version:0.40.0.0(Aug  8 2015 14:45:58)
SDK version:1.3.0
Ai-Thinker Technology Co.,Ltd.
Build:1.3.0.2 Sep 11 2015 11:48:04


В моем документе ESP8266 AT Instruction Set rev 1.5.3 нет команды AT+CIOBAUD). Единственный из перечисленных, который влияет на скорость передачи данных, и тот, который я использую, это:

AT+UART_DEF=<baud>,<databits>,<stopbits>,<parity>,<flowcontrol>

или:

AT+UART_DEF=9600,8,1,0,0

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

Обновление 2:

Это программа pastebin.com/dquCNYJj Я не уверен, что я не так делаю

Этот код устанавливает SoftwareSerial на 115200 бод; он не может работать достаточно быстро, чтобы получать данные на такой скорости.

Обновление 3:

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

Обновление 4:

Я не уверен, что мы говорим об одном и том же, поэтому, пожалуйста, простите меня, если вы уже это знаете; мы можем говорить (как минимум) о трех разных скоростях передачи:

  1. Скорость, используемая во время прошивки новой прошивки в ESP;
  2. Частота по умолчанию, с которой новая прошивка будет начинать прослушивание при каждой загрузке;
  3. Фактическая скорость, используемая в любой момент времени между ESP с новой прошивкой и Arduino или каким-либо другим устройством, внешним по отношению к ESP.

Мой собственный опыт связан с использованием установленной на заводе прошивки AT Interpreter. Мне никогда не приходилось обновлять его, поэтому у меня нет личного опыта работы с (1).

(2) и (3) программируются Arduino. Когда я впервые использую новый ESP (или после того, как вы только что перепрошили его интерпретатор AT), он будет прослушивать скорость передачи данных по умолчанию (у меня по умолчанию установлено значение 115200). Существуют команды для изменения текущей скорости (не сохраняется при перезагрузке) и/или скорости по умолчанию (сохраняется для всех будущих сеансов).

Я почти всегда меняю его скорость по умолчанию на 9600, чтобы использовать его с последовательным портом программного обеспечения Arduino. Это моя инициализация нового устройства, использующая Arduino для связи с ESP. (Не передавать мои комментарии '#...'):

# Start talking at the ESP's default rate (115200 on my factory-fresh ones).
AT+RST                         # Reset
AT+UART_DEF=9600,8,1,0,0       # Default baud to 9600,N,8,1,no flow ctl
# Here, change the Arduino's port to match: 9600 in this case.
AT+CWMODE=1                    # Station mode (client)
ATE0                           # Command echo off

С этого момента ESP будет просыпаться на скорости 9600 бод, в режиме станции в качестве клиента, без эха команд.

,

Я попытался изменить скорость передачи данных, сначала в моей программе, затем построить, а затем загрузить ту же скорость передачи данных на последовательный монитор. Например esp8266.begin(115200); , затем скомпилируйте, затем загрузите его, затем 115200 на последовательный монитор, затем выполните множество команд AT + CIOBAUD = 9600, затем никакого ответа, просто пустой каждый раз. Я повторил тот же процесс с 9600, 38400, 57600, 74880, 115200, и при отправке любой команды на последовательный монитор он не дает никакого ответа, только каждый раз пустой, @N Sharma

Можете ли вы предложить стабильную прошивку AT для ESP8266, которая работает на скорости 9600 бод? Я думаю, что это какая-то проблема с прошивкой AT, установил ее как C:\Users\williams>esptool.py --port COM5 --baud 57600 write_flash 0 ai-thinker- 0.9.5.2.бин, @N Sharma

Я выполнил предложенную команду, но ответа нет, пустой ответ :( Это мои настройки прошивки ESP8266 http://imgur.com/a/scfty, @N Sharma

Это программа https://pastebin.com/dquCNYJj Я не уверен, что я делаю неправильно, @N Sharma

Я обновил свой вопрос и добавил больше деталей. Пожалуйста, посмотри, @N Sharma

Я пытался несколько раз, сохраняя одинаковую скорость передачи данных в ESP и терминале и пробовал другую скорость передачи данных, но теперь мне не повезло. ошибка esptool.py v1.3 Подключение .................. Произошла фатальная ошибка: Не удалось подключиться к ESP8266: истекло время ожидания пакета и заголовок, @N Sharma

Даже если вы видите это https://imgur.com/a/J8Ueh, я перепрошил ESP на скорости 9600 бод., @N Sharma

Здесь важна не скорость во время перепрошивки, а скорость, используемая Arduino и ESP во время связи. Они должны совпадать (если они еще не совпадают), когда вы запускаете эту прошивку, чтобы начать сеанс связи с Arduino., @JRobert

Да это же. Когда я внес изменения в свой код, такие как esp8266.begin(9600);, я сохранил ту же скорость передачи данных и на последовательном мониторе, в данном случае 9600., @N Sharma

Спасибо Джей Роберт. Это сработало, как предложил @Rahul Rastogi. Он работает на скорости 115200 бод, я просто залил пустую программу. Когда я запускаю свою программу, о которой идет речь, она не работает, так как не отвечает на AT-команды. Я подключил свою схему, как в вопросе. У вас есть идея, почему это так? Разве эта программа не предназначена для отправки команд на ESP8266, чтения ответа ESP8266 и вывода его на Serial Monito?, @N Sharma

Да, этот код является «терминальной программой» для ESP на контактах 2 и 3. Пожалуйста, обновите свой вопрос с этой информацией: Что начало работать? Что не работает, т.е. что вы сделали; что вы ожидали, что произойдет; что произошло вместо этого?, @JRobert

Я обновил свой вопрос. Не могли бы вы посмотреть, @N Sharma


0

Возможно ли, что проблема связана с аппаратным подключением? Согласно техническому описанию ESP8266, максимальное входное напряжение составляет 3,6 В, но при прямом подключении к Arduino выходной сигнал Arduino будет более 3,6 В. (около 5 В на выходе)

Таблица

Вместо того, чтобы подключаться напрямую, вы можете сначала выполнить изменение уровня? (от 5 В до 3,3 В и наоборот)

(Вот ссылка на техническое описание ESP8266: https://nurdspace.nl/images/e/e0/ ESP8266_Specifications_English.pdf)

,

У меня есть 3,6 В на RX ESP8266, я проверил мультиметром. Я также использовал некоторые резисторы, я пробовал с 2 батареями AA, но такая же проблема, и подавал около 3,6 В на «ESP8266», но не повезло., @N Sharma

Вы пробовали вместо этого отправлять AT-команды через адаптер USB-UART?, @Photon

Пробовал подключить с помощью putty + USB-UART, не получилось, @N Sharma


0

Прежде всего, проверьте правильность подачи напряжения и тока на ESP8266. Я видел, что он не работает, если он не получает надлежащего напряжения и тока.

Во-вторых, подключите Rx, Tx ESP8266 к Rx, Tx Arduino соответственно. Затем попробуйте сделать одну вещь, просто загрузите пустой скетч, имеющий только пустые функции setup() и loop().

Затем откройте последовательный монитор и выберите скорость передачи данных (чаще всего 9600 или 115 200), и все готово! Отправка «AT» через поле ввода последовательного монитора покажет вам «ОК» в окне ответа последовательного монитора.

,

Это сработало, как вы предложили. Он работает на скорости 115200 бод. Когда я запускаю свою программу, о которой идет речь, она не работает. Я подключил свою схему, как в вопросе. У вас есть идея, почему это так? Разве эта программа не предназначена для отправки команд ESP8266, чтения ответа ESP8266 и вывода его на серийный монитор?, @N Sharma

Я обновил свой вопрос, пожалуйста, проверьте его, @N Sharma

Хорошо .. дайте мне понять! Вы сказали, это сработало, как вы предложили. Значит, он работал на скорости 9600 бод, но не на скорости 115200 бод?, @Rahul Rastogi

Он работал на скорости 115200 бод, когда я запускаю пустую программу. Когда я выполняю шаги, которые указаны в моем вопросе, и с той же скоростью передачи данных, это не работает., @N Sharma


2

На последнем изображении вы должны подключить Rx вашего Arduino к Tx вашего ESP8266 и наоборот.

Если вы сделали это, но это не работает, попробуйте загрузить пример скетча, чтобы определить, проблематична ли проблема в коде или соединениях. Я рекомендую вам использовать пример WiFiScan, так как этот пример не требует изменения кода или включения других библиотек, кроме тех, что из ESP8266Community.

,

SoftwareSerial esp8266(2, 3); // RX, TX - Разве эта строка не управляет своими? или мне нужно использовать RX/TX Arduino?, @N Sharma


0

Попробуйте это:

/*
Множественный серийный тест программного обеспечения

Получает от аппаратного серийного номера, отправляет на Software Serial.
Получает от SoftwareSerial, отправляет hardware serial.

Схема:
* RX — это цифровой контакт 2 (подключение к TX другого устройства)
* TX — это цифровой контакт 3 (подключается к RX другого устройства)

Примечание:
Не все выводы на Mega и Mega 2560 поддерживают прерывания изменения,
поэтому для RX можно использовать только следующее:
10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69

Не все выводы на Leonardo и Micro поддерживают прерывания изменения,
поэтому для RX можно использовать только следующее:
8, 9, 10, 11, 14 (МИСО), 15 (СКК), 16 (МОСИ).

созданный еще в глубине веков
изменено 25 мая 2012 г.
Том Айгоу
на примере Микала Харта

Этот пример кода находится в общественном достоянии.

*/
#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3); // прием, передача

void setup() {
  // Открытие последовательной связи и ожидание открытия порта:
  Serial.begin(115200);
  while (!Serial) {
    ; // ждем подключения последовательного порта. Требуется только для родного порта USB
  }


  // Serial.println("Спокойной ночи, луна!");

  // устанавливаем скорость передачи данных для порта SoftwareSerial
  mySerial.begin(115200);
  // mySerial.println("Привет, мир?");
}

void loop() { // повторяем снова и снова
  if (mySerial.available()) {
    Serial.write(mySerial.read());
  }
  if (Serial.available()) {
    mySerial.write(Serial.read());
  }
}
,

Объясните, почему этот код решает проблему., @gre_gor