Библиотека для автоматической проверки ОТА обновлений проекта с GitHub и других источников
ESP8266/ESP32
- Указать в прошивке текущую версию и путь к файлу с информацией
project.json
- При обновлении загрузить бинарники и повысить версию в файле информации
- Программа проверит версию и предложит обновиться
Библиотека принимает три варианта пути к файлу project.json
:
https://...json
- полностью свой путь к файлу, порт будет определён автоматически 80 или 443, если не задан вручную в конструктореuser/repo
- файл на GitHub в корне репозитория веткиmain
user/repo/main/folder/file.json
- файл на GitHub по указанному пути в указанной ветке
AutoOTA(const char* cur_ver, const char* url, uint16_t port = 0);
// текущая версия
const char* version();
// проверить обновления. Можно передать строки для записи информации
bool checkUpdate(String* version = nullptr, String* notes = nullptr, String* bin = 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, ¬es)) {
Serial.println(ver);
Serial.println(notes);
}
Файл содержит информацию о проекте и пути к файлам скомпилированной прошивки для разных платформ в формате, который используется в 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
}
]
}
]
}
Если проект может быть запущен на разных ESP-шках - можно приложить отдельный бинарник для каждой и указать пути к ним. Библиотека сама определяет, на какой платформе запущена и выберет нужный файл. Полный пример со всем семейством ESP можно посмотреть тут.
Поддерживаемые платформы и значения параметра chipFamily
:
ESP8266
ESP32
ESP32-C3
ESP32-C6
ESP32-S2
ESP32-S3
ESP32-H2
Путь должен вести к скомпилированному файлу прошивки. Его можно разместить как в самом репозитории, так и в релизах:
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
- v1.2.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
- Корректно ли работают ли встроенные примеры, в которых используются функции и конструкции, приводящие к багу в вашем коде
- Какой код загружался, какая работа от него ожидалась и как он работает в реальности
- В идеале приложить минимальный код, в котором наблюдается баг. Не полотно из тысячи строк, а минимальный код