Ардуино и ESP8266: нет ответа на AT команды

sambeer
Offline
Зарегистрирован: 07.08.2018

Добрый день всем.

Играюсь с 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"

Помогите пожалуйста, в чем может быть проблема?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sambeer пишет:
использую стандартную програму для Ардуино

Сущетвует несколько стандартов на подобные программы (ГОСТ, ISO, ANSI, BSI и т.д.). ХЗ по какому именно стандарту Ваша "стандратная программа".

sambeer пишет:
Но в ответ вижу только 255. Ответ пробую читать так: while(esp.availlable > 0) Serial.write(esp.read);

Помогите пожалуйста, в чем может быть проблема?

Проблема в строке №48. Посмотрите сами.

 

sambeer
Offline
Зарегистрирован: 07.08.2018

Стоило ли утруждаться и столько воды писать? Лучше бы по делу что сказал. Про стандартную програму я написал потому, что сколько я ни находил примеров (штук наверное 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

sadman41
Offline
Зарегистрирован: 19.10.2016

delay(500) - зачем? Любое асинхронное устройство может ответить и позже и раньше.

sambeer
Offline
Зарегистрирован: 07.08.2018

Просто для страховки :) На самом деле пробовал с разными задержками, а также вообще без задержек. Результат один.

Мне кажется, что раз через обычный терминал все работает, то значит подключил я модуль правильно (питание 3.3в, согласователь логический уровней 5->3.3...) Значит что-то не так с моей програмой. Но там же все элементарно, и подобные примеры в интернете всего дают возможность читать ответы от ESP. Тут на формуте тоже есть несколько тем, в которых подобный код возвращает нормальный текст.

Уже всю голову сломал, что не так у меня. Может сам модуль ESP надо как-то для работы с Ардуино конфигурировать? 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sambeer пишет:

Стоило ли утруждаться и столько воды писать? Лучше бы по делу что сказал. 

Надеюсь, Вы не будете учить меня что мне писать, а что - нет? То, что я написал было абсолютно по делу. Человеку, заявляющему, что у него не работает ХЗ какой скетч на ХЗ какой схеме помочь невозможно.

Что у Вас за Ардуина?

sambeer
Offline
Зарегистрирован: 07.08.2018

У меня Arduino Uno, скетч я привел во втором посте. Не привел сразу, потому что думал, что смогут подсказать сразу (типа часто встречающиеся ошибки и т.д.).

Код же правильный? И если у меня разные скорости на Serial и на SoftwareSerial, это не повлияет?

 

step962
Offline
Зарегистрирован: 23.05.2011

sambeer пишет:

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, то есть отправлять ее однократно.

Ну и отчитаться о результатах. 

sambeer
Offline
Зарегистрирован: 07.08.2018

Спасибо за рекомендации.

Игрался с портом 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());
}

Ответ все равно нечитаемый.

zalias7
Offline
Зарегистрирован: 18.03.2015

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

sambeer
Offline
Зарегистрирован: 07.08.2018

Я специально сделал CUR чтобы в случае чего просто перезагрузить модуль.

b707
Offline
Зарегистрирован: 26.05.2017

sambeer - не обижайтесь. если смешное спрошу - вы учитываете. что RX-TX подключаются "крест-накрест"?

sambeer
Offline
Зарегистрирован: 07.08.2018

Какие уж тут обиды: я с этим всего неделю занимаюсь. До этого опыта небыло совершенно.

Когда я подключаю к компьютерному терминалу через ардуино (перемычка reset на землю), то я подключаю RX esp -> RX arduino. И терминал работает. На самом деле в начале я пробовал менять местами :) - не помогает.

b707
Offline
Зарегистрирован: 26.05.2017

sambeer пишет:

Когда я подключаю к компьютерному терминалу через ардуино (перемычка reset на землю), то я подключаю RX esp -> RX arduino. И терминал работает. На самом деле в начале я пробовал менять местами :) - не помогает.

ну так продолжим - а теперь , когда у вас ардуина не мост, а самостоятельный участник - вы как подключаете?  RX-RX TX-TX или RX-TX TX-RX ?

step962
Offline
Зарегистрирован: 23.05.2011

sambeer пишет:

Игрался с портом esp. А как определить скорость на самом модуле?

А вот когда удавалось общаться с модулем в режиме "Arduino в качестве моста" - в терминале какая скорость была выставлена?

sambeer
Offline
Зарегистрирован: 07.08.2018

Последний раз было 9600, так как сам модуль переключил на 9600

sambeer
Offline
Зарегистрирован: 07.08.2018

b707 пишет:

sambeer пишет:

Когда я подключаю к компьютерному терминалу через ардуино (перемычка reset на землю), то я подключаю RX esp -> RX arduino. И терминал работает. На самом деле в начале я пробовал менять местами :) - не помогает.

ну так продолжим - а теперь , когда у вас ардуина не мост, а самостоятельный участник - вы как подключаете?  RX-RX TX-TX или RX-TX TX-RX ?

Подключаю также - RX-RX TX-TX

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

sambeer пишет:

Подключаю также - RX-RX TX-TX

Маладца!

b707
Offline
Зарегистрирован: 26.05.2017

sambeer пишет:

Подключаю также - RX-RX TX-TX

неправильно. Такое подключение для режима моста, а для связи с арудиной я вам уже писал в #11 - надо RX-TX TX-RX.

sambeer
Offline
Зарегистрирован: 07.08.2018

Спасибо большое. Все заработало.