ESP8266 — китайский микроконтроллер (далее МК) от производителя Espressif с поддержкой WiFi-интерфейса. Часто этот МК позиционируют только как WiFi-модуль, который работает в связке с другими МК. Однако встроенных возможностей МК серии ESP достаточно для реализации большого количества проектов.
В большинстве случаев этот МК применяют в системах автоматизации быта и IoT (Internet of Things — Интернете вещей). Управлять всем этим можно не только с браузера, но и из приложений на Android/iOS/Desktop, хотя первый вариант имеет больше «кроссплатформенности», т. к. сейчас браузер есть почти на всём — от часов до телевизоров. Если МК будет применяться там, куда не достаёт WiFi-сеть, либо её там попросту и не должно быть (дачи, теплицы), то ESP8266 может работать в режиме точки доступа. У этого МК уже существует более мощный и продвинутый брат — ESP32.
Примечание В этой статье не будут рассмотрены практические примеры применения ESP8266. Речь пойдёт об основных преимуществах и возможностях этого МК.
У этого МК нет встроенной flash-памяти, поэтому он работает с внешней flash-памятью по интерфейсу SPI. В большинстве популярных версий МК её объём варьируется от 512 Кбайт до 4 Мбайт. При желании и умении микросхему памяти можно будет перепаять на версию до 32 Мбайт.
Разновидности МК серии ESP и их плат
Существует около полутора десятка версий МК серии ESP и огромное количество плат с ними. Рассмотрим самые популярные из них.
Микроконтроллеры
ESP-01
Микроконтроллер ESP-01. Источник
Считается самым популярным из серии. Имеет 8 разведённых контактов (VCC, GND, UTXD, URXD, CH_PD, GPIO0, GPIO2, GPIO6) и PCB-антенну (печатный проводник на самой плате). Из разведённых выводов тут присутствуют только 3 GPIO, но не стоит видеть в этом одни минусы. Если нужно будет управлять одним реле или получать данные с датчика температуры, вам не понадобятся все выводы МК, достаточно будет лишь пары. К тому же, существуют платы и шилды с возможностью простой коммутации именно к этой версии МК. Например такая:
Плата WiFi-реле. Источник
ESP-03
Плата ESP-03. Источник
Здесь появляется керамическая антенна. Она считается немного эффективней своего печатного собрата. Также на плате разведены все доступные выводы GPIO. В этой статье описана разница между типами антенн.
ESP-07
Плата ESP-07. Источник
В этой версии в глаза сразу бросается металлический экран (который перед этим появляется на ESP-06). На борту керамическая антенна и разъём для внешней антенны.
ESP-12
Разные варианты микроконтроллера ESP-12. Источник
В свою очередь, существует несколько вариантов этой версии: ESP-12S, ESP-12F, ESP-12E. Вторая и третья версии имеют на торце дополнительно 6 разведённых контактов.
Платы
WeMos D1 mini
Плата WeMos D1 mini. Источник
Имеет распайку девяти GPIO-контактов. На плате имеется небезызвестный мост CH34x (такие часто ставят на клоны Arduino). Установлен МК с 4 Мбайт flash-памяти. Недостаток для некоторых — придётся самому паять контакты на плату (идут в комплекте). Конструкционно совместима с различными выпускаемыми шилдами реле/датчиками.
NodeMCU v0.9/v1
Плата NodeMCU v0.9. Источник
Первое поколение плат серии NodeMCU. На ней распаяны все 11 GPIO-портов. Некоторые из них обладают дополнительными функциями (UART, I2C, SPI, PWM, ADC). Хотя на плате впаяны контакты, она занимает всю ширину беспаечной макетной платы, что затрудняет работу на ней. МК имеет 4 Мбайт flash-памяти. Также имеется мост CH340.
NodeMCU v3
Плата NodeMCU v3. Источник
Финальная версия платы этой серии. Существует и v2 «Amica», которая меньше по габаритам. v3 носит название «LoLin» и отличается от предыдущей версии только размерами и незначительными деталями (например дополнительной распайкой шины питания). Кроме традиционного моста CH340/CH341 на платы ставят чип CP2102, так что внимательней с выбором драйвера на них.
Характеристики
Все эти (и не только эти) микроконтроллеры выполнены на чипсете ESP8266EX, а следовательно, характеристики у них одинаковые:
- Протоколы: 802.11 b/g/n/e/i.
- Диапазон частот: 2.4 ГГц – 2.5 ГГц.
- Процессорное ядро: Tensilica L106 32 разряда.
- Диапазон напряжений питания: 2.5 В – 3.6 В.
- Среднее потребление тока: 80 мA.
- Режимы WiFi: Station/SoftAP/SoftAP+Station.
- Безопасность: WPA/WPA2.
- Шифрование: WEP/TKIP/AES.
- Обновление прошивки: через UART, по радиоканалу (OTA — Other The Air).
- Сетевые протоколы: IPv4, TCP/UDP/HTTP/FTP.
- Поддержка WiFi Direct (P2P), P2P Discovery, P2P GO (Group Owner) mode, GC (Group Client) mode, P2P Power Management.
- Встроенные аппаратные ускорители: CCMP (CBC-MAC, режим счётчика), TKIP (MIC, RC4), WAPI (SMS4), WEP (RC4), CRC.
- Поддержка LUA-скриптов.
Как работать с ESP8266?
Есть два способа работы с ним: управление через AT-команды и автономная работа со своей прошивкой. В первом случае ESP8266 работает только в паре с другими МК, во втором — может работать независимо (хотя никто не запрещает присоединить её к другому МК).
Конференция C++ Russia 2020 Moscow
27–28 апреля, Москва и онлайн, 10 750–138 000 ₽
tproger.ruСобытия и курсы на tproger.ru
«Из коробки» МК поставляется с прошивкой для работы через AT-команды. Для этого ESP8266 подключается к любому другому МК по UART-интерфейсу. Для демонстрации работы AT-команд ESP8266 можно подключить к компьютеру через USB-UART переходник и запустить монитор последовательного порта (например из Arduino IDE). Про то, как работать с этими командами, можно прочитать в этой статье.
Прошивка
В большинстве случаев намного удобней прошивать МК и работать с ним со своей прошивкой. Однако тут тоже есть свои нюансы. Вот 3 варианта событий:
- У вас «голый» ESP8266, например ESP-01. Вам потребуется USB-UART переходник, который нужно подключить к МК. Этот переходник обязательно должен быть на 3-вольтовой логике, т. к. иначе можно легко отправить ваш МК в кибер-Вальхаллу. Про процесс подключения можно прочитать здесь.
- Второй случай идентичен первому, кроме того, что вместо переходника можно использовать любую плату Arduino. Достаточно специальным образом подключить ESP8266 к UART-контактам Arduino, а её саму «отключить», замкнув контакт аппаратного сброса (RESET) на землю. Естественно, питать ESP8266 нужно будет от шины питания 3.3 В. В этом случае в качестве переходника USB-UART будет выступать мост (чаще всего CH340) на самой плате Arduino. Этот процесс также описан в статье выше.
- Лучший вариант — это плата с USB-UART мостом на борту (как NodeMCU, WeMos и прочие). В этом случае ничего дополнительного делать не нужно — просто подключайте плату через USB.
В чём прошивается?
Существует несколько софтов для прошивки МК. Например NodeMCU Flasher (которая подходит не только для плат NodeMCU) или ESPTool (необходим Python).
Однако в этой статье работа с МК и процесс прошивки будут рассмотрены в Arduino IDE.
Изначально среда Arduino IDE не предназначена для работы с МК серии ESP. Чтобы это исправить, идём в Файл → Настройки и в поле Дополнительные ссылки для Менеджера плат вставляем эту ссылку:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
Потом открываем Инструменты → Плата → Менеджерплат и в открывшемся списке в самом низу находим плату «esp8266 by ESP8266 Community» (если с этим возникли трудности — используем поиск вверху окна). Устанавливаем последнюю версию платы (около 150 Мбайт).
После установки в списке плат появится немалое количество плат. Если не нашли свою плату или не знаете её названия — выбирайте Generic ESP8266 Module. Теперь можно выбрать свой МК в списке COM-портов.
Теперь что касается скорости передачи. У ESP8266 две скорости передачи: основная — её вы указываете при инициализации последовательного порта, и скорость, на которой передаётся отладочная информация. Она передаётся сразу после подачи питания на МК. Обычно это скорости 115200 бод и 74800 бод 0 соответственно.
Основы
Если вы не владеете базовыми знаниями работы с платформой Arduino, наверстать упущенное можно здесь:
Arduino: выбор платы, подключение и первая программаtproger.ru
После скачивания платы ESP8266 с помощью менеджера, в примерах появится большое количество скетчей. Рассмотрим один из них (Файл → Примеры → ESP8266WebServer → HelloServer):
#include <esp8n> #include <wificlient> <esp8266webserver> "........"; // Указываем имя существующей точки доступа const char* password = "........"; // Указываем пароль существующей точки доступа ESP8266WebServer server(80); void handleRoot() { // Обработчик запроса клиента по корневому адресу // Отправляем клиенту server.send(200, "text/plain", "Привет от ESP8266!"); } void handleNotFound() { // Обрабатываем небезызвестную ошибку 404 String message = "File Not Foundnn"; message += "URI: "; message += server.uri(); message += "nMethod: "; message += (server.method() == HTTP_GET) ? "GET" : "POST"; message += "nArguments: "; message += server.args(); message += "n"; for (uint8_t i = 0; i < server.args(); i++) { message += " " + server.argName(i) + ": " + server.arg(i) + "n"; } server.send(404, "text/plain", message); } void setup(void) { Serial.begin(115200); WiFi.mode(WIFI_STA); // Устанавливаем Wi-Fi модуль в режим клиента (STA) WiFi.begin(ssid, password); // Устанавливаем ssid и пароль от сети, подключаемся while (WiFi.status() != WL_CONNECTED) { // Ожидаем подключения к Wi-Fi delay(500); Serial.print("."); } // Выводим информацию о подключении Serial.println(""); Serial.print("Подключено к "); Serial.println(ssid); Serial.print("IP адрес: "); Serial.println(WiFi.localIP()); // Устанавливаем обработчики. Можно сделать двумя способами: server.on("/", handleRoot); server.on("/inline", []() { server.send(200, "text/plain", "Отличная работа!"); }); server.onNotFound(handleNotFound); // Вызывается, когда обработчик не назначен // Запускаем сервер server.begin(); Serial.println("HTTP-сервер запущен"); } void loop(void) { server.handleClient(); } </esp8n>
Что делает этот скетч? МК подключается к вашей WiFi-сети и запускает сервер. В монитор последовательного порта выведется локальный IP-адрес (к примеру, 192.168.0.105). Вбиваем этот IP в адресную строку браузера, после чего в нём должна отобразиться строка «Привет от ESP8266!». Таким же образом можно проверить адрес /inline.
Ознакомиться с API МК можно в их официальном репозитории.
Распределение памяти
Как уже говорилось — встроенной памяти чипсет не имеет, а поэтому используется внешняя — от 512 Кбайт до 4 Мбайт. Эта память распределена на следующие разделы:
- скетчи (память для прошивки);
- файловая система SPIFFS;
- OTA-Update (прошивка, переданная «по воздуху»);
- EEPROM (да-да, её у МК тоже нет, поэтому она имитируется на flash-памяти);
- конфигурация WiFi.
Файловая система SPIFFS
Во внешней flash-памяти явно есть свои «плюшки». Одна из них — файловая система. Как это ни странно, в неё можно с лёгкостью записать файлы (как на какой-нибудь накопитель). На аппаратном уровне это можно было бы реализовать подключив к МК модуль SD-карт. Однако это решение требует свободных портов (которых иногда может не быть). Поэтому SPIFFS является очень полезным в данном плане.
Для чего? На МК часто заливаются веб-странички, медиа-файлы и прочее. Если HTML-страницу в 20 строк ещё приемлемо хранить в коде, то что делать с большими сайтами? При каждом изменении менять в коде? А с изображениями как? Сериализовать (бывает и такое) и тоже вставлять в код? Вот в таких случаях и спасает файловая система.
Размер файловой системы (от 32 Кбайт до 15 Мбайт) зависит от самого объема flash-памяти и от конфигурации, выставленной в Инстурменты → Flash size. Например, конфигурация 4M (2M SPIFFS) предназначена для МК с общим объёмом flash-памяти 4 Мбайт, 2 Мбайт из которых будут выделены под файловую систему.
SPIFFS не работает с папками — она содержит только список файлов. Соответственно, если загрузить в неё папку style, в которой будет файл header.css, то в файловую систему систему запишется файл с именем /style/header.css. Об этом стоит помнить, потому что длина файлового имени не должна превышать 31 символ (читается 32, но символ с кодом 0 отведён под завершение строки). В этот 31 символ, естественно, входят все слэши, точки перед расширением и само расширение. Поэтому придётся воздержаться от многоуровневых структур и длинных имён файлов/папок.
Для загрузки файлов в файловую систему МК потребуется инструмент ESP8266FS, который интегрируется в Arduino IDE. Инструкция по установке:
- Качаем инструмент по ссылке выше.
- В папке Arduino IDE создайте папку tools (если её там ещё нет).
- В папку tools распакуйте скачанный архив. Должно быть так:…/Arduino/tools/ESP8266FS/tool/esp8266fs.jar.
- После запуска среды в папке скетча (Скетч → Показать папку скетча) нужно создать папку data. Её содержимое будет непосредственно загружаться в файловую систему.
- После кликаем в Инструменты → ESP8266 Sketch Data Upload, чтобы загрузить данные в файловую систему. После успешной загрузки в панели статуса высветится «SPIFFS Image Uploaded». Перед процессом загрузки в файловую систему обратите внимание: если открыт монитор последовательного порта — закрываем его.
Как работать с SPIFFS и файлами в ней, можно узнать в этой статье.
Энергонезависимая память EEPROM
Уже упоминалось, что сам чипсет не имеет энергонезависимой памяти, поэтому она имитируется через внешнюю flash-память. Из-за этого работа с ней немного отличается от стандартной. Перед считыванием или записью данных нужно инициализировать EEPROM, указав при этом выделяемую под неё память (от 4 до 4096 байт) функцией EEPROM.begin(size). Привычная функция EEPROM.write(addr, value) записывает данные не на саму энергонезависимую память, а в оперативную. Чтобы внесённые данные записались в память, нужна функция EEPROM.commit() (или же EEPROM.end(), чтобы заодно очистить данные из оперативной памяти). Метод EEPROM.read(addr) возвращает байт из памяти по адресу.
Прошивка «по воздуху» OTA-Update
ESP8266 имеет возможность обновления прошивки по сети WiFi. Это удобно, если МК находится в труднодоступном месте. Кроме того, прошивки «по воздуху» чаще всего быстрее, чем по проводу.
Вам потребуется установленный Python.
Потом в скетч нужно добавить файл: #include <arduinoota>. Инициализинастраиваем OTA следующими строками:
ArduinoOTA.setHostname("Host-ESP");// Имя хоста ArduinoOTA.setPassword((const char *)"password");// Пароль для подключения к хосту. Если не нужен — комментируем эту строку ArduinoOTA.begin();// Инициализация
После этого достаточно в метод loop() добавить строку: ArduinoOTA.handle().
Прошиваем МК по проводу. В случае успешной загрузки в списке портов появится новый хост с именем «esp8266-xxxxxx», где esp8266 — указанное выше имя хоста, а xxxxxx — локальный IP-адрес МК. Выбираем его. Теперь МК можно прошивать «по воздуху».
За время своего еще недолгого существования ESP8266 успел мутировать во множество модификаций различных размеров и форм, обладающих разными возможностями. Вот и сейчас из Поднебесной мне приехала платка на её основе, которую раньше не приходилось держать в руках. В чем-то интересная, в чем-то забавная. Давайте разбираться.
Модуль


Первый запуск
С конструкцией разобрались, теперь подадим на модуль питание через microUSB платы и посмотрим, что произойдет. Загорелся светодиод — значит, модуль работает. Удобно, не нужны никакие дополнительные блоки питания, ведь 500 миллиампер, которые выдает usb-порт, модулю должно хватить. После запуска модуля я рассчитывал увидеть новую сеть, которую по умолчанию создают все 8266 на стандартной прошивке, но этого не произошло, новых сетей в радиусе видимости не обнаружено. Странно… Подключившись к модулю по проводу с помощью утилиты ESPlorer (я по привычке использую его для общения с платой), получил в консоль что-то невразумительное. Похоже — прошивка нестандартная. Ну что ж, подключаться к китайскому облаку я не собираюсь, поэтому прошью модуль чем-то более подходящим. Например, NodeMCU. Для этого снова собираем бутерброд из двух плат и подключаем его уже через microUSB-порт нижнего модуля. Порадовало, что прошивка прошла успешно, без каких-либо проблем. Главное — вовремя нажать кнопку FLASH.Помогите объяснить Во время первых запусков(примерно 2-3 часа экспериментов) модуль существенно грелся. Экран чипа через минуту после старта был по ощущениям примерно 39-40 градусов и температура продолжала расти(через 20 мнут непрерывной работы дохолида до уровня «едва могу прикоснуться»). Стало интеесно, что будет, поэтому я оставил модуль поджариваться и занялся другими делами. Через некоторое время я потрогал модуль — он был комнатной температуры(что типично доя ESP-12) и с тех пор не греется. У кого есть идеи, с чем это может быть связано — напишите, пожалуйста в комментариях.
Работа
Итак, модуль реагирует на команды, подключился к моему wi-fi — вроде бы все в порядке. Что делают в первую очередь с любимым новым модулем или контроллером? Правильно! Мигают светодиодом! Не будем же и мы отступать от традиции. Разглядывая дорожки на плате и экспериментируя я установил, что для управления свечением светодиода используются следующие выходы: GPIO12 — зеленый GPIO13 — синий GPIO15 — красный Причем производитель не удосужился поставить ограничивающие резисторы различного номинала для каждого из цветов, поэтому на полной яркости красный намного тусклее остальных. Впрочем, данные выходы поддерживают ШИМ. И если это кому-то критично, он может подстроить яркость свечения самостоятельно. Теперь черед датчика освещенности. Как и следовало ожидать, этот датчик подключен к единственному аналоговому входу ESP-8266 — adc pin. Показания меняются в соответствии с изменениями освещенности. Вот только светочувствительный резистор, который используется в этом модуле, меняет свои параметры в весьма широком диапазоне. Поэтому при подключении его к ESP-8266 через простейший делитель, как сделано в этом модуле, датчик будет показывать освещенность лишь в узком диапазоне. Чуть темнее — 0, чуть ярче — максимум.
Выводы.
Достоинства Witty: 1. Модуль собран и готов к работе. Не нужно шаманить с подключением, гадать, хватит ли питания. Просто подключили по MicroUSB и вперед! 2. Прошивальщик в комплекте. Не нужно подключать сторонний USB-UART, выводить только лишь для прошивки специальную кнопку. 3. Встроенный датчик освещенности. 4. Размер. Более компактна, чем NodeMCU board. Хотя и занимает всю ширину макетки.Недостатки: 1. Размер. Все-таки, хотелось бы иметь хоть один ряд отверстий в breadboard свободным. 2. Требуется демонтаж с макетки для каждой прошивки(или подключение по Tx, Rx, что убивает идею удобного подключения) 3. Светодиод запараллелен с тремя GPIO Выходами. Либо не использовать их, либо светомузыка.Для кого она: Я бы рекомендовал эту плату тем, кто только планирует знакомство с ESP-8266, хочет вообще понять, нужен ли ему этот контроллер. Таким образом, порог вхождения становится минимальным. Никаких шаманств с подключением, питанием и прочими капризами ESP-8266, которые у многих отбивают охоту продолжать знакомство с контроллером. Также она будет полезна как часть набора для быстрого прототипирования(зачем, собственно, брал её я) или для устройств разового применения(сделал-поработал-разобрал) Ссылка на магазин, где я его брал (не реклама):ru.aliexpress.com/item/Free-Shipping-SMD-Resistor-0805-51R-5-resistor-smd-resistor-51R-5000pcs-reel-in-stock-if/1882818309.htmlМое первое знакомство с Ардуино началось, как ни странно, с модуля ESP8266 Witty Cloud. Все в нем хорошо, но есть нюансы… 1. Для прошивки необходимо демонтировать ESP из собранной схемы. 2. ESP плохо дружит с макетной платой. Первый нюанс «лечится» припаиванием гребенки типа «мама» к прошивочному модулю Witty.











- https://tproger.ru/articles/about-esp8266/
- https://habr.com/post/391403/
- https://habr.com/post/400997/
Подключение и настройка WiFi модуля ESP8266-01
ESP8266 и Arduino, подключение, распиновка
WiFi ESP8266 в проектах Arduino
Где скачать библиотеку Esp8266 lib h для своих проектов?
ESP8266 – микроконтроллер с Wi-Fi: технические сведения
ESP8266 прошивка, программирование в Arduino IDE
Настройка программного обеспечения ESP8266 в Arduino IDE