- ESP8266 Урок 4. Прошиваем ESP-01
- Знакомство с недорогим и функциональным микроконтроллером ESP8266: прошивка и пример использования
- Разновидности МК серии ESP и их плат
- Микроконтроллеры ESP8266
- ESP-01
- ESP-03
- ESP-07
- ESP-12
- Платы
- WeMos D1 mini
- NodeMCU v0.9/v1
- NodeMCU v3
- Характеристики
- Как работать с микроконтроллером ESP8266?
- Прошивка
- В чём прошивается?
- Основы
- Распределение памяти
- Файловая система SPIFFS
- Энергонезависимая память EEPROM
- Прошивка «по воздуху» OTA-Update
ESP8266 Урок 4. Прошиваем ESP-01
Продолжаем работу с микроконтроллером ESP8266, а вернее с FLASH-памятью, подключенной к ней для хранения ПО и настроек.
Сегодня мы попробуем в эту память что-нибудь записать, или, как говорят, прошить её, тем самым обновить программное обеспечение до другой более новой версии.
Также, при необходимости, мы теперь можем вернуть прошивку прошлой версии, которая была в модуле, так как в прошлом уроке мы её смогли считать и сохранить, причём в удобном виде.
Попробуем мы это сделать тремя способами. Первые два – с использованием программ с графическим интерфейсов Flash Download Tools и nodemcu-flasher, а третий – с командной строки при помощи утилиты esptool, с помощью которой мы считывали прошивку.
Для начала нам нужны, конечно же, файлы для прошивания памяти.
Скачаем необходимый SDK с официального сайта Espressif. В случае модуля ESP-01, мы, скорее всего не сможем воспользоваться третьей версией SDK, так как в ней нет прошивки, пригодной для схемы 512+512. Наши методы прошивания подойдут не только для модулей ESP-01, а и для любых других модулей, где установлен контроллер ESP8266, поэтому вполне можно и воспользоваться SDK3. Но в нашем случае мы скачаем последнюю на данный момент SDK 2.2.1 отсюда. Комплект нужен именно NONOS (без использования операционной системы).
Распакуем архив. Из него нам нужны будут для прошивания boot_v1.X.bin, версию подбираем, обычно последняя, файл esp_init_data_default_vXX.bin, я прошивал версию 05, файл blank.bin (если прошиваем неочищенную полностью память) из папки bin, а также файл userX.1024.new.2.bin из папки bin\at\512+512.
Для начала давайте очистим полностью FLASH-память нашего модуля.
Сначала подключим нашу схему, которая с прошлых занятий не изменилась.
Запускаем командную строку, находясь сразу в каталоге с файлами прошивок, которые мы создали, когда считывали прошивку из модуля, переведём модуль в режим прошивки и отправим следующую команду
После удачного стирания памяти мы получим вот такое сообщение
Ещё раз уточним, что и с какого адреса прошивать, открыв мануал по AT
Теперь запустим Flash Download Tools и подключим файлы новой прошивки, прописав соответствующие адреса, заодно также подключим и файл blank.bin, который прошивается по трём адресам, но отмечать для прошивания мы его не будем, так как у нас память уже полностью очищена. Также выберем настройки внизу под наши параметры
Переводим модуль в режим прошивки и жмём кнопку START.
При удачном завершении операции мы получим вот такую картину
Вообще, признаться, когда я писал данный пост, у меня впервые прошилось нормально с помощью данной программы, обычно всегда процесс приводил к ошибке.
Запустим ESPlorer, настроим порт и перезагрузим наш контроллер. Если у нас всё прошилось удачно, мы увидим приблизительно вот это
Мы видим, что загрузчик у нас новой версии, SDK тоже.
Теперь попытаемся прошить наш модуль с помощью nodemcu-flasher.
Сначала не забываем отключиться от порта в ESPlorer, затем снова очистим нашу память с помощью утилиты esptool.
Запустим nodemcu-flasher, сначала перейдём там в раздел Config и аналогично подключим файлы прошивки и отметим только нужные файлы (если бы мы не стирали полностью FLASH, то blank.bin тоже отмечаем)
Переводим модуль в режим прошивки, переходим в программе nodemcu-flasher в раздел Operation и жмём кнопку Flash( F ). Начнётся процесс заливки прошивки в FLASH-память модуля
При удачном исходе операции мы получим зелёную галку внизу
Как ни странно, у меня сейчас тоже всё прошилось. Обычно сразу три файла у меня никогда удачно не прошивались, только по очереди, и то не с первого раза. Посмотрим как пойдёт процесс при съёмке видеоверсии. Проверим наличие прошивки в программе ESPlorer. Если всё нормально, то у нас остался ещё третий метод прошивания FLASH-памяти модуля, а это утилита esptool.
Для удобства работы с ней мы скопируем из папки с новой прошивкой файлы boot_v1.7.bin, версию подбираем, обычно последняя, файл esp_init_data_default_v05.bin, я прошивал версию 05, файл blank.bin (если прошиваем неочищенную полностью память) из папки bin, а также файл user1.1024.new.2.bin в папку, которую мы сохраняли прошивку с модуля и в которой мы в данный момент находимся в режиме командной строки. Прошивать будем каждый файл по отдельности, хотя можно прошить и вместе.
Перейдём в командную строку и, соответственно, сначала очистим FLASH-память нашего модуля перед прошивкой.
Затем переведём модуль в режим прошивки и попытаемся прошить сначала самый маленький файл
Насчёт параметров, надеюсь тут всё понятно. Первый – это порт, к которому подключен модуль, второй – скорость порта, третий – метод прошивания (без сжатия), четвертый – частота шины SPI, пятый – её тип (обычный двухпроводной, а не QSPI), шестой – объём памяти FLASH в мегабитах, седьмой – адрес, с которого заливается файл прошивки, восьмой – имя файла прошивки, которую мы заливаем в FLASH.
При удачном исходе мы получим следующее сообщение
Подобным образом прошьём и остальные файлы, не забывая перед каждой командой переводить модуль в режим прошивания, хотя можно это делать и после, но, руководствуясь моим опытом, лучше ДО
Проверим на всякий случай наличие прошивки в ESPlorer.
Таким же образом мы можем прошить наши файлы, которые мы считали в прошлом занятии, например, в том случае, если нам по каким-то причинам не понравится новое ПО, которое мы только что прошили.
Итак, на данном уроке мы научились прошивать модуль ESP-01, хотя вполне можно тем же образом прошивать и другие модули, основанные на микроконтроллере ESP8266. Для процесса прошивания мы использовали три метода. Какой метод лучше подходит – выбирать вам!
Всем спасибо за внимание!
Бинарные версии 512 + 512 здесь
Различные модули ЕSP8266 можно приобрести здесь Модули ЕSP8266
Переходник USB to TTL можно приобрести здесь ftdi ft232rl
Многофункциональный переходник CJMCU FT232H USB к JTAG UART FIFO SPI I2C можно приобрести здесь CJMCU FT232H USB
Смотреть ВИДЕОУРОК (нажмите на картинку)
Знакомство с недорогим и функциональным микроконтроллером ESP8266: прошивка и пример использования
ESP8266 — китайский микроконтроллер (далее МК) от производителя Espressif с поддержкой WiFi-интерфейса. Управлять всем этим можно не только с браузера, но и из приложений на Android/iOS/Desktop. Если МК будет применяться там, куда не достаёт WiFi-сеть, то ESP8266 может работать в режиме точки доступа.
Примечание В этой статье не будут рассмотрены практические примеры применения ESP8266. Речь пойдёт об основных преимуществах и возможностях этого МК.
Содержание:
Микроконтроллер ESP8266 работает с внешней flash-памятью по интерфейсу SPI. Её объём варьируется от 512 Кбайт до 4 Мбайт. При желании и умении микросхему памяти можно будет перепаять на версию до 32 Мбайт.
Разновидности МК серии ESP и их плат
Существует около полутора десятка версий МК серии ESP и огромное количество плат с ними. Рассмотрим самые популярные из них.
Микроконтроллеры ESP8266
ESP-01
- Имеет 8 разведённых контактов (VCC, GND, UTXD, URXD, CH_PD, GPIO0, GPIO2, GPIO6) и PCB-антенну (печатный проводник на самой плате).
- Из разведённых выводов тут присутствуют только 3 GPIO, но не стоит видеть в этом одни минусы. Если нужно будет управлять одним реле или получать данные с датчика температуры, вам не понадобятся все выводы МК, достаточно будет лишь пары. К тому же, существуют платы и шилды с возможностью простой коммутации именно к этой версии МК. Например такая:
ESP-03
- Здесь появляется керамическая антенна. Она считается немного эффективней своего печатного собрата.
- Также на плате разведены все доступные выводы GPIO. В этой статье описана разница между типами антенн для микроконтроллеров ESP8266.
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 работает только в паре с другими МК, во втором — может работать независимо (хотя никто не запрещает присоединить её к другому МК).
- «Из коробки» МК поставляется с прошивкой для работы через 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. Чтобы это исправить, идём в Файл → Настройки и в поле Дополнительные ссылки для Менеджера плат вставляем эту ссылку:
Потом открываем Инструменты → Плата → Менеджер плат и в открывшемся списке в самом низу находим плату «esp8266 by ESP8266 Community» (если с этим возникли трудности — используем поиск вверху окна). Устанавливаем последнюю версию платы (около 150 Мбайт).
22 апреля в 19:00, Онлайн, Беcплатно
После установки в списке плат появится немалое количество плат. Если не нашли свою плату или не знаете её названия — выбирайте Generic ESP8266 Module. Теперь можно выбрать свой МК в списке COM-портов.
У ESP8266 две скорости передачи: основная — её вы указываете при инициализации последовательного порта, и скорость, на которой передаётся отладочная информация. Она передаётся сразу после подачи питания на МК. Обычно это скорости 115200 бод и 74800 бод 0 соответственно.
Основы
Если вы не владеете базовыми знаниями работы с платформой Arduino, наверстать упущенное можно в нашей статье про основы использования Arduino.
После скачивания платы ESP8266 с помощью менеджера, в примерах появится большое количество скетчей. Рассмотрим один из них (Файл → Примеры → ESP8266WebServer → HelloServer):
Что делает этот скетч? МК подключается к вашей WiFi-сети и запускает сервер. В монитор последовательного порта выведется локальный IP-адрес (к примеру, 192.168.0.105 ). Вбиваем этот IP в адресную строку браузера, после чего в нём должна отобразиться строка «Привет от ESP8266!». Таким же образом можно проверить адрес /inline .
Ознакомиться с API МК можно в их официальном репозитории.
Распределение памяти
Внешняя память распределена на следующие разделы:
- скетчи (память для прошивки);
- файловая система SPIFFS;
- OTA-Update (прошивка, переданная «по воздуху»);
- EEPROM (да-да, её у МК тоже нет, поэтому она имитируется на flash-памяти);
- конфигурация WiFi.
Файловая система SPIFFS
Один из плюсов внешней flash-памяти — файловая система. В неё можно с лёгкостью записать файлы (веб-странички, медиа-файлы и прочее) на микроконтроллеры ESP8266. На аппаратном уровне это можно было бы реализовать подключив к МК модуль SD-карт. Однако это решение требует свободных портов.
Размер файловой системы (от 32 Кбайт до 15 Мбайт) зависит от самого объема flash-памяти и от конфигурации, выставленной в Инстурменты → Flash size. Например, конфигурация 4M (2M SPIFFS) предназначена для МК с общим объёмом flash-памяти 4 Мбайт, 2 Мбайт из которых будут выделены под файловую систему.
SPIFFS не работает с папками — она содержит только список файлов. Соответственно, если загрузить в неё папку style, в которой будет файл header.css, то в файловую систему систему запишется файл с именем /style/header.css. Об этом стоит помнить, потому что длина файлового имени не должна превышать 31 символ (читается 32, но символ с кодом 0 отведён под завершение строки).
Для загрузки файлов потребуется инструмент ESP8266FS, интегрирующийся в Arduino IDE. Инструкция по установке:
- Качаем инструмент по ссылке выше.
- В папке Arduino IDE создайте папку tools (если её там ещё нет).
- В папку tools распакуйте скачанный архив. Должно быть так:
…/Arduino/tools/ESP8266FS/tool/esp8266fs.jar. - После запуска среды в папке скетча (Скетч → Показать папку скетча) нужно создать папку data. Её содержимое будет загружаться в файловую систему.
- После кликаем в Инструменты → ESP8266 Sketch Data Upload, чтобы загрузить данные в файловую систему. После загрузки в панели статуса высветится «SPIFFS Image Uploaded». Перед процессом загрузки в файловую систему обратите внимание: если открыт монитор последовательного порта — закрываем его.
Как работать с SPIFFS и файлами в ней, можно узнать в этой статье.
Энергонезависимая память EEPROM
Работа с внешней памятью немного отличается от стандартной.
- Перед считыванием или записью данных нужно инициализировать EEPROM, указав при этом выделяемую под неё память (от 4 до 4096 байт) функцией EEPROM.begin(size) .
- Привычная функция EEPROM.write(addr, value) записывает данные не на саму энергонезависимую память, а в оперативную.
- Чтобы внесённые данные записались в память, нужна функция EEPROM.commit() (или же EEPROM.end() , чтобы заодно очистить данные из оперативной памяти).
- Метод EEPROM.read(addr) возвращает байт из памяти по адресу.
Прошивка «по воздуху» OTA-Update
Для этого вам потребуется установленный Python.
После этого достаточно в метод loop() добавить строку: ArduinoOTA.handle() .
Прошиваем МК по проводу. В случае успешной загрузки в списке портов появится новый хост с именем «esp8266-xxxxxx», где esp8266 — указанное выше имя хоста, а xxxxxx — локальный IP-адрес МК. Выбираем его.
Теперь микроконтроллер ESP8266 можно прошивать «по воздуху».