В данном разделе уроков рассмотрим работу с МК ESP8266 и ESP32 под Arduino фреймворком и использование их сетевых возможностей.
Подразумевается, что читатель уже ознакомился с базовыми уроками C/C++ и Arduino, умеет работать в Arduino IDE или Platformio и использовать стандартные инструменты языка и фреймворка
ESP - серия МК (точнее SoC) от китайского производителя Espressif. Это очень мощные контроллеры с большим количеством оперативной и постоянной памяти, WiFi связью на борту, а самое главное - очень дешёвые. Это позволяет делать сложные многофункциональные устройства с радиоуправлением или сетевыми возможностями буквально на базе одного дешёвого чипа.
- ESP8266 - младшая версия, изначально скорее всего была задумана как UART WiFi модем и продавалась с закрытой заводской прошивкой. Позже SDK был выложен в открытый доступ и энтузиасты сделали полноценное ядро для Arduino. Имеет некоторые особенности и урезанную периферию. Китайцы сделали много разных плат на его основе, но отличаются они по сути размером и количеством выведенных пинов. Подробнее о возможностях и платах на его основе - в этом уроке
- ESP32 - более современное семейство полноценных контроллеров, насчитывает более 10 модификаций и несколько вариантов плат с каждой. Они по всем параметрам лучше ESP8266, а также имеют дополнительные аппаратные блоки, например: Bluetooth, BLE, ZigBee, аппаратное шифрование, ЦАП, touch-контроллер, USB-контроллер, второе ядро, ускорители для нейросетей, математики, графики и многое другое в разных сочетаниях (не считая GPIO, UART, SPI, I2C, I2S, ADC, таймеров...), сравнить модели можно в официальной табличке
Все модели ESP поддерживают Arduino фреймворк, могут программироваться в Arduino IDE и имеют практически полностью совместимый друг с другом API для работы с WiFi и сетью.
Возможности радио #
Радио-модуль в ESP может работать в нескольких режимах, рассмотрим их и какие возможности они дают:
- WiFi STA (Station) - ESP подключается к точке доступа: домашний роутер, смартфон со включенной точкой доступа или другая ESP в режиме AP, и может общаться с участниками сети (включая точку доступа), например управляться с них или управлять ими. Если точка доступа имеет выход в Интернет, то ESP может делать запросы на удалённые серверы (заходить на сайты, работать с API, например получать прогноз погоды или хостить телеграм-бота), а также просто "управляться" с любого другого устройства из любой точки мира или быть частью умного дома - IoT
- WiFi AP (Access Point) - ESP сама становится точкой доступа, к которой могут подключаться другие устройства: максимум 4 для ESP8266 (можно увеличить до 8) и 10 для ESP32. ESP создаёт полноценную локальную сеть, то есть устройства могут общаться как между собой, так и с самой ESP, условно можно подключиться к ESP со смартфона и управлять ей. Примечание: режим AP довольно тяжёлый, на его поддержание уходит много ресурсов МК
- WiFi AP + STA - работают одновременно оба режима, т.е. ESP может быть подключена к роутеру и в то же время к ней может быть подключен смартфон. Также в этом режиме можно сделать большую многоуровневую сеть на ESP
- ESP-NOW - радиосвязь с другими ESP. Это не WiFi, а отдельный протокол связи на той же частоте. Он более энергоэффективный, более устойчивый к помехам и работает на большем расстоянии, чем WiFi - до 1 км в идеальных условиях, до 400 м со стандартной антенной на прямой видимости и до 50 м в помещении. Не может работать одновременно с WiFi режимами. Позволяет передавать любые данные между МК, сделать радиоуправление или mesh-сеть
Что купить? #
Для знакомства с сетевыми возможностями и создания первых IoT проектов рекомендую плату Wemos mini (ESP8266) по ряду причин:
- Самая дешёвая
- Компактная, удобна для работы на макетке
- Меньший вес прошивки, загружается быстро (по сравнению с ESP32)
- Быстрая компиляция даже в Arduino IDE (по сравнению с ESP32)
| В наборе GyverKIT | Aliexpress | |
|---|---|---|
![]() |
START IOT EXTRA |
Купить |
Продвинутым юзерам гораздо интереснее будет попробовать ESP32 - она из коробки работает на FreeRTOS, имеет полноценную документацию на свой SDK и комфортно программируется без Arduino фреймворка, т.е. "напрямую". А также может программироваться на Python и работает на нём лучше, чем ESP8266.
Начало работы #
Поддержка плат настраивается точно так же, как у любых других Arduino-совместимых плат:
- Arduino IDE - ссылка для менеджера плат:
- ESP8266:
https://arduino.esp8266.com/stable/package_esp8266com_index.json. Для платы Wemos mini выбрать в менеджере платLOLIN(WEMOS) D1 R2 & mini - ESP32:
https://espressif.github.io/arduino-esp32/package_esp32_index.json. Какую плату выбирать - см. описание конкретной платы
- ESP8266:
- PlatformIO - конфиг:
- ESP8266 (на примере Wemos mini)
[env:d1_mini] platform = espressif8266 board = d1_mini framework = arduino monitor_speed = 115200 upload_speed = 921600 monitor_filters = esp8266_exception_decoder, default build_type = debug board_build.filesystem = littlefs - ESP32 (на примере стандартной ESP32 dev board)
[env:esp32dev] platform = espressif32 board = esp32dev framework = arduino monitor_speed = 115200 monitor_filters = esp32_exception_decoder board_build.filesystem = littlefs board_build.f_cpu = 240000000L
- ESP8266 (на примере Wemos mini)
Особенности #
Компиляция #
Arduino IDE имеет особенность - она компилирует весь проект заново каждый раз. Ядро ESP довольно тяжёлое, поэтому компилируется очень долго, особенно на слабых компьютерах. Для работы с ESP рекомендуется освоить работу в VS Code + PlatformIO - компиляция проходит многократно быстрее, да и в целом писать код там гораздо удобнее.
Загрузка прошивки #
ESP всех версий имеет особенность - МК может запускаться (подача питания или сброс кнопкой Reset) в двух режимах, они переключаются состоянием пина GPIO 0 перед запуском:
- Download (LOW) - режим загрузки прошивки по UART
- Boot или Flash (HIGH) - запуск прошивки из Flash памяти
На отладочных платах пин подтянут к VCC, чтобы МК по умолчанию запускался в режиме Boot. USB преобразователь на плате обычно сам переводит МК в режим Download перед загрузкой прошивки, но на некоторых платах это работает плохо или не работает вовсе, поэтому обычно на ESP-платах выведены две кнопки - Reset и IO0, подключенные вторым контактом к GND. Кнопка IO0 может называться Flash или Boot, что неправильно, потому что нажатие кнопки переводит МК в режим Download.
Для ручного перевода платы в режим загрузки нужно зажать IO0, кликнуть по Reset и отпустить IO0, после этого можно загружать прошивку. Также если автоматический запуск в режиме загрузки прошивки не работает, может помочь просто зажатие IO0 после запуска процесса загрузки прошивки на компьютере.
Сборка схем #
При подключении компонентов к ESP нужно помнить о некоторых вещах.
Системные пины #
Не все пины на плате можно использовать свободно - некоторые отвечают за системные функции, к некоторым подключена память и трогать их нельзя, а некоторые должны иметь конкретный логический уровень на момент запуска МК - эти особенности должны быть указаны в описании платы. Например, указанный выше IO0 влияет на режим загрузки МК, поэтому нельзя подключать к нему что-то с подтянутым к GND или замкнутым на GND/VCC пином.
Логический уровень #
ESP имеет логический уровень 3.3V. Это означает, что она может принимать это напряжение на пин и выдавать его. Большинство модулей и датчиков для Arduino могут питаться и от 5, и от 3.3V, то есть питание их совместно с ESP от 3.3V или от платы с ESP является максимально правильным:
Если у внешнего компонента логический уровень именно 5V, то нужно посмотреть, что делают его пины:
- Если пин передаёт данные на ESP (выход с датчика, TX UART, MISO SPI) - то его желательно подключить через делитель напряжения или конвертер логических уровней. ESP официально не толерантна к 5V, но, судя по отзывам в интернете, всё работает стабильно и не сгорает. По крайней мере, все современные МК защищены от превышения напряжения диодной вилкой, которая находится "внутри" каждого пина
- Если пин принимает данные с ESP (вход датчика, RX UART, MOSI SPI), то нужно смотреть документацию на компонент - будет ли он считать 3.3V за высокий сигнал. Если будет - хорошо. Если нет, то опять же есть варианты: можно использовать конвертер логических уровней (специальный или схему из одного транзистора), либо понизить напряжение питания компонента (если это возможно), чтобы он принимал 3.3V как высокий сигнал. Если компонент слаботочный - его можно подключить через кремниевый диод - он срежет около полувольта
Питание #
ESP - довольно прожорливый МК, особенно при включенном WiFi, поэтому ему нужно обеспечить качественное питание с током около 300 мА (с запасом). На платах обычно стоит стабилизатор, который рассчитан на такие нагрузки при внешнем питании до 7 V - нельзя питать их от 12-15 V, как классические Arduino.
Полезные страницы #
- Набор GyverKIT – наш большой стартовый набор Arduino, продаётся в России
- Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress
- Обратная связь – сообщить об ошибке в уроке или предложить дополнение по тексту ([email protected])
- Поддержать автора за работу над уроками



