1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
所用的是esp32-s2 idf:4.4调用esp_https_ota API进行固件升级,想获取更新进度,但不知道怎么实现,有人做过或者有思路指点一下吗?
|
|
相关推荐
2个回答
|
|
你可以通过 esp_https_ota_get_image_len_read 获取已经读取的固件大小,通过 esp_https_ota_get_image_size 获取总的固件大小。
|
|
|
|
要获取ESP32 OTA升级的进度,您可以使用以下步骤:
1. 首先,确保您已经配置了ESP-IDF环境并安装了所需的组件。在您的项目目录中,打开`CMakeLists.txt`文件,并确保已经包含了以下内容: ``` include($ENV{IDF_PATH}/tools/cmake/project.cmake) ``` 2. 在您的代码中,使用`esp_https_ota` API进行固件升级。以下是一个示例代码片段: ```c #include "esp_https_ota.h" #include "esp_log.h" #define TAG "OTA" static const char *ota_url = "https://example.com/firmware.bin"; static esp_err_t _http_event_handle(esp_http_client_event_t *evt) { switch(evt->event_id) { case HTTP_EVENT_ON_DATA: ESP_LOGI(TAG, "TCP Received %d Bytes", evt->data_len); break; default: break; } return ESP_OK; } void app_main() { esp_err_t ret; esp_http_client_config_t config = { .url = ota_url, .event_handle = _http_event_handle, .user_data = NULL, }; ret = esp_https_ota(&config); if (ret == ESP_OK) { ESP_LOGI(TAG, "OTA upgrade successful"); } else { ESP_LOGI(TAG, "OTA upgrade failed"); } } ``` 3. 在上述代码中,`_http_event_handle`函数用于处理HTTP事件。您可以在该函数中添加代码以获取更新进度。例如,您可以使用`evt->data_len`来获取已接收的数据量。然后,您可以将此值与固件文件的总大小进行比较,以计算升级进度。 4. 要获取固件文件的总大小,您可以在HTTP响应头中查找`Content-Length`字段。以下是一个示例代码片段,用于从响应头中获取固件文件的总大小: ```c static void _http_header_handle(esp_http_client_handle_t client, const char *header, const char *value) { static int content_length = -1; if (strcmp(header, "Content-Length") == 0) { content_length = atoi(value); ESP_LOGI(TAG, "Content-Length: %d", content_length); } } static esp_err_t _http_event_handle(esp_http_client_event_t *evt) { // ... 其他代码 ... switch(evt->event_id) { // ... 其他事件处理 ... case HTTP_EVENT_ON_HEADER: esp_http_client_handle_t client = evt->client; _http_header_handle(client, evt->header_key, evt->header_value); break; default: break; } return ESP_OK; } ``` 5. 在`_http_event_handle`函数中,您可以使用`evt->data_len`和`content_length`来计算升级进度。以下是一个示例代码片段: ```c static int received_bytes = 0; static esp_err_t _http_event_handle(esp_http_client_event_t *evt) { // ... 其他代码 ... switch(evt->event_id) { // ... 其他事件处理 ... case HTTP_EVENT_ON_DATA: received_bytes += evt->data_len; int progress = (received_bytes * 100) / content_length; ESP_LOGI(TAG, "Progress: %d%%", progress); break; default: break; } return ESP_OK; } ``` 通过以上步骤,您可以在ESP32 OTA升级过程中获取更新进度。请注意,这只是一个基本示例,您可以根据您的具体需求进行调整和优化。 |
|
|
|
只有小组成员才能发言,加入小组>>
358 浏览 0 评论
1202 浏览 1 评论
590浏览 6评论
485浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
468浏览 5评论
467浏览 4评论
445浏览 4评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-30 20:09 , Processed in 0.898797 second(s), Total 82, Slave 65 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号