Продолжаем знакомство с микроконтроллером 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 Следующий урок
Модуль ESP NodeMCU можно купить здесь: Модуль ESP NodeMCU
Различные модули ЕSP8266 можно приобрести здесь Модули ЕSP8266
Переходник USB to TTL можно приобрести здесь ftdi ft232rl
Смотреть ВИДЕОУРОК на RuTube (нажмите на картинку)
Смотреть ВИДЕОУРОК на YouTube (нажмите на картинку)
«существует команда возврата к заводским настройкам»
Зачем команду обрезал и не написал.
Теперь придется доки качать. 😉
А зачем 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