ESPHome już teraz buduje oprogramowanie dla płytek z nRF52840, ale aktualizacja przez Bluetooth wymagała programu rozruchowego MCUboot i komponentu zephyr_mcumgr. Wiele popularnych płytek, takich jak nice!nano, Adafruit ItsyBitsy nRF52840 czy Feather nRF52840, ma fabrycznie program rozruchowy Adafruit, więc nowe oprogramowanie trzeba było do nich wgrywać przez USB. 25 października 2026 do kodu ESPHome trafiła nowa platforma OTA, adafruit_ble, która wysyła do nich aktualizacje przez Bluetooth poleceniem esphome upload. Zmiana jest w gałęzi rozwojowej, więc powinna trafić do ESPHome 2026.11.
Konfiguracja
Przykład z opisu zmiany ustawia bootloader: adafruit w sekcji nrf52, dodaje zephyr_ble_server z automatyzacją on_numeric_comparison_request, która akceptuje parowanie, i włącza ota z platform: adafruit_ble. Parowanie nie jest obowiązkowe, ale warto je włączyć. Bez niego aktualizację może rozpocząć dowolne urządzenie w pobliżu, o czym kompilacja ostrzega. Z parowaniem może to zrobić tylko sparowany komputer. Platforma wymaga środowiska Zephyr, komponentu zephyr_ble_server i jednej z odmian programu rozruchowego Adafruit. Przy innym programie rozruchowym konfiguracja nie przejdzie sprawdzenia, a ESPHome wyjaśni dlaczego.
Aktualizację uruchamia się poleceniem esphome upload --device BLE albo podając adres Bluetooth płytki. ESPHome sam wybiera metodę na podstawie konfiguracji: DFU Adafruit, gdy ustawiono adafruit_ble, a w przeciwnym razie MCUmgr.
Jak przebiega aktualizacja
Program rozruchowy Adafruit korzysta ze starszego protokołu DFU firmy Nordic i udostępnia usługę aktualizacji tylko w trybie DFU. Aktualizacja ma więc dwa etapy. Aplikacja na płytce udostępnia niewielką charakterystykę Bluetooth, do której można tylko zapisywać. Wpisanie do niej DFU uruchamia płytkę ponownie w programie rozruchowym. ESPHome szuka go wtedy pod adresem płytki powiększonym o jeden i wysyła paczkę z oprogramowaniem. Nowe oprogramowanie trafia wyłącznie na płytkę, którą poproszono o restart. Na macOS, który ukrywa adresy Bluetooth, ESPHome przyjmuje program rozruchowy tylko wtedy, gdy po restarcie pojawi się dokładnie jedno nowe urządzenie w trybie DFU. Inne takie urządzenie w pobliżu trafia do komunikatu o błędzie i nigdy nie dostaje nowego oprogramowania. Po zerwaniu połączenia albo braku potwierdzenia ESPHome ponawia przesyłanie, najwyżej trzy razy.
Ponieważ aktualizację wykonuje program rozruchowy, gdy aplikacja jest już wyłączona, wyzwalacze on_progress, on_end, on_error i on_abort są odrzucane. Działają tylko on_begin i on_state_change. Powrót do poprzedniej wersji oprogramowania wymaga MCUboot, więc przy samym adafruit_ble jest domyślnie wyłączony.
Ratunek w trybie awaryjnym
Jedna zmiana dotyczy każdej konfiguracji z zephyr_ble_server, także płytek z MCUmgr. Bluetooth uruchamia się teraz również w trybie awaryjnym, więc płytkę, która utknęła w pętli restartów, wciąż da się zaktualizować bezprzewodowo. W trybie awaryjnym automatyzacje użytkownika nie działają, dlatego nowe parowania są odrzucane i połączyć się mogą tylko wcześniej sparowane komputery.
Autor sprawdził aktualizację na nice!nano v1, a z macOS także na ItsyBitsy nRF52840 Express, przesyłając 215 kB. Kod protokołu przeniesiono z projektu nrf_dfu_py. Jest jeden haczyk: płytkę z oprogramowaniem obsługującym tylko MCUmgr trzeba raz zaktualizować starą metodą, zanim zadziała aktualizacja przez Bluetooth z programem rozruchowym Adafruit. Dokumentacja czeka jeszcze na scalenie.