Посмотр рубрик

О ESP8266/ESP32, начало работы

В данном разделе уроков рассмотрим работу с МК ESP8266 и ESP32 под Arduino фреймворком и использование их сетевых возможностей.

Подразумевается, что читатель уже ознакомился с базовыми уроками C/C++ и Arduino, умеет работать в Arduino IDE или PlatformIO и использовать стандартные инструменты языка и фреймворка

ESP - серия МК (точнее SoC) от китайского производителя Espressif. Это очень мощные контроллеры с большим количеством оперативной и постоянной памяти, WiFi связью на борту, а самое главное - очень дешёвые. Это позволяет делать сложные многофункциональные устройства с радиоуправлением и сетевыми возможностями буквально на базе одного дешёвого чипа, во многих проектах ESP заменяет в десятки раз более дорогие одноплатники типа Raspberry Pi. Все модели ESP поддерживают Arduino фреймворк, могут работать с ним в Arduino и других IDE, имеют практически полностью совместимый друг с другом API для работы с WiFi и сетью, а также поддерживают программирование на Python (MicroPython, CircuitPython).

  • ESP8266 - младшая версия, изначально скорее всего была задумана как UART WiFi модем и продавалась с закрытой заводской прошивкой. Позже SDK был выложен в открытый доступ и энтузиасты сделали полноценное ядро для Arduino. Имеет некоторые особенности и урезанную периферию. Китайцы сделали много разных плат на его основе, но отличаются они по сути размером и количеством выведенных пинов. Подробнее о возможностях и платах на его основе - в этом уроке
  • ESP32 - современное семейство полноценных контроллеров, насчитывает более 10 модификаций и по несколько плат с каждой. Они по всем параметрам лучше ESP8266, а также имеют дополнительные аппаратные блоки, например Bluetooth, BLE, ZigBee, аппаратное шифрование, ЦАП, touch-контроллер, USB-контроллер, второе ядро, ускорители для нейросетей, математики, графики и многое другое в разных сочетаниях (не считая GPIO, UART, SPI, I2C, I2S, ADC, таймеров...), сравнить модели ESP32 можно в официальной табличке
ESP8266 ESP32 ESP32-S2 ESP32-S3 ESP32-C3 ESP32-C6
Год выпуска 2014 2016 2019 2020 2020 2021
Процессор Tensilica L106 80/160MHz Tensilica LX6 240MHz, 2 ядра Tensilica LX7 240MHz Tensilica LX7 240MHz, 2 ядра RISC-V 160MHz RISC-V 160MHz
Bluetooth X Classic / BLE 4.2 X BLE 5.0 BLE 5.0 BLE 5.0
ROM 0 (только внешняя) 448KB 128KB 384KB 384KB 384KB
SRAM 160KB (доступно ~50KB) 520KB 320KB 512KB 400KB 400KB
Шифрование Flash X XTS-AES-128/256 XTS-AES-128 XTS-AES-128
SPI 2 4 4 4 3 3
I2C 1 2 2 2 1 2
I2S 1 2 1 2 1 1
UART 2 3 2 3 2 3
GPIO 17 (доступно 11) 34 43 44 22 22
LED PWM 0 16 8 8 6 6
MCPWM 0 2 0 2 0 1
USB X X OTG FS/Serial OTG FS Serial Serial
ADC 1x 10-bit 18x 12-bit 20x 13-bit 20x 12-bit 6x 12-bit 7x 12-bit
DAC X 2x 8-bit 2x 8-bit X X X
Touch 0 10 14 14 X X
  • Все процессоры 32-бит, все модели имеют WiFi
  • LED PWM - аппаратный генератор ШИМ на любых пинах (у ESP8266 программный ШИМ на любых пинах)
  • MCPWM - специальный блок для управления моторами, 6 пинов на 1 блок
  • USB - имеется в виду аппаратный USB, т.е. напрямую в МК с имитацией Serial или USB-флешки

Документация #

Возможности радио #

Радио-модуль в ESP может работать в нескольких режимах, рассмотрим их и какие возможности они дают:

  • WiFi STA (Station) - ESP подключается к точке доступа: домашний роутер, смартфон со включенной точкой доступа или другая ESP в режиме AP и может общаться с участниками сети, включая точку доступа - например управляться с них или управлять ими. Если точка доступа имеет выход в Интернет, то ESP может делать запросы на удалённые серверы (заходить на сайты, проверять почту, работать с API, получать прогноз погоды или хостить Телеграм-бота), а также просто "управляться" с любого другого устройства из любой точки мира (через VPN или MQTT) или быть частью умного дома - IoT

  • WiFi AP (Access Point) - ESP сама работает как точка доступа, к которой могут подключаться другие устройства: максимум 8 для ESP8266 и 10 для ESP32. ESP создаёт полноценную локальную сеть, то есть устройства могут общаться как между собой, так и с самой ESP, условно можно подключиться к ESP со смартфона и управлять ей

  • 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 фреймворка, т.е. "напрямую".

Начало работы #

Поддержка плат настраивается точно так же, как у любых других Arduino-совместимых плат:

  • Arduino IDE - ссылка для менеджера плат:
    • ESP8266: https://arduino.esp8266.com/stable/package_esp8266com_index.json, в менеджере esp8266 by ESP8266 Community. Для платы Wemos mini выбрать в менеджере плат LOLIN(WEMOS) D1 R2 & mini
    • ESP32: https://espressif.github.io/arduino-esp32/package_esp32_index.json, в менеджере esp32 by Espressif Systems. Какую плату выбирать - см. описание конкретной платы
  • 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

На момент написания урока поддержка ESP32 в PlatformIO остановилась на последней версии 2.x, тогда как официальная версия уже пару лет как 3.x. За что PlatformIO обиделась на Espressif можно почитать здесь, а если вам нужна актуальная версия ядра ESP32 в PIO - используйте форк pioarduino, для этого достаточно прописать в конфиге platform = https://github.com/pioarduino/platform-espressif32/releases/download/stable/platform-espressif32.zip вместо platform = espressif32

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

Компиляция #

Arduino IDE имеет особенность - она компилирует весь проект заново каждый раз. Ядро ESP довольно тяжёлое, поэтому компилируется очень долго, особенно на слабых компьютерах. Для работы с ESP рекомендуется освоить работу в VS Code + PlatformIO - компиляция проходит многократно быстрее, да и в целом писать код там гораздо удобнее.

Загрузка прошивки #

ESP всех версий имеет особенность - МК может запускаться (подача питания или сброс кнопкой Reset) в двух режимах, они переключаются состоянием пина GPIO 0 перед запуском:

  • Download (GND) - режим загрузки прошивки по UART
  • Boot или Flash (VCC) - запуск прошивки из 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 мА (с запасом). На платах обычно стоит стабилизатор, который рассчитан на такие нагрузки при внешнем питании до 7V - нельзя питать их от 12-15V, как классические Arduino.

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

(5 голосов)
Подписаться
Уведомить о
guest

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