Продолжаем знакомство с микроконтроллером ESP8266.
На данном занятии мы попробуем посредством AT-команд управлять данной микросхемой, а вернее модулем ESP-01, на которой она установлена.
Вот так вот выглядит модуль ESP-01
А это его вид снизу (со стороны контактов)
Управлять нашим модулем мы будем посредством интерфейса UART.
Прежде чем управлять данным модулем, или его прошивать, мы должны знать назначение его 8 контактов, или, другими словами, знать его распиновку.
Не смотря на то, что у микроконтроллера ESP8266 контактов очень много, наружу в модуле ESP-01 выведены только самые необходимые.
Вот их назначение
Соответсвенно, чтобы управлять модулем по UART, мы наш переходник USB-TTL должны подключить к модулю Rx к Tx и, наоборот, Tx к Rx. Также мы соединяем с общим проводом переходника общий провод модуля. Питать мы наш модуль будем от отдельного источника.
Но, с расчетом на будущее, мы соберём полную схему подключения, благодаря которой мы сможем не только управлять модулем, посылать и принимать через него данные, но и заливать в него другие прошивки, а также можно будет делать дамп прошивки, которая находится в контроллере в текущий момент.
Вот такая вот получится нехитрая схема
Резисторы в разрыве передачи данных по UART служат для ограничения тока, чтобы немного скомпенсировать разницу напряжений на модуле и на переходнике. Пробовал и без них, также всё работает, но глюков при прошивке с ними стало гораздо меньше.
Кроме всего присутствующего в схеме советуют поставить между питанием модуля и общим проводом сглаживающий электролитический конденсатор где-то на 220 микрофарад, а также обычный биполярный конденсатор на 1 мкФ для сглаживания помех высокой частоты. Так как у меня неплохой регулируемый DC-DC преобразователь, которым я буду питать схему, в котором всё это уже есть, то данные конденсаторы я исключил.
Подключим нашу схему, подключим источник питания, а также подключим переходник USB-TTL к PC
Теперь запустим терминальную программу (сегодня воспользуемся CoolTerm), настроим параметры порта
В моём случае скорость 115200 kbps, в каждом конкретном случае может быть и другая в зависимости от версии прошитого ПО, так что скорость, возможно придётся подобрать. Раньше была меньше в более ранних версиях прошивок. Какая прошивка у меня, мы ещё увидим.
Настроим также отправку данных, чтобы команды в модуль отправлялись правильно
Соединимся с модулем по UART с помощью кнопки Connect в терминальной программе и попробуем ввести самую первую (проверочную) AT-команду
Нажмем кнопку Enter на клавиатуре и, если всё правильно, то модуль откликнется вот таким образом
Порой с первого раза модуль может не откликнуться, с помощью кнопки RESET, которую мы подключили в нашей схеме, следует перезагрузить модуль и заново с ним соединиться в терминальной программе.
Команд AT, поддерживаемых встроенным программным обеспечением контроллера ESP8266, огромное количество, все мы их не будем использовать, но с некоторыми познакомимся. Если есть желание познакомиться с другими командами, то на официальном сайте копмании Espressif есть соответствующая документация.
Отправим в модуль следующую команду AT+GMR , с помощью которой мы и узнаем версию встроенного программного обеспечения контроллера
Также испытаем команду для перезагрузки модуля
Соответственно, после перезагрузки следует подключиться к модулю в терминальной программе заново.
Также, если вдруг мы хотим, чтобы наш модуль забыл все настройки и вернулся в первоначальное состояние, существует команда возврата к заводским настройкам
После данной команды также требуется заново подключиться к модулю в терминальной программе.
С помощью следующей программы мы узнаем текущий режим работы контроллера в плане электропитания и пониженного энергопотребления
Посмотрим в документации по AT-командам, что это за режим
Получается, что модуль по умолчанию находится в одном из спящих режимов.
Для работы модуля в режиме передачи данных на максимальной скорости нам такой режим не подойдёт, нужно включить активный режим. Пошлём соответствующую команду модулю
Теперь модуль находится в активном режиме.
На всякий случай мы можем это проверить
Теперь проверим состояние устройства в плане типа, то есть, станция у нас или точка доступа
Посмотрим в документации, что это за режим
Получается, что у нас модуль работает в режиме точки доступа. Сегодня мы попробуем другой, более простой режим — в режиме станции, то есть использовать мы будем другую точку доступа. Я буду использовать свой домашний роутер, который управляет домашней сетью.
Поэтому пошлём команду на переключение модуля в другой режим передачи данных, а затем проверим переключение
Теперь попробуем подключиться к роутеру с помощью команды AT+CWJAP=»SSID»,»password». Соотвественно, имя точки доступа и пароль у всех будут разные
Если имя и пароль правильные, то через некоторое время модуль соединится с точкой доступа и получит адрес IP.
Посмотрим данный адрес, а также MAC-адрес нашего устройство с помощью следующей команды
Далее включим поддержку нескольких соединений
Попробуем сначала проверить доступность в сети нашего модуля с помощью посылки на него пингов
Модуль прекрасно откликается.
Сегодня мы попробуем передать данные с PC на модуль и обратно по протоколу UDP, для этого пошлём соответствующую команду модулю
Тем самым мы создали соединение с PC с его портом 1556, модулю назначили порт 1555, также в третьем параметре мы указали сетевой адрес компьютреа, далее после портов идёт параметр режима UDP, нам он не так важен, оставляем его 0 по умолчанию. Не важно, что мы ещё не создавали порт на компьютере, это всё-таки UDP и это не проверяется.
Создадим порт на PC с помощью утилиты netcat, с которой мы дружим уже очень давно
Мы видим, что команда nc очень похожа на AT команду модуля, только немного всё переставлено местами и IP-адрес мы уже здесь вводим модуля.
Теперь мы можем начать обмен между нашими узлами. Но, прежде чем мы его начнём, запустим утилиту анализа сетевого трафика WireShark, чтобы убедиться с помощью неё что пакеты у нас доходят полностью без сбоев. Отфильтруем поток по IP-адресу модуля
Попробуем сначала передать строку с PC на модуль
Посмотрим в Wireshark, что пакет от нас благополучно ушел на модуль
В терминальной программе мы также видим, что пакет в модуль пришел
Кроме строки мы здесь видим отчёт, по какому номеру соединения к нам пришло сколько байтов информации
Теперь, наоборот, попробуем передать строку с модуля на компьютер.
Для это сначала мы дадим команду, в которой заранее определим, сколько байтов мы планируем передать
В ответ мы увидим приглашение на ввод строки для передачи.
Введём эту строку
В нашей строке, если посчитать вместе с пробелами, содержится 18 символов. К ним мы прибавляем символы возврата строки и перевода каретки, получается 20.
Нажмём Enter и увидим, что строка наша ушла из модуля
В WireShark мы видим также, что строка пришла полностью
В утилите netcat мы также видим, что строка полностью пришла, так как после отображения строки произошел переход на новую
Мы видим, что всё у нас прекрасно передаётся и принимается нашими узлами.
После этого мы можем закрыть соединение с помощью соответствующей AT-команды
Итак, в данном занятии нам удалось подключить модуль ESP-01 к компьютеру посредством шины UART и немного поупражняться в работе команд AT, с помощью которых мы можем управлять нашим модулям. Также нам удалось создать соединение с роутером, при помощи которого мы смогли передать и принять данные с использованием протокола UDP.
Несомненно, на этом арсенал команд AT не исчерпывается, у контроллера ESP8266 их очень много, в том числе мы можем изменить скорость передачи данных по UART и многое другое, но, думаю, в рамках нашего занятия достаточно и тех, которые мы изучили и испытали на практике.
Всем спасибо за внимание!
Предыдущий урок Программирование МК ESP8266 Следующий урок
Различные модули ЕSP8266 можно приобрести здесь Модули ЕSP8266
Смотреть ВИДЕОУРОК (нажмите на картинку)
«существует команда возврата к заводским настройкам»
Зачем команду обрезал и не написал.
Теперь придется доки качать. 😉
А зачем GPIO0 и GPIO2 к + подтянуты? просто хотелось бы понять. Не критика, просто не понимаю.
Заранее большое спасибо!
Напишите пожалуйста все команды и описание назначения выводов в тексте статьи
В программаторе я еще соединил вывод DTR USB-UART переходника с ногой RESET модуля. А вот питание пришлось делать отдельное. При питании от переходника прошиваться модуль отказался.
Здравствуйте!
После изменения частоты командой AT+IPR=9600, не вижу в CoolTerm не только ответа модуля, но и отправляемой команды (ни на частоте 9600, ни на 115200).
В чем может быть проблема?
А можно без роутера?
Я подключил модуль к ноуту проводом и соединил его с этим же ноутом по wifi, ноут подключен к usb-модему с интернетом.
У меня две сети(две группы адресов):
ноут-локальные 192.168.8.100(255.255.255.0)
wifi ноута — 192.168.137.1(255.255.255.0) вбито руками, не автомат.
Модуль получает адрес 192.168.137.6
Соответственно ESP(у меня ESP-12) не видит адрес 192.168.8.100
Команда
AT+CIPSTART=0,»UDP»,»192.168.8.100",1556,1555,0
не работает.
Я так понимаю нужно маршрутизацию прописать(route?), но я не понимаю что там вообще писать и ничего не сломать?
Для тех у кого нет роутера.
Разобрался, если соединять не с роутером, а напрямую с WIFI ноутбука , то надо брать iP компьютера адаптера wifi. Не как у автора «Ethernet adapter..»
а «Адаптер беспроводной локальной сети…» . И в wireShark соответственно отслеживать этот же адаптер. И всё будет работать.
Поделюсь своим рецептом для корректной работы esptool в моем случае. Стоит python 3.8 с pip менеджером. Поставил esptool через cmd следующим образом:
python -m pip install esptool.
В Makefile команда esptool с сайта/видео не работает. Сработало следующее
python -m esptool elf2image build/app.out