Китайская компания Espressif разработала микроконтроллер ESP8266 с поддержкой Wi-fi. Приобрел гаджет большую популярность после 2014 года, так как в этом году представлены первые разработки с данным микроконтроллером.
В зависимости от конкретной модели платы, имеется полноценных 15 выводов, которые могут работать как в режимах входа, так и выхода. Производитель скрывает многие моменты технических характеристик платы, однако, исследователи, проанализировав официальные библиотеки для esp8266, выяснили, что на устройстве расположено около 80 кб ОЗУ и порядка 35 кб IRAM. Чип работает на частоте 80 МГц, с негарантированной возможностью разгона до 160 МГц.
Плата питается напряжением 3.3 В, это стоит принять во внимание, потому что напряжение логических уровней большинства популярных плат Arduino равняется величине 5 В!
Больше технических аспектов вы можете узнать из ESP8266 datasheet, который удастся посмотреть ниже или скачать по ссылке: http://espressif.com/sites/default/files/documentation/0a-esp8266ex_datasheet_en.pdf.
Скачать ESP8266 datasheet
Связь с внешним миром и другими микроконтроллерами осуществляется различными способами:
- UART-WiFi мост;
- SPI;
- I2C.
В интернет сообществе есть много информации по совмещению плат ESP8266 и Arduino. С другой стороны, трудно найти документацию на русском языке, а esp8266 datasheet на русском языке заменяет интернет портал, полностью посвященный ей – esp8266.ru.
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-адрес МК. Выбираем его. Теперь МК можно прошивать «по воздуху».
Купить на AliExpress Купить на eBay Купить на GearBest.com Купить на DX.com
WiFi модуль ESP-12E разработан компанией Ai-thinker и построен на базе процессора с ядром ESP8266, отличительной особенностью которого является наличие радиоинтерфейса WiFi. Ядро ESP8266 интегрировано в Tensilica L106 – 32-битный микроконтроллер с ультранизким энергопотреблением. Поддержка тактовых частот 80 и 160 МГц, поддержка RTOS, встроенные Wi-Fi MAC/BB/RF/PA/LNA, микрополосковая антенна на плате модуля.
Модуль поддерживает стандарт IEEE802.11 b/g/n, полный стек TCP/IP протоколов. Пользователи могут использовать модули либо в качестве дополнения для подключения какого-либо устройства к сети, либо в качестве отдельного сетевого контроллера.
Характеристики (кратко):
- 802.11 b/g/n;
- встроенный 32-битный MCU с низким энергопотреблением;
- встроенный 10-битный АЦП;
- встроенный стек протоколов TCP/IP;
- встроенный РЧ коммутатор, РЧ трансформатор сопротивлений, LNA, усилитель мощности;
- встроенные блоки ФАПЧ и управления мощностью;
- Wi-Fi 2,4 ГГц, поддержка WPA/WPA2;
- SDIO 2.0, (H) SPI, UART, I2C, I2S, IRDA, PWM, GPIO;
- STBC, 1×1 MIMO, 2×1 MIMO;
- потребление в режиме глубокого сна < 10 мкА, ток утечки в выключенном режиме < 5 мкА;
- просыпание и передача пакетов через < 2 мс;
- выходная мощность +20 дБм в режиме 802.11b;
- диапазон рабочик температур: -40 – 125 ºC.
Технические характеристики
Категории | Параметры | Значения |
---|---|---|
WiFi параметры | WiFi протоколы | 802.11 b/g/n |
Частотный диапазон | 2,4ГГц–2,5ГГц (2400М–2483,5М) | |
Характеристики аппаратной части | Периферийные шины | UART/HSPI/I2C/I2S/инфракрасный интерфейс удаленного управления |
Рабочее напряжение | 3,0 – 3,6 В | |
Рабочий ток | около 80 мА | |
Диапазон рабочих температур | -40 – 125 ºC | |
Размеры | 16мм x 24мм x 3мм | |
Характеристики программного обеспечения | WiFi режим | станция, программная точка доступа, программная точка доступа + станция |
Безопасность | WPA/WPA2 | |
Шифрование | WEP/TKIP/AES | |
Обновление прошивки | загрузка через UART / OTA (через сеть) / загрузка и запись прошивки через хост | |
Разработка ПО | поддержка Cloud Server Development / SDK для разработки пользовательских прошивок | |
Сетевые протоколы | IPv4, TCP/UDP/HTTP/FTP | |
Пользовательская настройка | Набор AT команд, Cloud Server, приложение Android/iOS |
Техническое описание
Назначение выводов
Номер вывода | Название вывода | Назначение |
---|---|---|
1 | RST | Сброс модуля |
2 | ADC | Вход аналого-цифрового преобразователя. Входное напряжение в диапазоне 0–1 вольт; результат 0–1024. |
3 | EN | Вывод включения чипа. Активный уровень – высокий. |
4 | IO16 | GPIO16; может использоваться для пробудить чипсет из режима глубокого сна. |
5 | IO14 | GPIO14; HSPI_CLK |
6 | IO12 | GPIO12; HSPI_MISO |
7 | IO13 | GPIO13; HSPI_MOSI; UART0_CTS |
8 | VCC | Вход питания 3,3В. |
9 | CS0 | Выбор чипа |
10 | MISO | Вход ведущего, выход ведомого. |
11 | IO9 | GPIO9 |
12 | IO10 | GPIO10 |
13 | MOSI | Выход ведущего, вход ведомого. |
14 | SCLK | Последовательный тактовый сигнал. |
15 | GND | Корпус. |
16 | IO15 | GPIO15; MTDO; HSPICS; UART0_RTS |
17 | IO2 | GPIO2; UART1_TXD |
18 | IO0 | GPIO0 |
19 | IO4 | GPIO4 |
20 | IO5 | GPIO5 |
21 | RXD | UART0_RXD; GPIO3 |
22 | TXD | UART0_TXD; GPIO1 |
Корпуса и размеры
Внешние размеры модуля составляют 16мм*24мм*3мм. Флеш-память, интегрированная в модуль, – это SPI флеш-память, емкость которой составляет 4 Мбайта, в корпусе SOP-210mil. Антенна, применяемая в модуле, – микрополосковая антенна на плате с коэффициентом усиления 3 дБи.
Описание функционала
MCU
ESP8266EX встроен в 32-битный микроконтроллер (MCU) Tensilica L106, который отличается ультранизким энергопотреблением 16-битной RISC архитектурой. Тактовая частота CPU составляет 80 МГц. Также она может достичь максимального значения 160 МГц.
ESP8266EX часто интегрируется с внешними датчиками и другими специальными устройствами через его выводы GPIO; код для подобных приложений поставляется в примерах в SDK.
Организация памяти
Внутренние SRAM и ROM.
Однокристальная WiFi система ESP8266EX встраивается вместе с контроллером памяти; включая SRAM и ROM. MCU может обращаться к памяти через интерфейсы iBus, dBus и AHB.
Согласно текущей версии SDK, пользователю доступно следующее пространство памяти:
- размер RAM < 36 Кбайт, то есть, когда ESP8266EX работает в режиме клиентской станции и подключен к роутеру, программируемое пространство, доступное пользователю в куче и секции data, составляет около 36 Кбайт;
- в однокристальной системе нет программируемой памяти ROM; пользовательская программа должна храниться во внешней SPI флеш-памяти.
Внешняя SPI флеш-память
В модуль для хранения пользовательских программ установлена внешняя SPI флеш-память размером 4 Мбайта. Если необходимо больший объем, то необходимо установить флеш-память большего размера. Теоретически, поддерживается емкость до 16 Мбайт.
Предполагаемая емкость SPI флеш-памяти:
- OTA выключено: минимальный размер флеш-памяти, который будет поддерживаться, составляет 512 Кбайт;
- OTA включено: минимальный размер флеш-памяти, который будет поддерживаться, составляет 1 Мбайт;
Поддерживается несколько SPI режимов, в том числе, Standard SPI, Dual SPI и Quad SPI.
Перед загрузкой во флеш-память выбирайте правильный SPI режим, иначе прошивки/программы, которые вы загрузили, могут работать неправильно.
Загрузки
Техническое описание WiFi модуля ESP-12E на базе микроконтроллера ESP8266.
Магазины и цены
Товар в магазине | Количество штук в комплекте | Стоимость | Расчетная стоимость за 1 шт. |
---|---|---|---|
ESP-12E WiFi модуль (ESP8266) на AliExpress | 1 | 114.34 руб. / 1.76 USD | |
ESP-12E WiFi модуль (ESP8266) на eBay | 1 | 137.79 руб. / 2.19 USD | |
ESP-12E WiFi модуль (ESP8266) на GearBest.com | 1 | 194.88 руб. / 3.09 USD | |
ESP-12E WiFi модуль (ESP8266) на DX.com | 1 | 287.31 руб. / 4.55 USD |
Купить на AliExpress Купить на eBay Купить на GearBest.com Купить на DX.com Используемые источники:
- https://arduinoplus.ru/esp8266-datasheet/
- https://tproger.ru/articles/about-esp8266/
- https://radioprog.ru/shop/merch/33