Skip to content

Библиотека для автоматической проверки ОТА обновлений проекта с GitHub и других источников

License

Notifications You must be signed in to change notification settings

GyverLibs/AutoOTA

Repository files navigation

latest PIO Foo Foo Foo

Foo

AutoOTA

Библиотека для автоматической проверки ОТА обновлений проекта с GitHub и других источников

Совместимость

ESP8266/ESP32

Содержание

Использование

  • Указать в прошивке текущую версию и путь к файлу с информацией project.json
  • При обновлении загрузить бинарники и повысить версию в файле информации
  • Программа проверит версию и предложит обновиться

Библиотека задумана для обновления проектов с GitHub, поэтому настройки по умолчанию для него. Можно обновляться и со своего домена, но хост где хранится файл должен быть тот же, где хранится бинарник, в библиотеке предусмотрена только одна настройка хоста и порта.

AutoOTA(const char* cur_ver, const char* path, const char* host = "raw.githubusercontent.com", uint16_t port = 443);

// текущая версия
const char* version();

// проверить обновления. Можно передать строки для записи информации
bool checkUpdate(String* version = nullptr, String* notes = nullptr);

// есть обновление. Вызывать после проверки. Само сбросится в false
bool hasUpdate();

// обновить прошивку из loop
void update();

// обновить прошивку сейчас и перезагрузить чип
bool updateNow();

// тикер, вызывать в loop. Вернёт true при попытке обновления
bool tick();

// есть ошибка
bool hasError();

// прочитать ошибку
Error getError();

Примеры

Локальный объект, обновление сразу

// AutoOTA ota("1.0", "GyverLibs/GyverHub-example"); // если файл лежит в корне репозитория ветки main

AutoOTA ota("1.0", "GyverLibs/GyverHub-example/main/project.json");
if (ota.checkUpdate()) {
    ota.updateNow();
}

Обновление из loop

// AutoOTA ota("1.0", "GyverLibs/GyverHub-example"); // если файл лежит в корне репозитория ветки main

AutoOTA ota("1.0", "GyverLibs/GyverHub-example/main/project.json");

void setup() {
    if (ota.checkUpdate()) {
        ota.update();
    }
}

void loop() {
    ota.tick();
}

Получение инфо об обновлении

String ver, notes;
if (ota.checkUpdate(&ver, &notes)) {
    Serial.println(ver);
    Serial.println(notes);
}

Файл project.json

Файл содержит информацию о проекте и пути к файлам скомпилированной прошивки для разных платформ в формате, который используется в GyverHub и ESPHome:

{
  "name": "Название проекта",
  "about": "Краткое описание проекта",
  "version": "1.0",
  "notes": "Комментарии к обновлению",
  "builds": [
    {
      "chipFamily": "ESP8266",
      "parts": [
        {
          "path": "https://raw.githubusercontent.com/GyverLibs/GyverHub-example/main/bin/firmware.bin",
          "offset": 0
        }
      ]
    }
  ]
}

Массив builds

Если проект может быть запущен на разных ESP-шках - можно приложить отдельный бинарник для каждой и указать пути к ним. Библиотека сама определяет, на какой платформе запущена и выберет нужный файл. Полный пример со всем семейством ESP можно посмотреть тут.

Параметр chipFamily

Поддерживаемые платформы и значения параметра chipFamily:

  • ESP8266
  • ESP32
  • ESP32-C3
  • ESP32-C6
  • ESP32-S2
  • ESP32-S3
  • ESP32-H2

Путь path

Путь должен вести к скомпилированному файлу прошивки. Его можно разместить как в самом репозитории, так и в релизах:

В репозитории

https://raw.githubusercontent.com/<аккаунт>/<проект>/main/<путь от корня репозитория>

Примеры:

  • bin
    • firmware.bin
    • esp8266
      • firmware.bin
    • esp32
      • firmware.bin
https://raw.githubusercontent.com/GyverLibs/GyverHub-example/main/bin/firmware.bin
https://raw.githubusercontent.com/GyverLibs/GyverHub-example/main/bin/esp8266/firmware.bin
https://raw.githubusercontent.com/GyverLibs/GyverHub-example/main/bin/esp32/firmware.bin

В релизах

https://github.com/<аккаунт>/<проект>/releases/latest/download/<файл>

Пример:

https://github.com/GyverLibs/GyverHub-example/releases/latest/download/firmware.bin

Версии

  • v1.0

Установка

  • Библиотеку можно найти по названию AutoOTA и установить через менеджер библиотек в:
    • Arduino IDE
    • Arduino IDE v2
    • PlatformIO
  • Скачать библиотеку .zip архивом для ручной установки:
    • Распаковать и положить в C:\Program Files (x86)\Arduino\libraries (Windows x64)
    • Распаковать и положить в C:\Program Files\Arduino\libraries (Windows x32)
    • Распаковать и положить в Документы/Arduino/libraries/
    • (Arduino IDE) автоматическая установка из .zip: Скетч/Подключить библиотеку/Добавить .ZIP библиотеку… и указать скачанный архив
  • Читай более подробную инструкцию по установке библиотек здесь

Обновление

  • Рекомендую всегда обновлять библиотеку: в новых версиях исправляются ошибки и баги, а также проводится оптимизация и добавляются новые фичи
  • Через менеджер библиотек IDE: найти библиотеку как при установке и нажать "Обновить"
  • Вручную: удалить папку со старой версией, а затем положить на её место новую. "Замену" делать нельзя: иногда в новых версиях удаляются файлы, которые останутся при замене и могут привести к ошибкам!

Баги и обратная связь

При нахождении багов создавайте Issue, а лучше сразу пишите на почту alex@alexgyver.ru
Библиотека открыта для доработки и ваших Pull Request'ов!

При сообщении о багах или некорректной работе библиотеки нужно обязательно указывать:

  • Версия библиотеки
  • Какой используется МК
  • Версия SDK (для ESP)
  • Версия Arduino IDE
  • Корректно ли работают ли встроенные примеры, в которых используются функции и конструкции, приводящие к багу в вашем коде
  • Какой код загружался, какая работа от него ожидалась и как он работает в реальности
  • В идеале приложить минимальный код, в котором наблюдается баг. Не полотно из тысячи строк, а минимальный код

About

Библиотека для автоматической проверки ОТА обновлений проекта с GitHub и других источников

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages