Программа прошивки Esp8266

Обновлено: 24.11.2024

Ниже вы найдете всю необходимую информацию для прошивки двоичного кода прошивки NodeMCU на ESP8266 или ESP8285. Обратите внимание, что это справочная документация, а не учебник с причудливыми снимками экрана. Для этого обратитесь к документации по соответствующему инструменту.

Имейте в виду, что ESP8266 необходимо перевести в режим прошивки, прежде чем вы сможете прошить новую прошивку!

При переключении между версиями NodeMCU см. примечания об обновлении прошивки.

Обзор инструментов¶

esptool.py¶

Утилита на основе Python с открытым исходным кодом, независимая от платформы, для связи с загрузчиком ПЗУ в Espressif ESP8266.

Поддерживаемые платформы: OS X, Linux, Windows, все, что работает под управлением Python

Запуск esptool.py

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

esptool.py --port write_flash -fm 0x00000 .bin

Flash-режим — это qio для большинства ESP8266 ESP-01/07 (модули 512 кбайт) и dio для большинства ESP32 и ESP8266 ESP-12 (модули >=4 Мбайт). ESP8285 требует dout .

Подсказки

  • См. ниже, если вы не знаете или не уверены в емкости флэш-чипа вашего устройства. Это может помочь перепроверить, например. некоторые модули ESP-01 поставляются с 512 КБ, а другие — с 1 МБ.
  • esptool.py находится в активной разработке. Рекомендуется использовать последнюю версию (проверьте версию esptool.py). Поскольку эта документация может быть не в состоянии идти в ногу со временем, обратитесь к документации по режимам флэш-памяти esptool для получения информации о текущих параметрах и параметрах.
  • Файл образа встроенного ПО содержит настройки по умолчанию dio для режима вспышки и 40 м для частоты вспышки.
  • В некоторых редких случаях данные инициализации SDK могут быть недействительными, и NodeMCU может не загрузиться. Самое простое решение — полностью стереть чип перед прошивкой: esptool.py --port erase_flash

PyFlasher для NodeMCU¶

Поддерживаемые платформы: все, что работает под управлением Python, исполняемый файл .exe, доступный для Windows, и .dmg для macOS

Отказ от ответственности: о доступности NodeMCU PyFlasher было объявлено на странице NodeMCU в Facebook, но это не официальное предложение текущей команды прошивки NodeMCU.

Перевод устройства в режим Flash¶

Чтобы включить перепрошивку прошивки ESP8266, перед перезагрузкой устройства на контакте GPIO0 должен быть установлен низкий уровень. И наоборот, для нормальной загрузки GPIO0 должен быть высоким или плавающим.

Если у вас есть комплект разработчика NodeMCU, вам не нужно ничего делать, так как USB-подключение может привести к низкому уровню GPIO0, установив DTR, и сбросить плату, установив RTS.

Если у вас есть ESP-01 или другое устройство без встроенного USB, вам нужно будет включить прошивку самостоятельно, установив низкий уровень на GPIO0 или нажав переключатель "flash" при включении питания или сбросе модуля.

Какие файлы прошивать¶

Если вы создаете прошивку с помощью облачного компоновщика, образа Docker или любого другого метода, создающего комбинированный двоичный файл, вы можете прошить этот файл напрямую по адресу 0x00000.

В противном случае, если вы собрали собственную прошивку из исходного кода:

  • bin/0x00000.bin в 0x00000
  • bin/0x10000.bin в 0x10000

Обновление прошивки¶

При обновлении (или понижении версии!) микропрограммы с одной версии NodeMCU до другой могут возникнуть три проблемы:

Сценарии Lua, написанные для одной версии NodeMCU (например, 0.9.x), могут не работать без ошибок в более новой прошивке. Например, Espressif изменил операцию socket:send на асинхронную, то есть неблокирующую. Подробнее см. в документации по API.

Возможно, потребуется переформатировать файловую систему флэш-памяти NodeMCU, особенно если ее адрес изменился из-за того, что новая прошивка отличается по размеру от старой прошивки. Если он не отформатирован автоматически, то он должен быть действительным и иметь то же содержимое, что и до операции флэш-памяти. Вы по-прежнему можете запустить file.format() вручную, чтобы переформатировать файловую систему флэш-памяти. Вы узнаете, нужно ли вам это делать, если ваши флеш-файлы существуют, но кажутся пустыми, или если данные не могут быть записаны в новые файлы. Однако это должен быть исключительный случай. Форматирование файловой системы на большом флэш-накопителе (например, части по 16 МБ) может занять некоторое время. Так что при первой загрузке не стоит волноваться, если в течение минуты ничего не происходит. На консоль выведено сообщение, чтобы вы знали об этом.

Данные инициализации Espressif SDK могут меняться в каждой версии прошивки NodeMCU, и может потребоваться их стирание или перепрошивка. Дополнительные сведения см. в разделе Данные инициализации SDK. Полное стирание модуля перед обновлением прошивки поможет избежать этой проблемы.

Данные инициализации SDK¶

Версии NodeMCU компилируются с определенными версиями Espressif SDK.SDK резервирует место во флэш-памяти, которое используется для хранения калибровки и других данных. Espressif называет эту область «Системными параметрами» и занимает четыре сектора флэш-памяти по 4 КБ. Пятый сектор размером 4 Кб также зарезервирован для радиочастотной калибровки. - В сборках SDK версии 2.x эти 5 секторов расположены на последних страницах во флэш-памяти. - В сборках SDK версии 3.x эти 5 секторов расположены на неиспользуемых страницах со смещением флэш-памяти 0x0B000-0x0FFFF, между сегментом bin/0x00000.bin по адресу 0x00000 и сегментом bin/0x10000.bin по адресу 0x10000.

Введение. Как написать прошивку ESP8266 с нуля (используя ESP Bare Metal SDK и язык C)

Espressif ESP8266 претерпел значительные изменения. Кто-то может даже назвать его спорным. Все началось с того, что ESP8266 был WiFi-модулем с базовым интерфейсом UART. Но позже стало ясно, что для встраиваемой системы он достаточно мощный. По сути, это модуль, который можно использовать для запуска полноценных приложений.

Компания Espressif тоже это поняла и выпустила SDK. В первых версиях было полно ошибок, но с тех пор стало значительно лучше. Был выпущен еще один SDK, который предлагал FreeRTOS, портированную на ESP. Здесь я хочу поговорить о версии без ОС. Конечно, есть сторонние прошивки, которые предлагают поддержку языка сценариев для упрощения разработки (просто погуглите их), но ESP8266 по-прежнему является микрочипом (акцент на MICRO), и использование языка сценариев может быть излишним. Итак, мы собираемся вернуться к ESP SDK и голому C. Вы удивитесь, это проще, чем кажется!

Шаг 1. Первые шаги

Для разработки встроенного ПО вам потребуется:

<р>1. ESP8266 подключен к компьютеру через USB.
Есть много статей, как подключить ESP к компьютеру. Вам понадобится несколько кабелей dupont и адаптер UART-to-USB. Если у вас есть плата Arduino, вы можете использовать ее как UART-to-USB. Погуглите "подключить esp8266 к компьютеру" - статей об этом много.

Короче говоря, для начала разработки у вас должно быть устройство ESP, доступное как /dev/ttyUSB0 (/dev/ttyACM0, если вы используете Arduino или COMn в Windows) и SDK, установленный по определенному пути.

Шаг 2: Главная()

В C `int main()` — это точка входа в программу. Но в случае ESP точкой входа является `void user_init()`. Эту функцию следует использовать только для инициализации, а не для долговременной логики.

Вот пример:

void sdk_init_done_cb(void) <
/* Инициализация вашего приложения здесь */
>

void user_init() <
system_init_done_cb(sdk_init_done_cb);
>

Обратите внимание: все, что мы делаем в user_init, — это вызываем API-функцию system_init_done_cb. Эта функция принимает один параметр, который является указателем на функцию, которая будет вызвана после того, как все системные модули будут должным образом инициализированы. Вы также можете поместить свой код инициализации в user_init, но у вас могут возникнуть проблемы с некоторыми системными функциями (например, WiFi), просто потому, что соответствующие модули еще не инициализированы. Таким образом, лучше использовать system_init_done_cb и выполнять инициализацию в функции обратного вызова.

Остерегайтесь собаки

ESP8266 имеет функцию сторожевого таймера. И НЕТ документированного API для его управления (есть некоторые недокументированные вещи, но они выходят за рамки этого руководства). Время ожидания составляет 1 секунду.

Что это значит? Это означает, что вы должны каждую секунду возвращать поток управления в систему, иначе устройство будет перезагружено. Этот код приводит к перезагрузке устройства:

Вообще, watchdog не зло, помогает, если программа зависает. И, 1 секунда не так уж и мала, как кажется. Просто помните об этом.

Шаг 3. Что-то сделать

Принимая во внимание то, что мы узнали о сторожевом таймере, мы сталкиваемся с очевидным вопросом: где я могу запускать свои задачи?

Самый простой ответ — таймеры. API таймера в ESP очень прост.

os_timer_t start_timer; /* объявить переменную, которая будет использоваться для управления таймером */

Если последний параметр функции os_time_arm равен 0, обратный вызов таймера будет вызван только один раз.Если он равен 1, он будет вызываться повторно, пока не будет вызван os_timer_disarm.

И, наконец, у нас есть место для размещения нашего кода: функция start_timer_cb.

Наша задача — заставить светодиод мигать. Некоторые платы ESP имеют светодиод, подключенный к GPIO16, если на вашей плате его нет, вы можете подключить светодиод к любому свободному GPIO.

void start_timer_cb(void *arg) <
static int on = 0;
if (!on) < /* если светодиод не горит - включить */
gpio_output_set(BIT16, 0, BIT16, 0);
вкл = 1;
> else < /* если светодиод горит - выключается */
gpio_output_set(0, BIT12, BIT12, 0):
on = 0;
>
>

Как вы помните, start_timer_cb — это функция обратного вызова таймера, которая вызывается каждые 5 секунд. При первом вызове переменная равна 0, и мы устанавливаем GPIO16 в высокий уровень - в результате светодиод будет включен. При втором вызове мы устанавливаем GPIO16 в низкий уровень — и светодиод выключается. И так далее и тому подобное.

Шаг 4. Создание проекта

Теперь пришло время построить наш проект. Допустим, у нас есть только один исходный файл — main.c. Я не могу рекомендовать использовать make-файлы, которые используются для сборки примеров. Они слишком сложные и немного странные. Итак, я предлагаю написать свой собственный (простой!) Makefile.

<р>1. Скомпилируйте main.c в main.o.
Используйте компилятор xtensa-lx106-elf-gcc, который является частью esp-open-sdk.

<р>3. Преобразование файла .elf в .bin
Для этого используйте скрипт esptool.py из esp-open-sdk. Запускаем так: esptool elf2image -o /

Если все в порядке, у вас должно быть 3 файла с именами вроде 0x00000.bin, 0x11000.bin 0x66000.bin.

Шаг 5. Прошивка

Последний шаг — установить нашу прошивку на устройство. Для этого мы снова будем использовать esptool, но теперь мы должны использовать опцию write_flash. Вот так:

esptool --порт

--бод 115200 write_flash 0x00000 0x000000.bin 0x11000 0x11000.bin 0x66000 0x66000.bin

Вы должны использовать настоящие имена файлов из предыдущего шага.

И, если все по-прежнему в порядке, светодиод, прикрепленный к устройству, начнет мигать каждые 5 секунд.

Шаг 6. Дальнейшие действия

Написание прошивки для любого устройства — это огромная тема. Работа с ESP8266 не является исключением. Итак, цель данной статьи — лишь осветить направление. В ESP8266 SDK есть множество различных API: WiFi, GPIO, TCP/UDP и другие. Обязательно ознакомьтесь с документацией полностью здесь. Также полезно ознакомиться с примерами поставщиков прошивок и esp-open-sdk. Если вы хотите начать с примера, ознакомьтесь с этим, в котором выполняется запуск встроенного веб-сервера Mongoose на ESP8266.

Введение. Как прошить или запрограммировать прошивку ESP8266 AT с помощью прошивальщика и программатора ESP8266, модуля IOT Wifi

Описание:

Этот модуль представляет собой USB-адаптер/программатор для модулей ESP8266 типа ESP-01 или ESP-01S. Он удобно оснащен разъемом 2x4P 2,54 мм для подключения ESP01. Кроме того, все контакты ESP-01 разъединяются через штекер 2x4P 2,54 мм, поэтому пользователю очень удобно отлаживать ESP8266.

Модуль основан на USB-UART CP2104, совместимом со всеми платформами. На борту со схемой автоматической загрузки ESP8266. Пользователям очень удобно загружать программу ESP-01/01S, обновлять прошивку, выполнять последовательную отладку и т. д. Он поддерживает множество программ, таких как Arduino IDE, ESP8266 Flasher и Lexin FLASH_DOWNLOAD_TOOLS.

Спецификация:

  • Интерфейс USB типа A.
  • Один разъем 2x4P 2,54 мм.
  • Один штекер 2x4P 2,54 мм
  • Рабочее напряжение: 3,3 В

Шаг 1. Список материалов

На прикрепленной фотографии показан необходимый компонент. В этом руководстве:

  1. Прошивка и программатор ESP8266
  2. Модуль последовательного приемопередатчика Wi-Fi ESP8266
  3. Перемычка.

Шаг 2. Установка оборудования

На фото выше показано соединение между ESP8266 Flasher and Programmer и модулем последовательного приемопередатчика Wi-Fi ESP8266 с помощью перемычки.

Шаг 3. Загрузите файл

Загрузить драйвер для ESP8266 Flasher и Programmer

Загрузите прошивку из папки ESP8266 Flash Tool.

И установите драйвер.

Вложения

Шаг 4. Установка прошивки

Окно (прошивка AT)

  1. После загрузки файла прошивки. Извлеките его. Войдите в папку, перейдите в install_firmware > окно.
  2. Откройте ESP_DOWNLOAD_TOOL_V2.4.exe.

Выберите COM-порт ESP8266 Flasher and Programmer + ESP8266 Wifi Serial Transceiver, к которому подключается модуль. Установите BAUDRATE на 115200.

Убедитесь, что модуль ESP8266 Wifi Serial Transceiver находится в режиме FLASH (см. первую фотографию шага 2 для конфигурации оборудования)

Нажмите СТАРТ, чтобы установить прошивку.

  • bin\boot_v1.2.bin 0x00000
  • bin\user1.4096.new.4.bin 0x01000
  • bin\blank.bin 0x7e000
  • bin\user2.4096.new.4.bin 0x81000
  • bin\esp_init_data_default.bin 0x3fc000
  • bin\blank.bin 0x3fe000

Шаг 5: AT-команда в Arduino

  1. Отсоедините перемычку от прошивальщика и программатора ESP8266 (см. шаг 2, второе фото)
  2. Откройте Arduino, затем щелкните монитор последовательного порта.
  3. Нажмите кнопку Reset, чтобы убедиться, что esp8266 подключен к последовательному монитору.
  4. Соблюдайте правильную конфигурацию последовательного монитора (см. фото выше)
  5. Затем напишите AT и отправьте его, он ответит нормально
  6. Для получения более подробной информации об AT-команде нажмите на эту ссылку, чтобы получить дополнительную информацию о AT-команде.

Чтобы изменить скорость передачи с помощью AT-команды:

Например, 9600 бод / 8 бит данных / 1 стоповый бит и без контроля четности и управления потоком AT+UART_DEF=9600,8,1,0,0

В этом уроке вы узнаете, как поставить новую AT-прошивку на модуль ESP8266.

Аппаратное обеспечение модуля Wi-Fi ESP8266

ESP работает на 3,3 В, поэтому мы должны использовать внешний регулятор, чтобы он работал. Использование Arduino Uno — один из вариантов. Он будет работать, но может быть нестабильным, так как ESP может достигать тока около 300 мА, когда он находится в режиме передачи.

ESP8266 имеет два режима работы: программирование и рабочий.

В режиме программирования прошиваем прошивку в ESP. Чтобы войти в этот режим, вы должны сначала подключить GPIO0 к LOW, когда ESP не подключен к источнику питания. Подключив все, включите питание.

Рабочий режим — это режим, в котором модуль ESP8266 работает и работает с прошивкой. Для входа в этот режим необходимо подключить GPIO0 к плавающему (имеется в виду, что модуль ни к чему не подключен). Как и в случае с режимом программирования, необходимо сначала перезагрузить модуль (отключить и снова включить питание).

Для установки прошивки мы используем FTDI.

ESP можно использовать как Arduino, потому что он есть в ARDUINO IDE, но мы поговорим об этом подробнее в следующем уроке.

Программное обеспечение для ESP8266

После того, как мы научились подключать ESP, мы должны научиться ставить на него прошивку. Для этого подключите все свои вещи к макетной плате. Вы можете соединить их так, как мы это сделали на картинке.

Прежде чем мы начнем:

  1. Для этого вам понадобится Windows, поэтому, если вы работаете на Mac, используйте Parallels Desktop.
  2. Затем скачайте этот ZIP-файл и разархивируйте его на рабочий стол.

Запуск приложения загрузки прошивки

При распаковке этого файла вы получите две папки "FLASH_TOOL" и "Esp8266_Flash".

Откройте "FLASH_TOOL" и откройте приложение с именем "ESP_DOWNLOAD_TOOL_V2.4". Вы увидите что-то вроде этого.

Работа в приложении

Затем загрузите все файлы .bin из папки "Esp8266_Flash". Затем расставьте точки, как на фото.

Установить коды

  • Затем откройте файл readme и вставьте коды в приложение.

Тестирование новой прошивки

В папку "ESP8266_firmware" я добавил файл AT_INSTRUCTION.PDF, чтобы вы могли видеть все используемые AT-команды.

Затем снимите FTDI с ПК и установите ESP8266 в рабочий режим. Верните FTDI обратно на ПК и откройте Arduino ide set port так же, как ваш FTDI (плата не имеет значения, и откройте последовательный монитор.

Затем установите обе NL и CR и измените скорость передачи ESP на свою (только в том случае, если вы изменили значение по умолчанию, равное 115200).

Отправка AT-команд

Теперь мы можем отправлять AT-команды, отправлять «AT» без кавычек, и если вы получаете «ОК», это означает, что ESP работает.

Читайте также: