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

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

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

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

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

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

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

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

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

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

Осенью 2015 года Espressif Systems представила развитие линейки — микросхему ESP32. В начале 2016 года инженерные образцы нового кристалла стали доступны партнерам компании для тестирования, в сентябре 2016 года ESP32 стал доступен как полноценный продукт. Двухъядерный 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.

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

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

Помимо официальной SDK существует ряд проектов альтернативных SDK. Эти SDK используют библиотеки Espressif Systems или предлагают собственный эквивалент библиотек Espressif Systems, полученный методами реверсинжиниринга. «esp-open-sdk». Улучшенная версия SDK от Espressif. Содержит GCC компилятор и некоторые библиотеки Espressif Systems. Только Линукс. «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» — проект добавления Arduino совместимых библиотек поверх стандартных библиотек Espressif, но без среды Ардуино.

Прошивки Чтобы упростить использование микроконтроллера в типовых проектах возможно использование готовых бинарных файлов, пригодных к прямой заливке в ПЗУ модулей (так называемых прошивок). Готовые прошивки можно разделить на несколько групп согласно концепции их использования: Прошивки для работы под управлением внешнего контроллера. В этих прошивках реализовано задание параметров работы через внешний контроллер UART. К таким прошивкам относится: Прошивка с управлением AT-командами из SDK Espressif. Там же можно найти документы «4A-ESP8266__AT Instruction Set» и «4B-ESP8266__AT Command Examples». Русскоязычный справочник по AT командам здесь. Также существует утилита, позволяющая сконфигурировать модуль без знания AT команд. Прошивки с встроенными интерпретаторами разнообразных языков высокого уровня. Эти прошивки позволяют подгружать через UART и исполнять скрипты разработчика устройства.  — проект на основе скриптового языка Lua. Прошивка умеет исполнять 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.  — прошивка для домашней автоматизации. Выполнена как скетч Arduino. Поддерживает множество датчиков и исполнительных устройств, поддержка которых есть в Arduino (например, датчики температуры, влажности, освещённости, дисплеи, реле и т. п.). Есть клиент MQTT. Документация здесь. WiFi-IoT.ru — онлайн конструктор IoT-прошивок для ESP8266 от Максима Миклина для проекта домашней автоматизации homes-smart.ru. Позволяет прямо на сайте создать прошивку ESP8266 для работы с одной из множества поддерживаемых IoT систем верхнего уровня. Вариант требуемой прошивки создаётся путём выбора опций конфигурации. Проект коммерческий, но есть бесплатные ограниченные возможности.  — полностью коммерческий индийский проект, доступный пока только на рынке Индии. Интересен тем что программируется в стиле HTML кода, который разработчик может набрать прямо на HTML страничке своего устройства. Есть приложения для Android и iOS. Прошивки для популярного применения переходника UART-WiFi. Проект библиотек HTTP сервера с файловой системой для ESP8266. Реализована настройка WiFi параметров через HTML интерфейс. На основе библиотеки создан проект TCP2UART переходника. 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. Подробное русскоязычное описание утилиты 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.

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

Сетевая инфраструктура