-
Notifications
You must be signed in to change notification settings - Fork 3
Сборка и прошивка проекта
- Бинарные прошивки
- Прошивка через WebFlasher
- Прошивка через Flash Download Tool
- Как скачать/обновлять проект
- Настройка среды сборки для Windows:
- Установка IDE Visual Studio Code:
- Сборка
- Как завести несколько разных конфигурационных файлов
user_config.h
для сборки проекта - Пользовательские профили сборки для PlatformIO
- Обновление и прошивка по воздуху (OTA update)
- Установка и сборка проекта с помощью Билд-скрипта для Windows 8-11:
Проект можно прошить в чистую плату используя готовые сборки со страницы выпусков. Бинарные образы подготавливаются и прикрепеляются к выпускам начиная с v3.6.0.
В списке Assets
можно найти архивы factory_images_XX.zip
и firmware_images_v3.6.0.zip
. Factory - образ прошивки готовый для заливки в чистую плату, содержит в себе полный набор компонентов включая образ файловой системы с веб-ресурсами. Firmware - образы для обновления предыдущей версии прошивки, пригодные для заливки по воздуху через WebUI (OTA).
Самый простой способ залить прошивку это воспользоваться веб-прошивальщиком из браузера. Прошивка работает из Chrome, Opera, MS Edge. Перейдите на страницу ESPWebFlasher и следуйте описаным инструкциям.
- Скачайте Flash Download Tool
- Выберите factory файл в соответствие со своей платой, тип чипа и размер флеш-памяти.
- Залейте образ начиная с адреса 0x00.
- Параметры прошивки:
- SPI speed 40 MHz
- SPI mode: DIO
- Flash size: "your flash size"
- upload speed: 460800
Выбрать файл под свой чип/размер памяти, поменять аргументы в команде при необходимости.
esptool.py --chip esp32 write_flash --flash_mode dio --flash_freq 40m --flash_size 4MB 0x0 firmware.factory.bin
Актуальный срез проекта всегда можно скачать в виде zip-архива по ссылке, либо перейдя по ссылке последнего релиза.
Либо можно поддерживать клон репозитория и подтягивать обновления перед каждой новой сборкой.
Открываем консоль Git-bash, клонируем репозиторий в текущую папку командой git clone --depth 1 --no-single-branch https://github.com/vortigont/FireLamp_JeeUI.git
В последующем для того чтобы обновить репозиторий достаточно перейти в папку проекта и выполнить команду git pull
. Быстро переключаться между различными ветками проекта можно командами git switch master
, git switch feat
и т.п.
Для сборки проекта понадобится установить в систему Git, Python, Platformio.
Сделать это можно либо через "магазин приложений" Windows, либо скачав необходимые пакеты по ссылка выше.
Либо с помощью скрипта установки от (@andy040670).
Скачайте install.zip в любую доступную папку, распакуйте и запустите Install.bat
, скрипт сам скачает и запустит установку необходимых пакетов Git, Python, Platformio.
После установки пакетов можно либо допольнительно установить IDE Visual Studio Code и собирать проект в ней, либо воспользоваться Build-скриптом.
Note
Если после установки PlatformIO команды pio
в терминале так и не заработали, возможно, будет обходимо добавить вручную в настройки "Переменные среды Windows" следующую строчку C:\Users\ваш_профиль\.platformio\penv\Scripts
Для сборки/разработки проекта понадобится следующее:
- Установить IDE Visual Studio Code, и в качестве плагина к ней установить Platformio. О том как это сделать можно найти массу роликов на YouTube, например этот.
Проект собирается с помощью PlatformIO, сборка через ArduinoIDE не поддерживается ввиду паталогической неспособности ArduinoIDE работать с версионированными зависимостями библиотек и сборочнымы флагами.
Проблема более не актуальна начиная с platformio-core v6.1.17, патч не требуется и был удален из репозитория в #4b25240
устаревшая информация
В текущей версии ядра платформио содержится неприятный баг в коде разрешения зависимостей встроенных библиотек ардуино ядра который не позволяет корректно собрать весь проект с зависимостями. Баг заведён в апстрим platformio/platformio-core/#4940, так же предложен патч #4941, но судьба исправлений пока неизвестна. До устранения пробелемы или пока не будет найден приемлимый способ обойти проблему для сборки проекта потребуется внести исправление в установленый код PlatformIO вручную. Исправление доступное в виде патч-файла необходимо применить к файлу platformio/builder/tools/piolib.py
.
Для Linux:
cd ~
wget https://github.com/vortigont/FireLamp_JeeUI/raw/master/extra/0001-LDF-refresh-lib-dependency-after-recursive-search.patch
cd ~/.platformio/penv/lib/python3.10/site-packages/
patch -p1 < ~/0001-LDF-refresh-lib-dependency-after-recursive-search.patch
rm -f ~/0001-LDF-refresh-lib-dependency-after-recursive-search.patch
Для Windows:
найдите поиском по диску файл piolib.py
, откройте на редактирование в "блокноте", найдите поиском по тексту строку lb.search_deps_recursive(lb.get_search_files())
и добавьте после неё следующие две строки СТРОГО СОХРАНИВ форматирование и отступы:
for lb in lib_builders:
if lb in found_lbs:
lb.search_deps_recursive(lb.get_search_files())
+ # refill found libs after recursive search
+ found_lbs = [lb for lb in lib_builders if lb.is_dependent]
for lb in lib_builders:
for deplb in lb.depbuilders[:]:
if deplb not in found_lbs:
плюсиками обозначены строки которые небходимо добавить, сами "плюсики" заменить на пробел. Итог должен выглядить так:
for lb in lib_builders:
if lb in found_lbs:
lb.search_deps_recursive(lb.get_search_files())
# refill found libs after recursive search
found_lbs = [lb for lb in lib_builders if lb.is_dependent]
for lb in lib_builders:
for deplb in lb.depbuilders[:]:
if deplb not in found_lbs:
- Открываем папку проекта в VSCode
- Что бы собрать прошивку, можно воспользоваться кнопками в нижней статусной строке:
-
PlatformIO:Build
- собрать прошивку -
PlatformIO:Upload
- загрузить прошивку через USB в плату.
-
Platformio
сам скачает необходимые библиотеки для сборки проекта. Убедитесь что верно выбрали необходимый профиль сборки - платформу esp32, тип прошивки с отладкой или без.
Также можно открыть терминал с помощью клавиш Ctrl+Shit+` и воспользоваться расширенными командами для сборки проекта.
-
pio run -t upload
- собрать и записать в контроллер проект по-умолчанию под платформу esp32. Будет собрана облегченная прошивка без вывода отладочных сообщений через serial интерфейс. Рекомендуется для повседневного использования, если нет нужды отлаживать работу проекта. -
pio run -e esp32debug -t upload
- собрать и прошить версию esp32 с отладкой, будет собрана прошивка под esp32 c выводом отладочных сообщений через serial интерфейс -
pio deviсe monitor -e esp32debug
- запустить serial-монитор для просмотра сообщений, выдаваемых контроллером
Для работы лапмы нужно сформировать и залить в контроллер образ файловой системы. Выполняется это командой аналогично записи прошивки, но с параметром -t uploadfs
, к примеру
-
pio run -e esp32 -t uploadfs
- записать в контроллер образ ФС под платформу esp32
После первой прошивки дальнейшие обновления можно заливать в контроллер по воздуху. Для этого нужно зайти браузером на контроллер по URL вида http://embui-xxxx/update, где xxxx это ID контроллера, нажать на кномку 'Firmware', выбрать файл с прошивкой и загрузить его в контроллер.
Файл с прошивкой Platformio
кладет в подпапки проекта:
-
.pio/build/esp32/firmware.bin
- версия под esp32 -
.pio/build/esp32debug/firmware.bin
- версия под esp32 с отладкой
Для поиска проблем и работы на ошибками можно собрать проект с выводом подробных отладочных сообщений.
Собираем прошивку с профилем esp32debug (в консоли команада pio run -e esp32debug
) и прошиваем. Теперь в последовательный порт будет выводится подробная информация о работе программы и отладочные сообщения при падаении контроллера. В консоли монитор включается командой pio device monitor -e esp32debug
. О том как получить логи в среде VSCode можно почитать на форуме
Например у вас есть несколько ламп и под каждую нужно собирать проект с разными опциями - добавить/убрать ненужный функционал, иметь разные параметры в файле user_config.h
Создаёте в каталоге include/
несколько файлов с именами по шаблону user_cfg*.h
(напр. user_cfg1.h
, user_cfg_lamp1.h
и т.д.), в файлах прописываете необходимые параметры.
О том как подключить разные файлы к сборке профиля см. ниже
В проекте можно создать свой профиль для PlatformIO на основе имеющихся и переопределить некторые параметры или переменные сборки.
Для этого нужно создать в корне проекта файл с именем user_<something>.ini
, например user_profile.ini
. В файле нужно создать пользовательскую секцию с необходимыми переопредленными параметрами для сборки.
При выполнении команд сборки платформио будет искать эти файлы и подключать к списку доступных профилей данные этих файлов.
Пример:
Файл user_profile.ini
[env:mylamp]
extends = env:esp32
; переопределяем свою плату на которой собрана лампа (список доступных плат - https://docs.platformio.org/en/latest/boards/index.html#espressif-32)
board = esp32cam
build_flags =
${flags.build_flags}
; включаем дебаг для проекта
-DLAMP_DEBUG_LEVEL=4
; используем свой конфигурационный файл отличный от `user_config.h`
-DCUSTOM_CFG='"user_cfg_my.h"'
[env:mynewlamp]
extends = env:esp32
build_flags =
${flags.build_flags}
; включаем дебаг для проекта
DLAMP_DEBUG_LEVEL=4
; включаем дебаг для EmbUI
-DEMBUI_DEBUG_LEVEL=3
; используем свой конфигурационный файл отличный от `user_config.h` (если требуется)
;-DCUSTOM_CFG='"user_cfg_mynewlamp.h"'
Теперь можно собирать свои профили проекта либо через кнопки в VSCode либо командами pio run -e mylamp
, pio run -e mynewlamp
.
Последующее обновление ПО можно осуществлять по воздуху, без подключения лампы кабелем. Можно обновить проект, собрать прошивку и залить полученный файл через форму обновления открыв лампу в браузере (напр. http://firelamp/upload), где firelamp это имя хоста или ip-адресс контроллера в сети. Так же можно воспользоваться скриптом для платформио, который автоматически зальет прошивку в лампу. Для этого нужно создать свой профиль сборки проекта и указать в нем адрес доступа к лампе.
- Создайте в каталоге проекта файл
user_profile.ini
- скопируйте в файл пример секции
; OTA Upload example
из файлаplatformio.ini
- раскомментируйте параметры, убрав
;
в начале строк - замените в параметре
upload_port = http://firelamp/update
имя устройства лампы на свое или на ip адрес - соберите и загрузите прошивку в лампу командой
pio run -e ota -t upload
Для пользователей Windows OS нежелающих заниматься самостоятельной полной установкой VSCode и зависимых компонентов можно воспользоваться builder-скриптом. Билдер был изначально написан поользоватлем @kostyamat (за что ему спасибо), позже адаптирован под форк текущей комадой (@andy040670).
Билдер-скрипт при запуске на чистой системе последовательно предложит шаги по установки Python for Windows, git, Platformio, клонирование репозитория и сборку требуемого варианта прошивки. Впоследствии этим же скриптом можно легко обновлять изменения в репозитории и собирать обновлённую прошивку.
Для начала работы нужно скачать архив проекта в Гитхаб в виде zip-файла, распаковать его во временную директорию и запустить скрипт. Скрипт предложит вам заново склонировать репозиторий в другой каталог на произвольный диск в системе. После установки времненную копию можно удалить.
Запускаем Builder.bat
.
Поочерёдно вводим команды:
-
E
- сотрёт флеш, рекомендуется, если в контроллере уже есть какая ни будь прошивка. -
1
- Обновит ваш репо до актуального состояния из гита. Изменённые вами файлы затронуты не будут. -
5
- Соберёт прошивку и зальёт её в контроллер. -
F
- Соберёт ФС и зальёт её в контроллер.
Поочерёдно вводим команды:
-
1
- Обновит ваш репо до актуального состояния из гита. Изменённые вами файлы затронуты не будут. -
4
- Соберёт прошивку, прошивка будет находиться в папке "out_bin". -
b
- Соберёт ФС, образ ФС будет находиться в папке "out_bin".
Захдим в веб лампы/панели, в настройках жмём "Обновление firmware", выбираем папку "out_bin" и поочерёдно шьём оба файла. Можно собрать прошить только ФС, если были внесены какие ни будь изменения в папке "data".
-
3
- обновит и перезапишет ВСЕ файлы с гита, файл user_config.h затронут не будет. -
С
- удалит временную папки ".pio" и "out_bin". Рекомендуется удалять перед новой сборкой после обновления репозитория дабы избежать ошибок компиляции.
Остальные команды служебные, используются редко, по необходимости и смысл их понятен по описанию.

Note
Скрипт билдера поддерживается по остаточному принципу. В случае проблем со сриптом рекоммендуется использовать сборку через bash-git консоль и команды платформио.