このブログは、主に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_ms
ota受信タイムアウト(デフォルトでは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,
};
...
}