基于ESP32 IDF的WebServer实现以及OTA固件升级实现记录(二)

        续上文大体描述了官网webserver demo的运行步骤运行效果以及部分配置需要注意的外开始继续大体讲解下官网webserver的代码实现,方便接下来可以基于官方demo代码进行改造成自己的webserver。

        官方的demo如下

           整体还是比较简洁,一个main用来挂载分区,启动httpserver,即作为webserver用,代码的主要内容基本不用改可以直接用。另一个rest_server.c就是主要的restful api的各接口的业务代码实现。

esp_err_t start_rest_server(const char *base_path)
{
    REST_CHECK(base_path, "wrong base path", err);
    rest_server_context_t *rest_context = calloc(1, sizeof(rest_server_context_t));
    REST_CHECK(rest_context, "No memory for rest context", err);
    strlcpy(rest_context->base_path, base_path, sizeof(rest_context->base_path));

    httpd_handle_t server = NULL;
    httpd_config_t config = HTTPD_DEFAULT_CONFIG();
    config.uri_match_fn = httpd_uri_match_wildcard;

    ESP_LOGI(REST_TAG, "Starting HTTP Server");
    REST_CHECK(httpd_start(&server, &config) == ESP_OK, "Start server failed", err_start);

    /* URI handler for fetching system info */
    httpd_uri_t system_info_get_uri = {
        .uri = "/api/v1/system/info",
        .method = HTTP_GET,
        .handler = system_info_get_handler,
        .user_ctx = rest_context
    };
    httpd_register_uri_handler(server, &system_info_get_uri);

    /* URI handler for fetching temperature data */
    httpd_uri_t temperature_data_get_uri = {
        .uri = "/api/v1/temp/raw",
      
### ESP32 使用 IDF 进行 Web OTA 更新教程 对于希望在ESP32实现通过Web方式进行OTA(Over-The-Air)固件更新的应用开发者而言,Espressif IoT Development Framework (ESP-IDF) 提供了一套完整的解决方案来简化这一过程[^1]。 #### 准备工作 确保已安装并配置好ESP-IDF环境,并且能够正常编译和上传代码到ESP32设备。还需要准备一台运行HTTP服务器的机器用于托管新的进制文件(.bin),该服务器可以是本地网络内的任意计算机或是互联网上的远程主机。 #### 修改项目配置 进入项目的`main`目录下找到`CMakeLists.txt`文件,在其中加入如下定义以便启用OTA功能: ```cmake set(EXTRA_COMPONENT_DIRS ${PROJECT_PATH}/components/ota) ``` 接着创建一个新的组件名为`ota`,并将下面这段代码保存为`component.mk`: ```makefile COMPONENT_ADD_INCLUDEDIRS := . COMPONENT_SRCDIRS := . ifdef CONFIG_OTA_HTTPS_SUPPORT COMPONENT_PRIV_LIBRARIES += https_server endif ``` 再新建一个源码文件叫做`ota.c`, 添加以下内容作为基础框架: ```c #include "esp_http_client.h" #include "esp_https_ota.h" void start_webserver(void){ // 初始化web server... } static esp_err_t http_event_handler(esp_http_client_event_t *evt){ switch(evt->event_id){ case HTTP_EVENT_ERROR: break; case HTTP_EVENT_ON_CONNECTED: break; default: break; } return ESP_OK; } void ota_example_task(void *pvParameter){ const char *url = "http://yourdomain.com/firmware.bin"; esp_http_client_config_t config = { .url = url, .cert_pem = NULL, /* 如果使用HTTPS则需提供证书 */ .event_handler = http_event_handler, }; esp_err_t ret = esp_https_ota(&config); if(ret == ESP_OK){ printf("OTA Success\n"); esp_restart(); }else{ printf("OTA Failed\n"); } vTaskDelete(NULL); } ``` 上述代码片段展示了如何设置HTTP客户端以及处理事件回调函数,同时指定了要下载的新版本固件的位置(`const char *url`)。注意这里的URL应该指向实际存放新固件的地方。 为了使以上代码生效,还需调整menuconfig里的选项以支持OTA特性: - `Component config -> Update from HTTP(S)` - 启用`Support HTTPS OTA updates`如果打算采用安全连接传输的话 完成这些更改之后就可以构建整个工程了。当一切就绪后部署至目标硬件执行即可触发在线升级流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值