ESP8266

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Модуль ESP-12E, установленный на плате проекта NodeMCU

ESP8266 — микроконтроллер китайского производителя Espressif с интерфейсом Wi-Fi. Помимо Wi-Fi микроконтроллер отличается возможностью исполнять программы из внешней флеш-памяти с интерфейсом SPI.

Микроконтроллер привлек внимание в 2014 году в связи с выходом первых продуктов на его базе по необыкновенно низкой цене.

Весной 2016 года началось производство ESP8285, совмещающей ESP8266 и флеш-память на 1 МБайт. Осенью 2015 года Espressif представила развитие линейки — микросхему ESP32.[1]

Микроконтроллер[править | править код]

  • 80 MHz 32-bit процессор Tensilica (англ.) Xtensa L106. Возможен негарантированный разгон до 160 МГц.
  • IEEE 802.11 b/g/n Wi-Fi. Поддерживается WEP и WPA/WPA2.
  • 14 портов ввода-вывода(из них возможно использовать 11), SPI, I²C, I²S, UART, 10-bit АЦП.
  • Питание 2,2…3,6 В. Потребление до 215 мА в режиме передачи, 100 мА в режиме приема, 70 мА в режиме ожидания. Поддерживаются три режима пониженного потребления, все без сохранения соединения с точкой доступа: Modem sleep (15 мА), Light sleep (0.4 мА), Deep sleep (15 мкА)[2].


Микроконтроллер не имеет на кристалле пользовательской энергонезависимой памяти. Исполнение программы ведется из внешней SPI ПЗУ путём динамической подгрузки требуемых участков программы в кэш инструкций. Подгрузка идет аппаратно, прозрачно для программиста. Поддерживается до 16 МБ внешней памяти программ. Возможен Standard, Dual или Quad SPI интерфейс.

Производитель не предоставляет документации на внутреннюю периферию микроконтроллера. Вместо этого он дает набор библиотек, через API которых программист получает доступ к периферии. Поскольку эти библиотеки интенсивно используют ОЗУ контроллера, то производитель в документах не указывает точное количество ОЗУ на кристалле, а только приблизительную оценку того количества ОЗУ, что останется пользователю после линковки библиотек — порядка 50 кБ. Энтузиасты, исследовавшие библиотеки ESP8266, предполагают, что он содержит 32 кБ кэша инструкций и 80 кБ ОЗУ данных.

Электрические параметры, цоколевки, схемы включения можно найти в документах «0A-ESP8266EX__Datasheet» и «0B-ESP8266__System_Description» из Espressif SDK.[3]

Источник исполняемой программы ESP8266 задается состоянием портов GPIO0, GPIO2 и GPIO15 в момент окончания сигнала Reset (то есть подачи питания). Наиболее интересны два режима: исполнение кода из UART (GPIO0 = 0, GPIO2 = 1 и GPIO15 = 0) и из внешней ПЗУ (GPIO0 = 1, GPIO2 = 1 и GPIO15 = 0). Режим исполнения кода из UART используется для перепрошивки подключенной флеш-памяти, а второй режим — штатный рабочий.

ESP8285[править | править код]

Весной 2016 года Espressif запустил массовое производство микросхемы ESP8285. Теперь в одной микросхеме находится как SoC ESP8266, так и 1 МБайт флеш-памяти.[4] Документацию на микросхему можно найти в документе «0A-ESP8285__Datasheet».

ESP32[править | править код]

Основная статья en:ESP32

Осенью 2015 года Espressif представила развитие линейки — микросхему ESP32. На начало 2016 года инженерные образцы нового кристалла доступны партнерам компании для тестирования. В сентябре 2016 года ESP32 стал доступен как полноценный продукт.[5][6]

  • Двухъядерный 32-бит Tensilica Xtensa® LX6 с FPU и MAC. 240 МГц (600 DMIPS).
  • 448 кБайт ПЗУ, 520 кБайт ОЗУ. Внешние ОЗУ/ПЗУ на SPI интерфейсе, до 4*16 МБайт. Внешняя память может быть криптографически защищена.
  • Питание 2,2…3,6 В.
  • Wifi 802.11, Bluetooth v4.2 (в том числе Low Energy).
  • Увеличенное количество портов и периферии: ADC, DAC, 4 SPI, 2 I2S, 2 I2C, 3 UART, CAN. Интерфейс SD карт (как мастер так и слейв). Ethernet MAC.
  • Корпус QFN-48.

Средства разработки[править | править код]

Программные средства разработки (программный комплект разработчика, SDK) состоят из:

  • Компилятора. Компилятор для Xtensa LX106 входит в пакет компиляторов GNU Compiler Collection. Компилятор имеет открытые исходные тексты. В разных SDK могут содержаться разные сборки этого компилятора, немного отличающиеся поддерживаемыми опциями.
  • Библиотек для работы с периферией контроллера, стеков протоколов WiFi, TCP/IP.
  • Средств загрузки исполняемого файла в память программ микроконтроллера.
  • Опциональной IDE.

Espressif свободно распространяет свой комплект разработчика. В этот комплект входит компилятор GCC, библиотеки Espressif и загрузочная утилита XTCOM. Библиотеки поставляются в виде скомпилированных библиотек, без исходных текстов. Espressif поддерживает две версии SDK: одна на основе RTOS, другая на основе обратных вызовов (callback).[3]

Помимо официальной SDK существует ряд проектов альтернативных SDK.[7] Эти SDK используют библиотеки Espressif или предлагают собственный эквивалент библиотек Espressif, полученный методами реверсинжиниринга.

  • «esp-open-sdk». Улучшенная версия SDK от Expressif. Содержит GCC компилятор и некоторые библиотеки Expressif. Только Линукс. По-русски немного здесь.
  • «Unofficial Development Kit» Михаила Григорьева. В комплект входит Windows-инсталлятор, компилятор GCC собственной сборки с интеграцией с графической IDE Eclipse, актуальные комплекты библиотек и документации Espressif, некоторые утилиты. Имеется русскоязычный форум.
  • «Arduino IDE for ESP8266» — дополнение к IDE Arduino, позволяющее программировать ESP8266 так же легко как любые другие модули Ардуино. При этом доступен сетевой функционал ESP8266. Компилятор GCC, загрузчик прошивки ESPTool. Подробное русскоязычное описание процесса установки и доступного API здесь, пример работы здесь.
  • «GNU toolchain for esp8266». Имеет возможность интеграции в Visual Studio.
  • «ESP8266 GCC Toolchain» Макса Филиппова.
  • «Sming»[8] — проект добавления Arduino совместимых библиотек поверх стандартных библиотек Espressif, но без препроцессора Ардуино (то есть программирование идет на чистом Си).

Прошивки[править | править код]

Чтобы упростить использование микроконтроллера в типовых проектах возможно использование готовых бинарных файлов, пригодных к прямой заливке в ПЗУ модулей (так называемых прошивок). Готовые прошивки можно разделить на несколько групп согласно концепции их использования:

  • Прошивки для работы под управлением внешнего контроллера. В этих прошивках реализован некий функционал, которому внешний контроллер через UART задает параметры работы. К таким прошивкам относится:
    • Прошивка с управлением AT-командами из SDK Espressif.[3] Там же можно найти документы «4A-ESP8266__AT Instruction Set» и «4B-ESP8266__AT Command Examples». Русскоязычный справочник по AT командам здесь. Также существует утилита, позволяющая сконфигурировать модуль без знания AT команд.
  • Прошивки с встроенными интерпретаторами разнообразных языков высокого уровня. Эти прошивки позволяют подгружать через UART и исполнять скрипты разработчика устройства.
    • NodeMCU (англ.) — проект на основе скриптового языка Lua.[9] Прошивка умеет исполнять Lua-скрипты как из UART (аналогично AT-командам) так и из внутренней flash памяти. Для загрузки скриптов в flash память поддерживается файловая система. Со стороны Wi-Fi имеются встроенные MQTT протокол и HTTP сервер. Встроена графическая оболочка, что позволяет подключать к ESP8266 графические индикаторы. Краткий русскоязычный обзор можно найти здесь и здесь. Русскоязычное описание API языка здесь. Официальная документация здесь. Есть живые русскоязычный и англоязычный форумы. В интернет-магазинах популярны недорогие модули с прошивкой NodeMCU.
    • Espruino — проект на основе скриптового языка JavaScript. Имеется графическая оболочка (IDE) для работы с исходными текстами скриптов и закачки их в модули. Исходники, прошивки, документы и инструментарий здесь. Русскоязычный обзор здесь. Англоязычный форум здесь.
    • ESP8266 BASIC — проект на основе скриптового языка Basic. Проект отличает возможность редактирования и запуска скриптов через браузер, через HTML страничку ESP8266. Также проект поддерживает свою графическую утилиту для прошивки флеш-памяти. Поддерживаются модули с 512 кБ, 1, 2 или 4 МБ памяти.
    • Smart.js — проект на основе скриптового языка JavaScript. Русскоязычный обзор здесь.
    • NodeLUA — проект на основе скриптового языка Lua.
    • ZBasic — проект на основе скриптового языка Basic.
    • esp-lisp — вялотекущий проект на основе скриптового языка Лисп.
    • MicroPython — проект на основе скриптового языка MicroPython.
  • Прошивки для интернета вещей. Этот класс прошивок позволяет с одной стороны подключить к ESP8266 набор датчиков и исполнительных устройств, а с другой стороны предоставляет необходимый сетевой функционал для работы в инфраструктуре Internet of Things.
    • ESP Easy (англ.)[10] — прошивка для домашней автоматизации. Выполнена как скетч Arduino. Поддерживает множество датчиков и исполнительных устройств, поддержка которых есть в Arduino (например, датчики температуры, влажности, освещенности, дисплеи, реле и т. п.). Есть клиент MQTT. Документация здесь.
    • WiFi-IoT.ru — онлайн конструктор IoT-прошивок для ESP8266 от Максима Миклина для проекта домашней автоматизации homes-smart.ru. Позволяет прямо на сайте создать прошивку ESP8266 для работы с одной из множества поддерживаемых IoT систем верхнего уровня. Вариант требуемой прошивки создается путём выбора опций конфигурации. Проект коммерческий, но есть бесплатные ограниченные возможности.
    • BOLT IOT Platform (англ.)[11] — полностью коммерческий индийский проект, доступный пока только на рынке Индии. Интересен тем что программируется в стиле HTML кода, который разработчик может набрать прямо на HTML страничке своего устройства. Есть приложения для Android и iOS.
  • Прошивки для популярного применения переходника UART-WiFi.
    • Проект библиотек HTTP сервера с файловой системой для ESP8266.[12] Реализована настройка WiFi параметров через HTML интерфейс. На основе библиотеки создан проект TCP2UART переходника.[13]
    • ESP8266-transparent-bridge — проект прозрачного переходника TCP-UART.

Начальная загрузка и обновление прошивки[править | править код]

Источник исполняемой программы ESP8266 задается состоянием портов GPIO0, GPIO2 и GPIO15 в момент окончания сигнала Reset (то есть подачи питания). Наиболее интересны два режима: исполнение кода из UART (GPIO0 = 0, GPIO2 = 1, GPIO15 = 0) и из внешней ПЗУ (GPIO0 = 1, GPIO2 = 1, GPIO15 = 0). Режим исполнения кода из UART используется для перепрошивки флеш-памяти, а второй режим штатный рабочий.

Для управления процессом обновления прошивки имеется множество утилит:

  • XTCOM — консольная утилита из Espressif SDK[3]. Подробное русскоязычное описание утилиты XTCOM здесь.
  • NodeMCU-Flasher — оконная утилита под Win.
  • esptool_ck — консольная утилита, написанная на Си. Есть сборки Win и Linux. Поддерживает также ESP32.
  • esp_tool — консольная утилита, написанная на C++. Есть сборки Win и Linux.
  • esptool.py — консольная утилита, написанная на Python.

Внешняя SPI flash должна иметь определенный заголовок для корректного исполнения кода. Структура заголовка указана в документации к утилите XTCOM. На русском есть здесь. Загрузочные утилиты обычно умеют добавлять его к прошивке.

Обновление через Wi-Fi[править | править код]

Предусмотрена возможность обновить прошивку работающего устройства через Wi-Fi. Для этого разделяют флеш-память программ на несколько частей. Одна отводится менеджеру прошивок, две другие под пользовательскую программу. Когда хотят обновить прошивку, новый образ загружают в свободную часть флеш-памяти. После тщательной проверки целостности вновь загруженного образа менеджер прошивок переключает флажок, после чего участок памяти со старой прошивкой освобождается, а исполнение кода идет из нового участка. Соответственно в следующий раз обновление будет загружаться в свободный участок памяти. Подробности в документе «99C-ESP8266__OTA_Upgrade» из Espressif SDK[3].

Утилиты[править | править код]

  • ESPlorer — IDE для ESP8266. Содержит редактор и средства связи с модулем. Позволяет подгружать скрипты в проекте NodeMCU.

Сетевая инфраструктура[править | править код]

Типовое применение ESP8266 как аппаратной основы Internet of Things чаще всего подразумевает установку в домах или офисах. При этом сетевое подключение осуществляется к домашней/офисной локальной сети с выходом в интернет через роутер. Пользователь устройства может контролировать его с помощью планшета или компьютера через свою локальную сеть либо удаленно, через Интернет.

Wi-Fi[править | править код]

ESP8266 может работать как в роли точки доступа так и оконечной станции. При нормальной работе в локальной сети ESP8266 конфигурируется в режим оконечной станции. Для этого устройству необходимо задать SSID Wi-Fi сети и, в закрытых сетях, пароль доступа. Для первоначального конфигурирования этих параметров удобен режим точки доступа. В режиме точки доступа устройство видно при стандартном поиске сетей в планшетах и компьютерах. Остается подключиться к устройству, открыть HTML страничку конфигурирования и задать сетевые параметры. После чего устройство штатно подключится к локальной сети в режиме оконечной станции.

В случае исключительно местного использования возможно всегда оставлять устройство в режиме точки доступа, что снижает необходимые усилия пользователя по его настройке.

Локальная сеть[править | править код]

После подключения к Wi-Fi сети устройство должно получить IP-параметры локальной сети. Эти параметры можно задать вручную вместе с параметрами Wi-Fi либо активизировать какие либо сервисы автоматического конфигурирования IP-параметров (например, DHCP).

После настройки IP параметров обращение к серверу устройства в локальной сети обычно осуществляется по его IP адресу, сетевому имени (в случае если имена поддержаны какой либо технологией, например NBNS) или сервису (в случае если поддержан автоматический поиск сервисов, например через протокол SSDP).

Интернет[править | править код]

Зачастую доступ к устройству требуется из Интернета. Например пользователь с мобильного телефона удаленно проверяет состояние своего «умного дома», обращаясь напрямую к устройству. В этом случае устройство работает в режиме сервера, к которому обращается внешний клиент.

Как правило, устройство на основе ESP8266 находится в локальной сети офиса или дома. Выход в Интернет обеспечивает роутер, подключенный с одной стороны к локальной сети а с другой к сети провайдера интернета. Провайдер назначает роутеру свой статический или динамический IP адрес и роутер осуществляет трансляцию адресов локальной сети в сеть провайдера. По умолчанию правила этой трансляции обеспечивают свободную видимость интернет-адресов в локальной сети, но не позволяют обратиться к локальным адресам со стороны Интернета. Есть несколько способов обойти это ограничение.

Конфигурирование NAT[править | править код]

Большинство современных роутеров позволяют задать дополнительные правила трансляции сетевых адресов между локальной и глобальной сетями. Как правило для этого используются технологии Virtual server или DMZ. Обе технологии позволяют обратиться к серверу в локальной сети из глобальной сети, зная лишь IP адрес, выданный роутеру провайдером. В случае статического IP адреса это зачастую может быть удовлетворительным решением для ограниченного круга пользователей системы. Однако такой подход не всегда удобен: необходимо вручную конфигурировать роутер и выяснять IP-адрес роутера, который может регулярно меняться. Относительно легко решить проблему неизвестного IP адреса можно с помощью механизма DDNS.

DDNS[править | править код]

Чтобы обратиться к серверу устройства конечный пользователь должен знать IP адрес, по которому находится устройство. Однако получить у провайдера Интернета для устройства статический IP адрес не всегда возможно, да и пользоваться таким адресом неудобно. Для решения этой проблемы были созданы специальные интернет-сервисы под общим наименованием динамический DNS. Эти сервисы работают как специальные сервера с фиксированными именами в интернете. Разработчик заводит на таком сервисе свой аккаунт с уникальным именем. Параметры этого аккаунта он прописывает в устройстве. Устройство в режиме клиента периодически обращается к серверу сервиса, сообщая ему имя своего аккаунта и свой текущий IP адрес. Конечный пользователь в интернете обращается к этому же сервису и получает от него текущие IP параметры устройства. В таком случае устройство в сети видно с доменным именем третьего уровня, например esp8266.ddns.org. Существует множество DDNS сервисов. Список можно найти, например, здесь.

Основная проблема DDNS сервисов это гарантии существования конкретного сервиса. Как правило, гарантируется только коммерческий сервис, когда за его использование взимается плата.

Внешние IoT сервисы[править | править код]

Чтобы облегчить проблему доступности устройства в Интернете и сделать инсталляцию устройства легкой для пользователя были разработан ряд решений. Механизм этих решений базируется на существовании в Интернете специального сервера, к которому может подключиться как IoT устройство, так и планшет/компьютер пользователя. При этом устройство работает в режиме клиента, никаких специальных настроек роутера или особых навыков от инсталлятора и пользователя устройства не требуется. Обмен данными с устройством осуществляется при посредничестве этого специального сервиса, параметры которого в устройство должен заложить разработчик. Распространение использования таких сервисов сдерживается необходимостью длительно поддерживать свой сервис в Интернете или пользоваться чужими сервисами с непонятными перспективами длительного существования бесплатных возможностей или регулярной оплатой коммерческих вариантов.

Internet of Things[править | править код]

Основное применение ESP8266 находит в управлении разнообразными бытовыми приборами через беспроводные сети. Концепцию такого управления часто называют «Internet of Things» (IoT, «интернет вещей»). Верхний уровень IoT представлен разнообразными приложениями под популярные платформы (Android, iOS, Windows, …). Эти приложения позволяют разработчику прибора адаптировать приложение под управление его прибором и передать пользователю готовое решение. Существует несколько популярных реализаций концепции IoT в плане обмена данными по сети:

  • HTML сервер на ESP8266. Контроль и управление устройством ведется через браузер. Тяжеловесное решение, подходит автономным устройствам автоматики.
  • AllJoyn (англ.)[14] — набирающий популярность открытый IoT протокол крупного альянса производителей цифровой техники «Allseen». Поддержка встроена в Windows 10. На русском можно почитать здесь.
  • HTTP запросы с использованием протоколов типа REST, XML-RPC (SOAP). Для этого на ESP8266 запускают упрощенный HTTP сервер, без HTML. Достоинство метода — отсутствие проблем с настройкой файрволлов, HTTP обычно открыт всегда.
  • MQTT. Это простой протокол поверх TCP/IP. Очень популярное решение. Существует большое количество IoT приложений верхнего уровня для Android, iOS и других платформ, поддерживающих этот протокол.
  • SNMP. Расширяемый протокол управления сетевыми устройствами. Основной недостаток в том что в большинстве сетей файрволлы блокируют прохождение SNMP.
  • ModBus и другие протоколы промышленной автоматизации.

Интересные проекты ПО верхнего уровня с решениями на базе ESP8266:

  • Majordomo — русскоязычный открытый проект домашней автоматизации.[15]
  • Blynk — облачная платформа для IoT, которая имеет приложения для iOS и Android и поддерживает управления микроконтроллерами: ESP8266, Arduino, Raspberry Pi, SparkFun и д.р. через Интернет.[16][17]
  • SUPLA — Open Building Automation System based on ESP8266.[18]

Модули и отладочные платы[править | править код]

Первыми и наиболее популярными встраиваемыми модулями[19] на базе ESP8266 были изделия китайской компании AI-Thinker[20]. Как правило, эти модули поступают в продажу с прошивками, поддерживающими AT-команды. Однако у компании есть своя прошивка под IoT приложение, некоторые модули могут поставляться с ней. К сожалению, компания поддерживает только китайский язык, что затрудняет использование ее IoT прошивок и Андроид-приложений для любительской автоматизации.

Первоначально модули поставлялись с Flash памятью объемом 512 кБ. Позже официальные прошивки подросли и перестали помещаться в полмегабайта. Поэтому сегодня большинство модулей поставляется с Flash памятью объемом 4 МБ.

Аналогичные решения[править | править код]

Практически синхронно с ESP8266 появилась целая линейка аналогичных решений других производителей. Все они используют двухкристальную архитектуру с памятью программ в SPI Flash.

  • Китайская компания Nufront (англ.) освоила выпуск микроконтроллера NL6621.[27][28] Основные отличия — процессор Cortex-M3, ОЗУ данных и кэша 448кБ, большее количество портов ввода-вывода, радиочастотный тракт требует больше внешних компонентов. Корпус QFN64. Поставляется SDK на базе компилятора Keil, закрытых библиотек WiFi и открытых RTOS uC/OS и TCP/IP стека LwIP.[29] Инструментарий и библиотеки можно взять в официальном репозитории. Есть русскоязычный форум.
  • Тайваньская MediaTek:
    • MT7681[30]. Корпус QFN40, требует относительно много пассивной обвязки.
    • MT7687[31]. Основной процессор Cortex M4 @ 192 MHz, 256kB RAM + 96 kB cache. Отдельный процессор обслуживает WiFi периферию.
  • Texas Instruments CC3200. Ядро Cortex-M4 @ 80 MHz. Корпус QFN64. RAM 256kB.[32]
  • В 2016 году компания Realtek также представила свою линейку аналогичных решений: RTL8195[33], RTL8711, RTL8710[34]. Опоздание с выходом на рынок компания компенсировала очень низкими ценами при богатом наборе ресурсов на кристаллах. Имеются англоязычный и русскоязычный форумы.
  • Другие решения: AI6060H[35].

Забавные факты[править | править код]

Энтузиасты смогли сделать на ESP8266 телевизионный передатчик с модулятором для третьего телевизионного канала. Это не потребовало никакой дополнительной аппаратной обвязки. При этом полностью сохранена Wi-Fi функциональность.

См. также[править | править код]

Примечания[править | править код]

  1. ESP32
  2. Espressif Systems. ESP8266 Low Power Solutions. Espressif (August 01, 2016). Проверено 19 января 2018.
  3. 1 2 3 4 5 Espressif Systems. Official SDK release from Espressif for ESP8266. Espressif (July 29, 2015). Проверено 8 августа 2015.
  4. Espressif Announces ESP8285 Wi-Fi Chip for Wearable Devices
  5. Espressif ESP32
  6. ESP32 overview — Espressif
  7. Third-Party Platforms that Support Espressif Hardware (англ.). www.espressif.com. Проверено 5 апреля 2018.
  8. Sming
  9. NodeMCU
  10. ESP Easy
  11. BOLT IoT
  12. HTTP сервер
  13. TCP2UART
  14. AllSeen Alliance (недоступная ссылка)
  15. majordomo
  16. Сайт проекта Blynk
  17. ESP8266 и Blynk
  18. Сайт проекта SUPLA
  19. ESP8266 module family. esp8266.com wiki. Проверено 24 июня 2015.
  20. Сайт AI-Thinker
  21. 2ADUIESP-12 by Shenzhen Anxinke technology co., LTD for WIFI Module. FCC (December 30, 2014). Проверено 24 июня 2015.
  22. MOD-WIFI-ESP8266. Olimex. Проверено 25 июня 2015.
  23. MOD-WIFI-ESP8266-DEV. Olimex. Проверено 25 июня 2015.
  24. Espressif WROOM-02. Espressif. Проверено 29 июля 2015.
  25. SparkFun ESP8266 Thing. SparkFun. Проверено 27 июня 2015.
  26. ESP-ADC DIL18 development board. In-Circuit Wiki.
  27. Nufront NL6621
  28. NL6621
  29. NL6621M Uart Serial & SPI to WiFi Module for Arduino
  30. MT7681
  31. MT7687
  32. CC3200
  33. $25 Ameba Arduino IoT Board Powered by Realtek RTL8195AM MCU Supports WiFi and NFC
  34. Realtek RTL8710 ARM Cortex-M3 WiFi IoT Modules Sell for $2
  35. Some documents about Ai6060H

Литература[править | править код]

  • Schwartz M. Internet of Things with ESP8266. — Packt Publishing, 2016. — ISBN 9781786468024.

Ссылки[править | править код]