Skip to content

Сборка и прошивка проекта

Emil Muratov edited this page May 13, 2024 · 3 revisions

Бинарные прошивки

Проект можно прошить в чистую плату используя готовые сборки со страницы выпусков. Бинарные образы подготавливаются и прикрепеляются к выпускам начиная с v3.6.0. В списке Assets можно нати архивы factory_images_XX.zip и firmware_images_v3.6.0.zip. Factory - полный образ прошивки готовый для заливки в чистую плату, содержит в себе полный набор компонентов включая образ файловой системы с веб-ресурсами. Firmware - образы для обновления предыдущей версии прошивки, пригодные для заливки по воздуху через WebUI (OTA).

Прошивка через Flash Download Tool

  • Скачайте Flash Download Tool
  • Выберите factory файл в соответствие со своей платой, тип чипа и размер флеш-памяти.
  • Залейте образ начиная с адреса 0x00.
  • Параметры прошивки:
    • SPI speed 40 MHz
    • SPI mode: DIO
    • Flash size: "your flash size"
    • upload speed: 460800

Прошивка через esptool

Выбрать файл под свой чип/размер памяти, поменять аргументы в команде при необходимости. 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 и т.п.

После того как вы скопировали проект (в виде zip архива или через git clone), при необходимости можно в папке include скопировать файл user_config.h.default под новым именем user_config.h и в нем настроить некоторые параметры сборки под свои потребности.

Настройка среды сборки для Windows:

Для сборки проекта понадобится установить в систему Git, Python, Platformio. Сделать это проще всего с помощью скрипта установки от (@andy040670). Скачайте install.zip в любую доступную папку, распакуйте и запустите Install.bat, скрипт сам скачает и запустит установку необходимых пакетов Git, Python, Platformio. После установки пакетов можно либо допольнительно установить IDE Visual Studio Code и собирать проект в ней, либо воспользоваться [Build-скриптом](#Установка и сборка проекта с помощью Билд-скрипта для Windows 8-11).

Установка IDE Visual Studio Code:

Для сборки/разработки проекта понадобится следующее:

  • Установить IDE Visual Studio Code, и в качестве плагина к ней установить Platformio. О том как это сделать можно найти массу роликов на youtube, например этот.

Сборка

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

  • Открываем папку проекта в 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 для сборки проекта

Например у вас есть несколько ламп и под каждую нужно собирать проект с разными опциями - добавить/убрать ненужный функционал, иметь разные параметры в файле user_config.h Создаёте в каталоге include/ несколько файлов с именами по шаблону user_cfg*.h (напр. user_cfg1.h, user_cfg_lamp1.h и т.д.), в файлах прописываете необходимые параметры. О том как подключить разные файлы к сборке профиля см. ниже

Пользовательские профили сборки для PlatformIO

В проекте можно создать свой профиль для 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.

Обновление и прошивка по воздуху (OTA update)

Последующее обновление ПО можно осуществлять по воздуху, без подключения лампы кабелем. Можно обновить проект, собрать прошивку и залить полученный файл через форму обновления открыв лампу в браузере (напр. 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 8-11:

Для пользователей Windows OS нежелающих заниматься самостоятельной полной установкой VSCode и зависимых компонентов можно воспользоваться builder-скриптом. Билдер был изначально написан поользоватлем @kostyamat (за что ему спасибо), позже адаптирован под форк текущей комадой (@andy040670).

Билдер-скрипт при запуске на чистой системе последовательно предложит шаги по установки Python for Windows, git, Platformio, клонирование репозитория и сборку требуемого варианта прошивки. Впоследствии этим же скриптом можно легко обновлять изменения в репозитории и собирать обновлённую прошивку.

Для начала работы нужно скачать архив проекта в Гитхаб в виде zip-файла, распаковать его во временную директорию и запустить скрипт. Скрипт предложит вам заново склонировать репозиторий в другой каталог на произвольный диск в системе. После установки времненную копию можно удалить.

Cобрать прошивку и записать её в контролер по USB:

Запускаем Builder.bat. Поочерёдно вводим команды:

  • E - сотрёт флеш, рекомендуется, если в контроллере уже есть какая ни будь прошивка.
  • 1 - Обновит ваш репо до актуального состояния из гита. Изменённые вами файлы затронуты не будут.
  • 5 - Соберёт прошивку и зальёт её в контроллер.
  • F - Соберёт ФС и зальёт её в контроллер.

Собрать прошивку и обновить её по воздуху на уже рабочей лампе/панели:

Поочерёдно вводим команды:

  • 1 - Обновит ваш репо до актуального состояния из гита. Изменённые вами файлы затронуты не будут.
  • 4 - Соберёт прошивку, прошивка будет находиться в папке "out_bin".
  • b - Соберёт ФС, образ ФС будет находиться в папке "out_bin".

Захдим в веб лампы/панели, в настройках жмём "Обновление firmware", выбираем папку "out_bin" и поочерёдно шьём оба файла. Можно собрать прошить только ФС, если были внесены какие ни будь изменения в папке "data".

Команды:

  • 3 - обновит и перезапишет ВСЕ файлы с гита, файл user_config.h затронут не будет.
  • С - удалит временную папки ".pio" и "out_bin". Рекомендуется удалять перед новой сборкой после обновления репозитория дабы избежать ошибок компиляции.

Остальные команды служебные, используются редко, по необходимости и смысл их понятен по описанию.

Builder script

Note

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