給你的 ESP32 進行空中升級


本文是對 ESP-IDF 的 ota 示例的翻譯

【簡化的 OTA Demo】

本示例用於演示對固件空中升級的流程。

本示例是一個簡化版的演示程序,對於實際的產品,你應當使用安全協議,例如 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 描述了真個工作流程:

OTA Workflow diagram

【Step 1: 連接到 AP】

將你的 PC 連接到你將會在 ESP32 上面使用的同一個 AP。

【Step 2: 運行 HTTP 服務器】

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.

【Step 3: 編譯 OTA 示例】

回到 OTA 示例目錄,輸入命令 make menuconfig 對 OTA 示例進行配置。在子菜單 “Example Configuration” 下面,詳細填寫如下信息:

  • WiFi SSID & Password
  • “HTTP Server” 的 IP 地址,即你的 PC 的 IP 地址
  • HTTP 端口號

保存你的改動,然后輸入 make 命令來編譯該示例。

【Step 4: 燒寫 OTA 示例】

在燒寫時,需要先用目標 erase_flash 來擦除整個 flash(這會刪除之前在 ota_data 分區留下的所有數據),然后通過串口燒寫工廠進行:

make erase_flash flash

make erase_flash flash 表示 “擦除所有的東西,然后開始燒寫”。make flash 只會擦除需要重寫的那部分 flash。

【Step 5: 運行 OTA 示例】

示例程序啟動后,它會打印 “ota: Starting OTA example…”,然后:

  1. 使用所配置的 SSID 和密碼連接 AP。
  2. 連接到 HTTP 服務器並下載新的鏡像。
  3. 將鏡像寫到 flash 中,並進行配置,讓板子下次從這個鏡像啟動。
  4. Reboot

【疑難雜症】

  • 檢查你的 PC 是否能 ping 通 ESP32 的 IP,檢查配置菜單中 IP、AP 以及其它配置是否正確。
  • 檢查是否有防火牆阻止訪問你的 PC。
  • 通過瀏覽網址 http://127.0.0.1/ 檢查是否可以看到配置文件(默認是 hello-world.bin)
  • 如果你還有其它 PC 或手機,可以試試能否看到該文件。

【錯誤 “ota_begin error err=0x104”】

如果你看到這個錯誤,請檢查你的分區表,查看所配置的 flash 大小是否足夠。默認的 “two OTA slots” 分區表僅能在 4MB 的 flash 上工作。如果你的 flash 小於 4 MB,則需要創建一個自定義的分區表 CSV(查看 components/partition_table)並在配置菜單中對其進行配置。

如果改變了分區表的布局,則在這兩個步驟之間通常還需要運行 “make erase_flash”。

【產品的實現】

如果想在產品中使用這個示例,需要考慮:

  • 使用加密通信協議,例如 HTTPS。
  • 初始超時或者燒寫過程中的 WiFi 斷開的情形

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com