Ардуино и ESP8266: нет ответа на AT команды
- Войдите на сайт для отправки комментариев
Добрый день всем.
Играюсь с ESP8266 (ESP-12). Собрал, подключил к Ардуино. Для начала использовал Ардуино в качестве моста. В терминале пишу AT команды и смотрю ответ. Все работает нормально, к WiFi подключился, всякую инфу выдает нормально.
Далее использую стандартную програму для Ардуино для работы с serial. Делаю softwareSerial, пробую отсылать, например, "AT". В ответ хочу получить "OK". Но в ответ вижу только 255. Ответ пробую читать так: while(esp.availlable > 0) Serial.write(esp.read);
Перерыл весь интернет, перепробовал кучу разных вариантов.
1. Игрался со скорость порта - от 1200 до 115200. Результата 0
2. Пробовал и "AT", и "AT\r" и "AT\r\n"
Помогите пожалуйста, в чем может быть проблема?
Сущетвует несколько стандартов на подобные программы (ГОСТ, ISO, ANSI, BSI и т.д.). ХЗ по какому именно стандарту Ваша "стандратная программа".
Помогите пожалуйста, в чем может быть проблема?
Проблема в строке №48. Посмотрите сами.
Стоило ли утруждаться и столько воды писать? Лучше бы по делу что сказал. Про стандартную програму я написал потому, что сколько я ни находил примеров (штук наверное 100 просмотрел), все они примерно одинаковы.
#include "SoftwareSerial.h" SoftwareSerial esp(10, 11); void setup() { esp.begin(9600); Serial.begin(9600); } void loop () { esp.print("AT\r\n"); delay(500); while(esp.available() > 0) Serial.write(esp.read()); }Пробавал задержки ставить в while
delay(500) - зачем? Любое асинхронное устройство может ответить и позже и раньше.
Просто для страховки :) На самом деле пробовал с разными задержками, а также вообще без задержек. Результат один.
Мне кажется, что раз через обычный терминал все работает, то значит подключил я модуль правильно (питание 3.3в, согласователь логический уровней 5->3.3...) Значит что-то не так с моей програмой. Но там же все элементарно, и подобные примеры в интернете всего дают возможность читать ответы от ESP. Тут на формуте тоже есть несколько тем, в которых подобный код возвращает нормальный текст.
Уже всю голову сломал, что не так у меня. Может сам модуль ESP надо как-то для работы с Ардуино конфигурировать?
Стоило ли утруждаться и столько воды писать? Лучше бы по делу что сказал.
Надеюсь, Вы не будете учить меня что мне писать, а что - нет? То, что я написал было абсолютно по делу. Человеку, заявляющему, что у него не работает ХЗ какой скетч на ХЗ какой схеме помочь невозможно.
Что у Вас за Ардуина?
У меня Arduino Uno, скетч я привел во втором посте. Не привел сразу, потому что думал, что смогут подсказать сразу (типа часто встречающиеся ошибки и т.д.).
Код же правильный? И если у меня разные скорости на Serial и на SoftwareSerial, это не повлияет?
1. Игрался со скорость порта - от 1200 до 115200. Результата 0
С каким портом игрался? В задаче их три - Serial, esp и порт на модуле esp8266.
Скорости портов esp и esp8266 должны быть одинаковыми.
loop лучше переписать:
void loop () { while(Serial.available() > 0) esp.write(Serial.read()); while(esp.available() > 0) Serial.write(esp.read()); }и отправлять AT-команды из терминала вручную, а не долбить модуль одной и той же командой бесконечно.
Если именно такая конфигурация успешно работала в варианте "Arduino в качестве моста", то можно перенести отправку AT-команды из loop в setup, то есть отправлять ее однократно.
Ну и отчитаться о результатах.
Спасибо за рекомендации.
Игрался с портом esp. А как определить скорость на самом модуле?
В резултате вчера сделал следующее: прошил модуль более свежей прошивкой с AT командами (отдельный маленький трактат можно написать "Новичок и прошивка"), поменял скорость у модуля (AT+UART_CUR=9600,8,1,0,0). После этого смог в мониторе переключить скорость на 9600 и наблюдать нормальные ответы на команды. Далее, запустил ардуино и пробовал
void loop () { while(Serial.available() > 0) esp.write(Serial.read()); while(esp.available() > 0) Serial.write(esp.read()); }Ответ все равно нечитаемый.
AT+UART_DEF=9600,8,1,0,0
Я специально сделал CUR чтобы в случае чего просто перезагрузить модуль.
sambeer - не обижайтесь. если смешное спрошу - вы учитываете. что RX-TX подключаются "крест-накрест"?
Какие уж тут обиды: я с этим всего неделю занимаюсь. До этого опыта небыло совершенно.
Когда я подключаю к компьютерному терминалу через ардуино (перемычка reset на землю), то я подключаю RX esp -> RX arduino. И терминал работает. На самом деле в начале я пробовал менять местами :) - не помогает.
Когда я подключаю к компьютерному терминалу через ардуино (перемычка reset на землю), то я подключаю RX esp -> RX arduino. И терминал работает. На самом деле в начале я пробовал менять местами :) - не помогает.
ну так продолжим - а теперь , когда у вас ардуина не мост, а самостоятельный участник - вы как подключаете? RX-RX TX-TX или RX-TX TX-RX ?
Игрался с портом esp. А как определить скорость на самом модуле?
А вот когда удавалось общаться с модулем в режиме "Arduino в качестве моста" - в терминале какая скорость была выставлена?
Последний раз было 9600, так как сам модуль переключил на 9600
Когда я подключаю к компьютерному терминалу через ардуино (перемычка reset на землю), то я подключаю RX esp -> RX arduino. И терминал работает. На самом деле в начале я пробовал менять местами :) - не помогает.
ну так продолжим - а теперь , когда у вас ардуина не мост, а самостоятельный участник - вы как подключаете? RX-RX TX-TX или RX-TX TX-RX ?
Подключаю также - RX-RX TX-TX
Подключаю также - RX-RX TX-TX
Маладца!
Подключаю также - RX-RX TX-TX
неправильно. Такое подключение для режима моста, а для связи с арудиной я вам уже писал в #11 - надо RX-TX TX-RX.
Спасибо большое. Все заработало.