View Categories

Что такое ESP?

В данном разделе уроков рассмотрим работу с МК 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. Какую плату выбирать - см. описание конкретной платы
  • 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

Особенности #

Компиляция #

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.

Полезные страницы #

Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Прокрутить вверх