ESP8266 · Wi-Fi · Trema IDE

Заливка ESP8266 по Wi-Fi: пошаговая инструкция

NodeMCU, Wemos D1 mini и другие платы на ESP8266 принимают новую программу без кабеля: один раз заливаете её проводом, а дальше выбираете в меню порта адрес платы и нажимаете «Загрузить». Весь путь в Trema IDE на живой плате, по шагам и со снимками, — и чем ESP8266 отличается от ESP32.

Короче некуда. Пример «WiFiOtaUpdate» → вписать сеть и пароль → залить по кабелю и нажать RESET → посмотреть адрес в мониторе порта → в меню порта «Указать адрес платы…» → «Загрузить» → ввести пароль заливки.

Что понадобится

  • Плата на ESP8266 и кабель USB — один раз, для первой заливки. Удобнее всего NodeMCU и Wemos D1 mini: у них есть переходник USB и автосброс. Голый модуль ESP-01 тоже умеет, но шьётся через переходник.
  • Сеть Wi-Fi на 2,4 ГГц. К сетям 5 ГГц ESP8266 не подключается.
  • Компьютер в той же сети, по кабелю или по Wi-Fi. Роутер должен пускать устройства друг к другу: гостевые сети этого не делают.
  • Trema IDE и пакет плат ESP8266 — он ставится сам, когда выбираете плату.

Шаг 1. Выберите плату

В разделе «Платы» наберите в поиске 8266 или то, что написано на самой плате. NodeMCU v2 и v3 — это «NodeMCU 1.0 (ESP-12E Module)», Wemos D1 mini — «LOLIN(WEMOS) D1 R2 & mini». Нажмите «Выбрать».

Раздел «Платы» в Trema IDE: по запросу 8266 найдены NodeMCU 1.0, LOLIN(WEMOS) D1 R2 & mini, Generic ESP8266 Module; выбрана NodeMCU 1.0
Поиск подсказывает, какая запись к какой плате: «Это и есть NodeMCU V2 и V3».

Шаг 2. Откройте пример и впишите сеть

В разделе «Примеры» найдите «WiFiOtaUpdate»: группа «09. Полезное» или поиск по словам «по воздуху». Один и тот же пример работает и на ESP8266, и на ESP32.

Раздел «Примеры» в Trema IDE: по запросу «воздух» найден пример WiFiOtaUpdate
Пример ищется и по-русски: «воздух», «прошивка».

В начале программы заполните четыре строки:

const char WIFI_SSID[] = "имя вашей сети";
const char WIFI_PASS[] = "пароль от сети";
const char OTA_NAME[] = "";              // пусто — имя по заводскому номеру
const char OTA_PASS[] = "pridumayte-svoy";

OTA_NAME можно не трогать: плата назовётся по своему заводскому номеру, например plata-f66848. OTA_PASS — пароль заливки, придумайте свой: без него перепрошить плату сможет любой в той же сети.

Шаг 3. Первый раз — по кабелю, потом RESET

Выберите COM-порт платы и нажмите «Загрузить» — обычная заливка, около двадцати секунд. Затем один раз нажмите на плате RESET (или кнопку «Сброс платы» в мониторе порта, или отключите и включите питание).

Зачем: после заливки по проводу ESP8266 помнит, что её прошивали по проводу, и первый перезапуск после заливки по воздуху может зависнуть — плата пропадёт из сети, пока её не перезапустить руками. NodeMCU и D1 mini загрузчик обычно сбрасывает сам (в журнале строка Hard resetting via RTS pin), и у нас на NodeMCU всё прошло и без кнопки. Но лишний RESET ничего не стоит, а на модулях без автосброса он обязателен.

Шаг 4. Узнайте имя и адрес платы

Раздел «Порт» → «Монитор», скорость 115200. Раз в десять секунд плата пишет имя и адрес в сети — запишите их, лучше на наклейку.

Монитор порта Trema IDE: после строки непонятных символов плата пишет «Готов принимать прошивку по воздуху» и «Имя в сети: plata-f66848, Адрес: 192.168.31.247»
Строка непонятных символов в начале — это нормально, читайте ниже.

Строка «кракозябр» при каждом перезапуске — не поломка. Это встроенный загрузчик ESP8266 рассказывает о себе на скорости 74 880 бод, а монитор слушает на 115200. Дальше программа говорит на правильной скорости, и всё читается.

Шаг 5. Выберите плату в меню порта

В меню порта, в группе «По Wi-Fi», нажмите «Указать адрес платы…», впишите адрес из монитора и нажмите «Добавить». Можно и «Искать платы в сети» — но многие роутеры поиск не пропускают, а адрес работает всегда.

Меню порта Trema IDE: в группе «По Wi-Fi» в поле адреса вписано 192.168.31.247, рядом кнопка «Добавить»
Адрес из монитора — в поле, затем «Добавить» и выбрать плату в списке.

Шаг 6. Нажмите «Загрузить»

Trema IDE спросит, та ли это плата (адрес роутер может отдать и соседней), и попросит пароль заливки — тот, что в OTA_PASS. Пароль программа помнит, пока открыта.

Окно Trema IDE «Грузить в плату по адресу 192.168.31.247?» с кнопкой «Да, это моя плата»
Сверьте адрес с монитором: прошивка сотрёт программу, которая сейчас по этому адресу.
Окно Trema IDE «Пароль платы 192.168.31.247» с полем пароля и кнопкой «Залить»
Пароль заливки. Забыли — залейте по кабелю: кабель пароль не спрашивает.
Консоль Trema IDE: «Передача по Wi-Fi: 30%»
Передача: около трёхсот килобайт — несколько секунд.
Консоль Trema IDE: «Готово: плата приняла прошивку (314 КБ) и перезапускается»
Готово: плата проверила прошивку и перезапустилась уже с ней.

При первой заливке по Wi-Fi Windows может спросить, пускать ли Trema IDE в сеть: плата сама подключается к компьютеру. Нажмите «Разрешить доступ» и отметьте обе сети — программа предупредит об этом заранее.

Что оставить в своих программах

В каждой следующей программе должны остаться три вещи: подключение к Wi-Fi, запуск приёмника обновлений в setup() и постоянный вызов ArduinoOTA.handle() в loop().

#include <ESP8266WiFi.h>
#include <ArduinoOTA.h>

void setup() {
  WiFi.mode(WIFI_STA);
  WiFi.begin(WIFI_SSID, WIFI_PASS);
  // ... дождаться подключения ...
  ArduinoOTA.setHostname("teplitsa");
  ArduinoOTA.setPassword(OTA_PASS);
  ArduinoOTA.begin();
}

void loop() {
  ArduinoOTA.handle();   // без этой строки плата не услышит заливку
  // ваша программа — без долгих delay()
}

Залить по воздуху программу без этих строк — значит следующую заливать кабелем. Trema IDE проверяет это перед заливкой по Wi-Fi и предупредит. Долгий delay() в loop() тоже мешает: плата видна, но прошивку не берёт.

Память: что выбрать в Flash Size

У ESP8266 нет двух готовых областей, как у ESP32: новая программа пишется в свободное место над старой, и обе должны поместиться до начала файловой системы. Раскладка выбирается в настройках платы (кнопка с ползунками рядом с её названием), пункт Flash Size. Для плат с 4 МБ — NodeMCU, D1 mini:

Flash SizeЧто это значит
4MB (FS:2MB OTA:~1019KB)Выбрано сразу. Программа до ~1 МБ, заливка по воздуху работает. Пример занимает 314 КБ
4MB (FS:1MB OTA:~1019KB), 4MB (FS:none OTA:~1019KB)То же место под программу, меньше или нет места под файлы
4MB (FS:3MB OTA:~512KB)Много места под файлы, но программа для заливки по воздуху — не больше ~512 КБ

Больше мегабайта программа ESP8266 не бывает в принципе: чип видит код через окно около мегабайта, даже если памяти на плате 16 МБ. У модулей с 1 МБ (ESP-01) места под заливку по воздуху около 470 КБ. Раскладку меняют только по кабелю.

Если не получается

Над консолью появляется карточка: что случилось и что сделать, а кнопка «Подробнее на trema.ru» ведёт сюда.

Что видноЧто на самом делеЧто сделать
Поиск плату не находитПлата объявляет себя в сети широковещательными пакетами, а многие роутеры не пропускают их между Wi-Fi и кабелем, школьные сети — почти все«Указать адрес платы…» и адрес из монитора порта. Заливке по адресу поиск не нужен
«Плата не отвечает по Wi-Fi»До платы не доходит приглашение: она выключена, в другой сети или адрес сменилсяСверьте адрес с монитором порта. Плата и компьютер — в одной сети; гостевые сети и сети со входом по логину не годятся
«Заливку по Wi-Fi никто не слушает»По адресу кто-то есть, но программы с ArduinoOTA на нём нетОдин раз залейте пример WiFiOtaUpdate по кабелю
«Плата просит пароль» или «не приняла пароль»Пароль в окне не совпал с OTA_PASS в программе платыПроверьте раскладку и регистр. Забыли — залейте по кабелю
«Ответила, но не смогла подключиться к компьютеру»Плата приняла приглашение и сама стучится в компьютер, а его не пускает брандмауэр Windows, сетевой экран антивируса или VPNБрандмауэр Windows — кнопка «Разрешить в брандмауэре» в карточке. Антивирус — разрешите Trema IDE входящие из своей сети. VPN — доступ к локальной сети для входящих
Заливка прошла, а плата пропала из сетиПервый перезапуск после заливки по кабелю завис: у модулей без автосброса чип помнит, что его прошивали по проводуНажмите RESET или отключите и включите питание. Чтобы не попадать: после первой заливки по кабелю — сразу RESET
«Связь оборвалась на N %»Слабый сигнал или плата занята долгой работойНа плате осталась прежняя программа. Нажмите «Загрузить» ещё раз, поближе к роутеру
Плата не принимает прошивку, пишет про местоНовая программа не помещается рядом со старойУменьшите программу или выберите Flash Size с меньшей файловой системой (FS), один раз — по кабелю

Про «не смогла подключиться к компьютеру»: при заливке плата сама открывает подключение к Trema IDE на один из портов 32320–32329 (TCP). Всё, что режет входящие из домашней сети, режет и заливку — сетевой экран антивируса, VPN с «защитой от утечек». Открывать нужно только входящие из своей сети и только эти порты. В школе — кнопка «Скопировать для администратора» в карточке.

Частые вопросы

Можно ли залить ESP8266 по Wi-Fi в самый первый раз?

Нет. Принимать прошивку по воздуху умеет только программа с ArduinoOTA, а в новой плате её нет. Первый раз пример WiFiOtaUpdate заливается по кабелю, дальше кабель не нужен — плате хватает питания.

Зачем нажимать RESET после первой заливки по кабелю?

После заливки по проводу ESP8266 помнит, что её прошивали по проводу, и первый перезапуск после заливки по воздуху может зависнуть: плата пропадёт из сети, пока её не перезапустить руками. NodeMCU и Wemos D1 mini загрузчик обычно сбрасывает сам, но один RESET после первой заливки по кабелю снимает вопрос совсем, а на модулях без автосброса (ESP-01 на переходнике) он обязателен.

Почему в мониторе порта при перезапуске непонятные символы?

Это встроенный загрузчик ESP8266: он пишет о себе на скорости 74 880 бод, а монитор слушает на 115200. Дальше программа говорит на правильной скорости, и всё читается. Это не поломка.

Плата не появляется в поиске, хотя монитор показывает адрес. Почему?

Поиск слышит широковещательные пакеты, которыми плата объявляет себя, а многие роутеры не пропускают их между Wi-Fi и кабелем, школьные сети — почти все. В меню порта выберите «Указать адрес платы…» и впишите адрес из монитора: заливке поиск не нужен.

Плата ответила, но «не смогла подключиться к компьютеру». Что мешает?

При заливке плата сама подключается к компьютеру на порт 32320–32329 (TCP), а это подключение не пускает брандмауэр Windows, сетевой экран антивируса или VPN. Брандмауэр Windows снимается кнопкой «Разрешить в брандмауэре» в карточке ошибки; в антивирусе разрешите Trema IDE входящие из своей сети, в VPN — доступ к локальной сети для входящих.

Какой размер программы можно заливать по воздуху?

На платах с 4 МБ при раскладке «4MB (FS:2MB OTA:~1019KB)», которая выбрана сразу, — до мегабайта. При «4MB (FS:3MB OTA:~512KB)» — до 512 КБ, на модулях с 1 МБ (ESP-01) — около 470 КБ. Раскладка выбирается в настройках платы, пункт Flash Size, и меняется только заливкой по кабелю.

Можно ли смотреть монитор порта по Wi-Fi?

Нет, монитор порта работает только по кабелю: по Wi-Fi плата принимает прошивку, но не передаёт свой вывод. Для монитора выберите USB-порт платы.

Дальше по теме

Заливка по Wi-Fi в Trema IDE

Платы по Wi-Fi стоят в том же меню порта, что и COM-порты, а заливка идёт той же кнопкой «Загрузить». Пароль, сверка адреса и понятные карточки ошибок — встроены.