本文是對 ESP-IDF 的 ota 示例的翻譯
本示例用於演示對固件空中升級的流程。
本示例是一個簡化版的演示程序,對於實際的產品,你應當使用安全協議,例如 HTTPs。
運行在 ESP32 上面的應用程序可以通過下載一個新的鏡像文件並將其存儲到 flash 上面來進行更新。
在這個例子中,ESP32 在 flash 上面有三個鏡像:工廠、OTA_0、OTA_1,它們每個鏡像都是一個子包含的分區。OTA 鏡像分區的數量由分區表布局決定。
使用命令 make flash
通過串口燒寫本示例可以實現更新工廠應用程序鏡像的目的。在第一次啟動時,bootloader 會加載工廠 app 鏡像,然后執行 OTA 更新。更新時會從 http 服務器下載新的鏡像,並將它保存到 OTA_0 分區。此時,示例代碼會更新 ota_data 分區,表示有新的應用程序分區,然后復位。復位后,bootloader 會讀取 ota_data,並判斷出有新的 OTA 鏡像,然后運行它。
框圖 OTA_workflow.png 描述了真個工作流程:
將你的 PC 連接到你將會在 ESP32 上面使用的同一個 AP。
Python 有一個內置的 HTTP 服務器,我們這里可以直接使用它。
我們將會使用示例 get-started/hello_world
作為需要更新的固件。
打開一個終端,輸入如下的命令來編譯示例並啟動服務器:
cd $IDF_PATH/examples/get-started/hello_world
make
cd build
python -m SimpleHTTPServer 8070
服務器運行后,構建目錄的內容可以通過網址 http://localhost:8070/ 瀏覽到。
NB: 在某些系統中,命令可能是 python2 -m SimpleHTTPServer
。
NB: 你可能已經注意到,用於更新的 “hello world” 沒有任何特殊之處,這是因為由 esp-idf 編譯的任何 .bin 應用程序都可以作為 OTA 的應用程序。唯一的區別是它是會被寫到工廠分區還是 OTA 分區。
如果你的防火牆阻止了對端口 8070 的訪問,請在本示例運行期間打開它。
If you have any firewall software running that will block incoming access to port 8070, configure it to allow access while running the example.
回到 OTA 示例目錄,輸入命令 make menuconfig
對 OTA 示例進行配置。在子菜單 “Example Configuration” 下面,詳細填寫如下信息:
保存你的改動,然后輸入 make
命令來編譯該示例。
在燒寫時,需要先用目標 erase_flash
來擦除整個 flash(這會刪除之前在 ota_data 分區留下的所有數據),然后通過串口燒寫工廠進行:
make erase_flash flash
make erase_flash flash
表示 “擦除所有的東西,然后開始燒寫”。make flash
只會擦除需要重寫的那部分 flash。
示例程序啟動后,它會打印 “ota: Starting OTA example…”,然后:
如果你看到這個錯誤,請檢查你的分區表,查看所配置的 flash 大小是否足夠。默認的 “two OTA slots” 分區表僅能在 4MB 的 flash 上工作。如果你的 flash 小於 4 MB,則需要創建一個自定義的分區表 CSV(查看 components/partition_table)並在配置菜單中對其進行配置。
如果改變了分區表的布局,則在這兩個步驟之間通常還需要運行 “make erase_flash”。
如果想在產品中使用這個示例,需要考慮:
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。