ESP32 · Wi-Fi · Trema IDE

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

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

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

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

  • Плата на ESP32 и кабель USB — один раз, для самой первой заливки. Подходят обычные ESP32 и C3, S3, C6: заливка по воздуху входит в их пакет плат, библиотеки ставить не нужно.
  • Сеть Wi-Fi на 2,4 ГГц. На 5 ГГц ESP32 не подключается.
  • Компьютер в той же сети — по кабелю или по Wi-Fi, неважно. Важно, чтобы роутер пускал устройства друг к другу: гостевые сети и сети со входом по логину этого не делают.
  • Trema IDE и установленный пакет плат ESP32 (раздел «Платы»).

Шаг 1. Откройте готовый пример

Выберите свою плату ESP32 вверху окна, откройте раздел «Примеры» и найдите «WiFiOtaUpdate» — он лежит в группе «09. Полезное», быстрее всего набрать в поиске ota. Нажмите на пример — откроется проект-копия, исходный пример не изменится.

Раздел «Примеры» в Trema IDE: по запросу ota найден пример WiFiOtaUpdate в группе «09. Полезное»
Пример WiFiOtaUpdate: в поиске примеров достаточно набрать «ota».

Шаг 2. Впишите сеть и пароль заливки

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

const char WIFI_SSID[] = "имя вашей сети";
const char WIFI_PASS[] = "пароль от сети";
const char OTA_NAME[] = "";              // пусто — имя по заводскому номеру
const char OTA_PASS[] = "pridumayte-svoy";
  • WIFI_SSID и WIFI_PASS — имя и пароль вашей сети Wi-Fi.
  • OTA_NAME можно не трогать: плата сама возьмёт имя по своему заводскому номеру, например plata-895304. У пятнадцати одинаковых плат в классе не будет одинаковых имён.
  • OTA_PASS — пароль заливки, придумайте свой. Без него перепрошить вашу плату сможет любой, кто подключён к той же сети. Это не пароль от Wi-Fi и не стоит делать его таким же.

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

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

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

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

Монитор порта Trema IDE на 115200 бод: плата пишет «Готов принимать прошивку по воздуху» и «Имя в сети: plata-895304, Адрес: 192.168.31.141»
После перезапуска: точки — плата подключается к Wi-Fi, затем имя и адрес.

Если вместо адреса появляется «Не могу подключиться к сети» — плата скажет и причину: сеть не найдена (проверьте имя и что сеть на 2,4 ГГц) или не подошёл пароль.

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

Откройте меню порта (кнопка с COM-портом вверху окна). Под обычными портами — группа «По Wi-Fi». В ней два пути:

  • «Искать платы в сети» — Trema IDE слушает сеть, и плата появляется в списке под своим именем, обычно в течение минуты.
  • «Указать адрес платы…» — впишите адрес из монитора и нажмите «Добавить». Этот путь работает всегда, даже когда роутер прячет устройства друг от друга и поиск ничего не находит.
Меню порта Trema IDE: группа «По Wi-Fi» с платой 192.168.31.141 и полем «Указать адрес платы» с кнопкой «Добавить»
Группа «По Wi-Fi»: плата с адресом и поле для нового адреса.

Выберите плату в списке — вместо COM-порта вверху окна появится её адрес со значком Wi-Fi. Кабель теперь можно отключить: плате нужно только питание.

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

Программа соберётся как обычно, а дальше Trema IDE задаст два вопроса. Первый — та ли это плата: адрес роутер может отдать и соседней, а прошивка сотрёт программу, которая сейчас по этому адресу. Сверьте адрес с монитором и нажмите «Да, это моя плата».

Окно Trema IDE «Заливка по Wi-Fi: Грузить в плату по адресу 192.168.31.141?» с кнопками «Отмена» и «Да, это моя плата»
Плату, заданную адресом, программа сверяет перед каждой заливкой.

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

Окно Trema IDE «Пароль платы 192.168.31.141» с полем для пароля и кнопкой «Залить»
Пароль заливки. Забыли — залейте по кабелю: кабель пароль не спрашивает.

Дальше полоса хода и строки «Передача по Wi-Fi» в консоли. Новая программа пишется в запасную область памяти, а старая работает, пока новая не принята целиком.

Консоль Trema IDE во время заливки по Wi-Fi: «Плата просит пароль — отвечаю», «Передача по Wi-Fi: 40%»
Передача идёт: около мегабайта по Wi-Fi — десяток секунд.
Консоль Trema IDE: «Готово: плата приняла прошивку (931 КБ) и перезапускается»
Готово: плата проверила прошивку, переключилась на неё и перезапустилась.

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

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

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

#include <WiFi.h>
#include <ArduinoOTA.h>

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

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

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

Память: какая схема нужна

Пока новая программа едет по воздуху, старая обязана работать, поэтому у ESP32 память поделена на две одинаковые области. Схема выбирается в настройках платы — кнопка с ползунками рядом с её названием, пункт Partition Scheme. Для Piranha ESP-32 и большинства плат с 4 МБ:

СхемаМесто под программуЗаливка по Wi-Fi
Default1 310 720 байт (1,25 МБ)Работает. Пример WiFiOtaUpdate занимает 72 %
Minimal SPIFFS (Large APPS with OTA)1 966 080 байт (1,9 МБ)Работает. Для больших программ, файлам остаётся мало места
No OTA (Large APP)2 097 152 байт (2 МБ)Не работает: второй области нет

Схема меняется только заливкой по кабелю: по воздуху плата её не примет. Если программа не помещается, Trema IDE скажет об этом в карточке и назовёт размеры.

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

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

Карточка Trema IDE «Плата 192.168.31.250 не отвечает по Wi-Fi» с советами и кнопкой «Подробнее на trema.ru»
Плата не отвечает: адрес неверный или плата не в той сети.
Что пишет программаЧто на самом делеЧто сделать
Поиск плату не находитПлата объявляет себя в сети особыми широковещательными пакетами, а многие роутеры не пропускают их между Wi-Fi и кабелем, школьные сети — почти всеНе ждите: «Указать адрес платы…» и впишите адрес из монитора порта. Заливке по адресу поиск не нужен
«Плата не отвечает по Wi-Fi»До платы не доходит приглашение: она выключена, в другой сети или адрес сменилсяСверьте адрес с монитором порта. Плата и компьютер должны быть в одной сети; гостевые сети и сети со входом по логину устройства друг к другу не пускают
«Заливку по Wi-Fi никто не слушает»По адресу кто-то есть, но программы с ArduinoOTA на нём нетОдин раз залейте пример WiFiOtaUpdate по кабелю. Или вы залили по воздуху скетч без трёх строк из раздела ниже — тогда тоже кабель
«Плата просит пароль» или «не приняла пароль»Пароль в окне не совпал с OTA_PASS в программе платыПроверьте раскладку и регистр. Забыли пароль — залейте по кабелю: кабель пароль не спрашивает
«Ответила, но не смогла подключиться к компьютеру»Плата приняла приглашение и сама стучится в компьютер, а его кто-то не пускает: брандмауэр Windows, сетевой экран антивируса или VPNБрандмауэр Windows — кнопка «Разрешить в брандмауэре» прямо в карточке. Антивирус (Kaspersky, Dr.Web, ESET) — разрешите Trema IDE входящие подключения из своей сети. VPN — включите в нём доступ к локальной сети для входящих
«Связь оборвалась на N %»Слабый сигнал или плата занята долгой работойНичего не сломалось: на плате осталась прежняя программа. Нажмите «Загрузить» ещё раз, лучше поближе к роутеру
«Прошивка больше места под заливку по Wi-Fi»Новая программа не помещается во вторую область памятиВ настройках платы выберите схему Minimal SPIFFS (Large APPS with OTA) и один раз залейте по кабелю
Плата видна, но прошивку не берётВ loop() долгий delay() или бесконечный цикл: ArduinoOTA.handle() не успевает вызыватьсяУберите долгие паузы из loop(), замените их проверкой millis(). Сейчас залейте по кабелю

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

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

Можно ли залить ESP32 по Wi-Fi в самый первый раз, без кабеля?

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

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

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

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

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

Нужен ли пароль заливки и где его взять?

Нужен: без него перепрошить вашу плату сможет любой в той же сети. Пароль задаёте вы сами в строке OTA_PASS примера, до первой заливки по кабелю. Trema IDE спросит его при заливке и будет помнить, пока программа открыта. Забыли — залейте по кабелю: кабель пароль не спрашивает.

Что будет, если связь оборвётся посередине?

Ничего страшного: новая программа пишется в запасную область памяти и включается, только когда принята целиком и проверена. При обрыве на плате остаётся прежняя программа, а заливку можно повторить.

Работает ли это на ESP32-C3, S3 и C6?

Да: заливка по воздуху входит в пакет плат ESP32 для всех этих чипов, а пример WiFiOtaUpdate один и тот же. Нужна только схема памяти с двумя областями под программу — у большинства плат она выбрана сразу.

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

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

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

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

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