ESP8266
Описание, подключение, настройка и работа.
Что такое ESP8266
ESP8266 — это высокоинтегрированный, микроконтроллер с интерфейсами WiFi, SPI, UART и GPIO, производства китайской компании Espressif.
Схема чипа
Характеристики
поддержка WiFi протоколов 802.11 b/g/n
Wi-Fi Direct (P2P), soft-AP
встроенный стек TCP/IP
встроенный TR переключатель, balun, LNA, усилитель мощности и соответствие сети
встроенный PLL, регуляторы, и система управления питанием
выходная мощность +20.5 дБм в режиме 802.11b
ток утечки в выключенном состоянии до 10 мкА
SDIO 2.0, SPI, UART
STBC, 1×1 MIMO, 2×1 MIMO
пробуждение и отправка пакетов за время до 22 мс
потребление в режиме Standby до 1.0 мВт (DTIM3)
Wi-Fi Direct (P2P), soft-AP
встроенный стек TCP/IP
встроенный TR переключатель, balun, LNA, усилитель мощности и соответствие сети
встроенный PLL, регуляторы, и система управления питанием
выходная мощность +20.5 дБм в режиме 802.11b
ток утечки в выключенном состоянии до 10 мкА
SDIO 2.0, SPI, UART
STBC, 1×1 MIMO, 2×1 MIMO
пробуждение и отправка пакетов за время до 22 мс
потребление в режиме Standby до 1.0 мВт (DTIM3)
Распиновка чипа
В данное время на этом чипе реализовано несколько модификаций плат (ESP01 — ESP12) различающихся только формой, количеством выведенных GPIO и вариантами антенн.
ESP01 - 12
ESP-01 — самый распространённый, выведены два GPIO, дальность действия — до 400м на открытом пространстве.
ESP-02 — тоже самое, только с возможностью подключения внешней антенны.
ESP-03 — керамическая антенна, выведены все GPIO.
ESP-04 — без внешней антенны, выведены все GPIO.
ESP-05 — выведены только VCC, GND, TX, RX, RST и внешняя антенна.
ESP-06 — контакты расположены снизу, сверху металлический экран.
ESP-07 — керамическая антенна + разъем для внешней антенны, металлический экран.
ESP-08 — тоже самое, но без антенн.
ESP-09 — крохотный модуль — 10х10мм, контакты расположены снизу.
ESP-10 — тоже маленький модуль, выведены только два GPIO.
ESP-11 — с керамической антенной.
ESP-12 — с flash-памятью 512 кбайт.
ESP-02 — тоже самое, только с возможностью подключения внешней антенны.
ESP-03 — керамическая антенна, выведены все GPIO.
ESP-04 — без внешней антенны, выведены все GPIO.
ESP-05 — выведены только VCC, GND, TX, RX, RST и внешняя антенна.
ESP-06 — контакты расположены снизу, сверху металлический экран.
ESP-07 — керамическая антенна + разъем для внешней антенны, металлический экран.
ESP-08 — тоже самое, но без антенн.
ESP-09 — крохотный модуль — 10х10мм, контакты расположены снизу.
ESP-10 — тоже маленький модуль, выведены только два GPIO.
ESP-11 — с керамической антенной.
ESP-12 — с flash-памятью 512 кбайт.
Схема модуля
Что может модуль ESP
Описание будет вестись на основе популярной модели ESP-01.
Всё написанное ниже, за исключением номеров GPIO, применительно к любой модификаций.
С базовой прошивкой модуль ESP используется в виде моста UART <-> WIFI.
Например:
ESP подключается к ардуине (UART <-> UART) и взаимодействует с ней при помощи AT-команд, а по каналу WIFI соединяется с любым wifi-устройством (планшет, роутер) при этом может работать в разных режимах — клиента, точки доступа, одновременно оба режима.
ESP подключается к ПК через конвертер usb-uart. Можно с ПК посылать АТ-команды модулю, а модуль в свою очередь будет пересылать их какому-то wifi-устройству.
С альтернативными прошивками, ESP может работать автономно. То есть использовать свои пины для управления чем-либо, например светом в комнате, а управляется по каналу WIFI, выступая в роли сервера.
(О прошивках ниже.)
Подключение
В первую очередь надо обеспечить надёжное питание. Внимание! ESP работает от напряжения
Модуль потребляет довольно-таки большой ток (до 300мА), и если подключить модуль к пину
Чтобы всё хорошо работало потребуется DC-DC преобразователь (5v > 3,3v), что-то типа этого:
Схема подключения:
Подключите питание — загорится красный диод.
Подключите пин CH_PD на
В списке сетей wifi на Вашем телефоне/планшете, появится новое устройство с именем «AI-THINKER...».
Можно подключится к нему, но толку от этого пока никакого не будет.
Кратковременное замыкание пина RST на
Свободные GPIO (0, 2) подключать не надо.
Если у Вас модуль не ESP-01, то надо подключить GPIO15 к
Примечание. В дальнейшем, для повышения стабильности работы, нужно пин CH_PD подключать к 3,3v через резистор 10 кОм., RESET, GPIO (0, 2) тоже подтянуть к 3,3v резисторами 10 кОм., по питанию поставить электролит на 100-220 мкФ и керамику 0.1 мкФ.
И таки да, модуль сильно греется, так что можно какой-нибудь теплоотвод организовать.
Теперь надо подключить ESP-модуль к компьютеру посредством UARTа (RX, TX), выяснить скорость порта (может различаться для разных прошивок) и пообщаться с модулем АТ-командами.
Для этого подойдёт любой преобразователь USB-UART, можно воспользоваться например вот таким:
Нужно соединить RX и TX модуля с TX и RX преобразователя.
Уровни напряжения на пинах TX <-> RX можно не согласовывать, как показывает практика, всё отлично работает и так.
Если это покажется неубедительным, то можно организовать простой резистивный делитель:
Если под рукой нет преобразователя (USB-UART), то его можно сделать из любой ардуины. Для этого надо соединить на ардуине RST и
TX <-> TX
RX <-> RX
GND <-> GND
Терминал
Далее нам потребуется программа-терминал, можно использовать бесплатную программу CoolTerm. (Lin & Win)
CoolTerm
Скачать, установить и запустить:
Нажать Options
Выбрать порт и скорость.
Нажать слева Terminal
Terminal Mode: Line Mode. Нажать ОК.
Нажать Connect
В нижнем поле ввести AT и Enter
Нажать Options
Выбрать порт и скорость.
Нажать слева Terminal
Terminal Mode: Line Mode. Нажать ОК.
Нажать Connect
В нижнем поле ввести AT и Enter
Либо воспользоваться Serial Monitor из IDE Arduino.
Открываем Serial Monitor, выбираем Both NL & CR (последняя строчка), устанавливаем скорость 115200 и отправляем команду проверки связи — AT:
Модуль должен ответить ОК. Если ответа нет, то попробуйте другие скорости (9600, 57600), если ответа попрежнему нет, то проверьте правильность подключения (rx-tx).
Когда модуль начнёт откликаться, дайте команду перезагрузки — AT+RST
Модуль расскажет о себе.
Теперь нужно проверить версию «заводской» прошивки командой — AT+GMR
В «заводских» прошивках, от версии к версии, меняется функционал и могут не работать некоторые команды. Поэтому прежде чем продолжать знакомство с модулем, нужно залить в него свежую прошивку. Делается это очень просто…
Прошивка
Сейчас речь пойдёт о «заводской» прошивке, альтернативные будут рассмотрены позже.
Скачиваем прошивку, я брал её здесь.
И скачиваем утилиту XTCOM для прошивки ESP.
Пользователи Linux, для работы с XTCOM, могут воспользоваться виртуальной машиной с установленой Windows. (В wine я не пробовал запускать.)
Запускаем XTCOM_UTIL.exe, переходим в Tools ⇨ Config Device:
Выбираем COM-порт к которому подключена плата, ставим скорость порта 57600, это скорость заливки прошивки, к дальнейшей работе модуля не имеет отношения.
Нажимаем Open
OK...
Нажимаем Connect
Программа должна сказать Connect with target OK!
Жмём ОК, закрываем окно настроек, переходим в меню API TEST и выбираем Flash Image Download.
Указываем путь к скаченому файлу v0.9.5.2 AT Firmware.bin, адрес оставляем 0x00000, жмем DownLoad.
Загрузка…
Готово…
Отключаем питание платы, отключаем GPIO0, включаем питание, запускаем терминал (115200), проверяем готовность платы командой AT и версию прошивки командой AT+GMR.
АТ-команды
Список АТ-команд работающих с данной прошивкой и их применение.
AT — проверка работы, ответ ОК.
ATE0 — отключение эхо (повторение команды).
ATE1 — включение эхо.
AT+RST — перезагрузка модуля.
AT+RESTORE — сброс модуля к заводским настройкам.
Полезная команда на случай если Вы донастраивались до потери работоспособности модуля ))).
AT+GMR — версия прошивки.
AT+GSLP=3000 — переход в режим пониженного энергопотребления. (3 сек)
Время задаётся в мс.
Для выхода из режима необходимо замкнуть выводы XPD_DCDC и EXT_RSTB (см. распиновка чипа) либо откл/вкл питание.
AT+CIOBAUD=115200 — установить скорость UART. (9600-921600)
AT+UART=115200,8,1,0,0 — специфичная настройка UART.
(baudrate,databits,stopbits,parity,flow control)
AT+CSYSWDTENABLE — активировать Watchdog.
AT+CSYSWDTDISABLE — деактивировать.
Установка режима WIFI:
AT+CWMODE=1 — клиент, подключается к другим точкам доступа.
AT+CWMODE=2 — точка доступа, к модулю подключаются клиенты.
AT+CWMODE=3 — оба режима одновременно, модуль подключается к существующим точкам (например к роутеру) и сам является точкой доступа. (смешанный режим)
AT+CWMODE? — узнать текущий режим.
AT+CWMODE=? — узнать возможные режимы.
AT+CIFSR — узнать ip-адрес и мас-адрес. В зависимости от режимов (AT+CWMODE) показывает один или два ip-адреса.
AT+CIPSTA? — посмотреть ip-адрес для режима «клиент» (AT+CWMODE=1)
AT+CIPSTA=«192.168.3.20» — установить ip-адрес для режима «клиент» (AT+CWMODE=1)
AT+CIPSTA="192.168.3.20"
AT+CIPSTAMAC? — посмотреть мас-адрес для режима «клиент» (AT+CWMODE=1)
AT+CIPSTAMAC=«1a:fe:34:fe:55:55» — установить мас-адрес для режима «клиент» (AT+CWMODE=1). Требуется перезагрузка (AT+RST).
AT+CIPSTAMAC="1a:fe:34:fe:55:55"
AT+CIPAP? — посмотреть ip-адрес для режима «точка доступа» (AT+CWMODE=2)
AT+CIPAP=«192.168.3.35» — установить ip-адрес для режима «точка доступа» (AT+CWMODE=2)
AT+CIPAPMAC? — посмотреть мас-адрес для режима «точка доступа» (AT+CWMODE=2)
AT+CIPAPMAC=«1a:fe:34:fe:33:33» — установить мас-адрес для режима «точка доступа» (AT+CWMODE=2). Требуется перезагрузка (AT+RST).
AT+CWDHCP= — включает/выключает DHCP сервер.
Пример: AT+CWDHCP=0,0 — DHCP включён для режима «точка доступа».
Первый параметр — режимы: 0 — для точки доступа, 1 — для клиента, 2 — для смешаного режима.
То есть можно для каждого режима (в отдельности) включать/отключать DHCP сервер, либо если модуль работает в «смешаном режиме» (AT+CWMODE=3), то можно.!!!
Второй параметр — вкл/откл: 0 — включить, 1 — отключить.
AT+CWLIF — показать ip-адреса подключенных клиентов (только для режимов AT+CWMODE=2 и AT+CWMODE=3).
AT+CWLAP — посмотреть доступные wifi-сети. (работает в режимах AT+CWMODE=1 и AT+CWMODE=3)
Значения в скобках — тип шифрования, имя точки, уровень сигнала, мас-адрес, канал.
Типы шифрования: 0 — без шифрования, 1 — WEP, 2 — WPA-PSK, 3 — WPA2-PSK, 4 — MIXED (WPA-WPA2-PSK).
AT+CWJAP= — подключение к точке доступа:
На всякий случай перегрузите модуль — AT+RST
AT+CWJAP=«nameap»,«parolparol» — подключение к роутеру (имя точки, пароль). (кавычки необходимо исправить)
AT+CWJAP="nameap","parolparol"
Подключение длится 5-6 секунд.
AT+CWJAP? — узнать подключён или нет, и к какой точке.
AT+CWQAP — отключиться от точки доступа (роутера).
Создание своей точки доступа с паролем (по дефолту точка открытая).
На всякий случай перегрузите модуль — AT+RST
Даём команду:
AT+CWSAP=«myAP»,«parolmyap»,9,4 — где первое значение — имя будущей точки, второе — пароль, третье — канал и четвёртое — тип шифрования (0 — без шифрования, 1 — WEP, 2 — WPA-PSK, 3 — WPA2-PSK, 4 — MIXED (WPA-WPA2-PSK)).
AT+CWSAP="myAP","parolmyap",9,4
Посмотреть какой адрес у нашей точки — AT+CIFSR
Подключите Ваш «гаджет» к созданой точке и посмотрите какой он получил адрес — AT+CWLIF
Ниже описаны команды относящиеся к настройке TCP-сервера или TCP-клиента.
AT+CIPMODE= — устанавливается режим передачи данных для TCP-сервера или TCP-клиента.
В режиме TCP-сервера:
AT+CIPMODE=0 — TCP-сервер может отправлять данные клиенту и может принимать данные от клиента.
AT+CIPMODE=1 — TCP-сервер НЕ может отправлять данные клиенту, но может принимать данные от клиента.
В режиме TCP-клиента:
AT+CIPMODE=0 — TCP-клиент может отправлять данные серверу и может принимать данные от сервера.
AT+CIPMODE=1 — TCP-клиент НЕ может отправлять данные серверу, но может принимать данные от сервера.
AT+CIPMODE? — узнать режим.
AT+CIPMUX= — выбор режима одиночного или множественного соединения.
Зависит от AT+CIPMODE.
AT+CIPMUX=0 — с ESP, может соединится только один клиент. (single connection)
Если в этот момент другой клиент запросит соединение, то получит таймаут.
AT+CIPMUX=1 — с ESP, могут одновременно соединяться несколько клиентов (до четырёх). (multiple connection)
AT+CIPMUX? — узнать режим.
AT+CIPSTO — таймаут сервера. Команда даётся после старта сервера.
AT+CIPSTO=180 — таймаут 180 секунд. (от 0 до 7200)
AT+CIPSTO? — узнать таймаут.
Запуск TCP-сервера:
Предварительно нужно:
На всякий случай делать ресет — AT+RST, или сброс (если Вы что-то там на настраивали) к заводским настройкам AT+RESTORE
Установим «смешанный режим» — AT+CWMODE=3
Установить сквозной режим передачи данных — AT+CIPMODE=0
Установить режим подключения — AT+CIPMUX=1 (multiple connection)
И запустить сервер:
AT+CIPSERVER=1,88 — сервер будет запущен на 88-ом порту.
Чтобы изменить номер порта, нужно остановить сервер — AT+CIPSERVER=0 и запустить с новыми параметрами.
Теперь можно посмотреть как работает сервер, для этого…
Узнаем адрес — AT+CIFSR
Далее подключаемся к ESP по Wifi с какого-нибудь гаджета, открываем браузер и заходим по адресу — 192.168.4.1:88
На странице конечно ничего не отобразится, но в терминале появятся строки запроса:
Активные соединения можно посмотреть командой — AT+CIPSTATUS
Принудительно закрыть соединение — AT+CIPCLOSE=0
Если соединений несколько, то указываем его id — AT+CIPCLOSE=1
Если модуль работает в режиме — AT+CIPMUX=0 (single connection), то команда закрытия соединения даётся без параметров — AT+CIPCLOSE
Это ещё не всё, хотелось бы увидеть полноценный обмен данными с нашим сервером. В этом поможет бесплатная программа (для Linux и Win) — SocketTest, скачайте её.
Далее нужно соединить компьютер и ESP по каналу wifi. У меня компьютер подключён к роутеру, поэтому ESP тоже подключается к этому роутеру.
Подключаем: (на всякий случай, подробности описаны выше)
AT+CWJAP="nameap","parolparol"
Имя «точки» и пароль.
Смотрим какой адрес получил модуль ESP — AT+CIFSR
Это адрес будем использовать в программе SocketTest.
Запустите её:
На вкладке «Client» вводим адрес 192.168.1.87 и порт 88, нажимаем «Connect».
Пользователям Win наверно придётся отключить файрволы.
В терминале будет будет написано «CONNECT».
Отправим в ESP какой-нибудь текст. Нажмите «Connect», в поле «Message» введите «Hello» и нажмите «Send».
В терминале увидим наш запрос:
+IPD — это признак полученных данных, 0 — это id клиента, 7 — это длина пакета, ну и содержимое пакета.
Соединение будет длиться 180 сек, это таймаут сервера по умолчанию. По истечении времени, оно будет разорвано.
Изменить таймаут можно командой — AT+CIPSTO
Теперь отправим данные с ESP в SocketTest.
Нажмите «Connect» и в терминале введите команду:
AT+CIPSEND=0,13 — id соединения, длина пакета.
В терминале появится символ ввода >
Введите и отправьте строку «Hi Soket Test»:
В программе «SocketTest» появится наше сообщение.
С TCP-сервером разобрались, перейдём к TCP-клиенту...
Запуск TCP-клиента:
Сбросим все настройки — AT+RESTORE
Устанавливаем режимы:
AT+CWMODE=3
AT+CIPMODE=0
Подключаемся к Вашему роутеру:
AT+CWJAP="nameap","parolparol"
В программе SocketTest открываем вкладку «Server», вписываем ip-адрес Вашего компьютера, порт 88 и нажимаем кнопку «Start Listening»:
Переходим в терминал, устанавливаем режим — AT+CIPMUX=0 (single connection) и запускаем клиента:
AT+CIPSTART=«TCP»,«192.168.1.49»,88 — для протокола TCP.
Параметры: протокол — может быть TCP или UDP, адрес сервера с которым будем соединятся, порт.
Отправим серверу данные:
Даём команду — AT+CIPSEND=12 (указывается только длина пакета)
Появится символ — >
Введите и отправьте — Hello Server
Чтоб послать серверу ещё одно сообщение, нужно заново ввести AT+CIPSEND=12 и т.д.
SocketTest получил наше сообщение.
В поле «Message» введите «Hello Client» и нажмите «Send».
ESP получил сообщение.
Теперь поменяем режим клиента с AT+CIPMUX=0 (single connection) на AT+CIPMUX=1 (multiple connection)
Нажимаем «Disconnect» в программе SocketTest (или в терминале командуем — AT+CIPCLOSE).
В терминале и даём команду AT+CIPMUX=1
Запускаем клиента:
AT+CIPSTART=0,«TCP»,«192.168.1.49»,88 — для протокола TCP. (добавился ещё один параметр — id соединения)
Параметры: id — от 0 до 4, протокол — может быть TCP или UDP, адрес сервера с которым будем соединятся, порт.
Отправляем данные серверу — AT+CIPSEND=0,12 (id соединения, длина пакета)
Появится символ — >
Введите и отправьте — Hello Server
Собственно всё то же самое, что и для «single connection», только появилась возможность нескольких соединений (до четырёх) одновременно.
Команды для управления GPIO
AT+CIOREAD=0 — читать ножку GPIO0
AT+CIOREAD=2 — читать ножку GPIO2
AT+CIOWRITE=0,1 — подать напряжение на GPIO0
AT+CIOWRITE=0,0 — снять напряжение с GPIO0
AT+CIOWRITE=2,1 — подать напряжение на GPIO2
AT+CIOWRITE=2,0 — снять напряжение с GPIO2
Можно подключить светодиоды к GPIO через резисторы ~1kOm и помигать.
AT-команды.pdf
Спецификация.pdf
Пример подключения:
Настраиваем работу модуля в режиме клиента, подключаемся к роутеру и запускаем TCP-сервер.
AT+RESTORE — к заводским настройкам.
AT+CWMODE=1 — режим клиента.
AT+CWJAP=«nameap»,«parolparol» — подключение к роутеру.
AT+CIPMODE=0 — Установить сквозной режим передачи данных.
AT+CIPMUX=1 — Мultiple connection.
AT+CIPSERVER=1,88 — запустить сервер.
AT+CIPSTO=3 — таймаут сервера 3 секунды.
AT+CIFSR — смотрим адрес который получил ESP от роутера.
Сервер работает на 192.168.1.87:88
Статья получилась большая, поэтому описание подключения Ардуины к ESP читайте в следующей части.
Обсудить на форуме...
- +384
- stD
126723
Поддержать автора
Комментарии (1)