ESP32クイックスタート(13):OTAサンプルコードの簡単な分析

このブログは、主にesp-idfでのotaの実装を記録しています。関連するAPIリファレンスについては、ESP HTTPSOTAを参照してください

1.esp_http_client_config_t介绍

simple_ota例esp_http_client_config_t以下:

esp_http_client_config_t config = {
    
    
    .url = CONFIG_EXAMPLE_FIRMWARE_UPGRADE_URL,
    .cert_pem = (char *)server_cert_pem_start,
    .event_handler = _http_event_handler,
};

この構成は次のパラメーターを定義していることがわかります。

  • url ota.binファイルを配置するHTTPURLを設定します
  • cert_pem SSLサーバー証明書を設定する
  • event_handler HTTPイベントハンドラーを設定します

otaは、.timeout_msota受信タイムアウト(デフォルトでは5000ミリ秒のidf)を設定する機能も備えている場合があります。構成url可能なmake menuconfig -> Example Configuration -> firmware upgrade url endpoint構成であり、Wi-FiSSIDおよびPWDはmake menuconfig -> Example Connection Configuration構成できます。

注:SSLチェックをスキップするには、config.skip_cert_common_name_checkをtrueに設定できます。

2.OTAメソッドの概要

方法1:サーバー情報などのmenuconfig構成urlのみ、このAPIca_cert_pemの使用はesp_https_ota()otaアップグレードになります。

注:このAPIが正常に実行された後、ソフトウェアをリセットするには、esp_restart()をすぐに実行する必要があります。

方法2:次のAPIを順番に使用します

  • esp_https_ota_begin(esp_https_ota_config_t *ota_config, esp_https_ota_handle_t *handle) HTTPS OTAファームウェアのアップグレードを開始し、環境を初期化し、HTTPS接続を確立します
  • esp_https_ota_perform(esp_https_ota_handle_thttps_ota_handle) HTTPデータストリームからデータを読み取り、OTAに書き込みます
  • esp_https_ota_finish(esp_https_ota_handle_thttps_ota_handle) HTTPS OTAファームウェアのアップグレードをクリアし、HTTPS接続を閉じます

注:esp_https_ota_finish(esp_https_ota_handle_thttps_ota_handle)の前に、esp_https_ota_is_complete_data_received(esp_https_ota_handle_thttps_ota_handle)を使用して、すべてのデータが受信されたかどうかを確認できます。

3.CA証明書をインポートする方法

CMakeLists.txtを開くと、次のコンテンツが表示されます。

# Embed the server root certificate into the final binary
idf_build_get_property(project_dir PROJECT_DIR)
idf_component_register(SRCS "simple_ota_example.c"
                    INCLUDE_DIRS "."
                    EMBED_TXTFILES ${
    
    project_dir}/server_certs/ca_cert.pem)

この時点で、${project_dir}/server_certs/ca_cert.pemディレクトリ内のCA証明書は次のようになります。次に、次のコードを使用してCA証明書をインポートして使用します。

extern const uint8_t server_cert_pem_start[] asm("_binary_ca_cert_pem_start");
extern const uint8_t server_cert_pem_end[] asm("_binary_ca_cert_pem_end");

void app_main(void)
{
    
    
    ...
    esp_http_client_config_t config = {
    
    
        .url = CONFIG_EXAMPLE_FIRMWARE_UPGRADE_URL,
        .cert_pem = (char *)server_cert_pem_start,
        .event_handler = _http_event_handler,
    };
    ...
}

おすすめ

転載: blog.csdn.net/zztiger123/article/details/106408793