[ESP32 IDF]web server

目录

 通过web server控制LED

核心原理解析

分区表  

web server的使用

 错误Header fields are too long的解决


  •  通过web server控制LED

通过网页控制LED灯的亮灭,一般的ESP32开发板都可以实现,下面这篇文章是国外开发者提供的一个通过web server控制LED的实例, 文章对如何实现有非常详细的描述,但是需要魔法才能访问如下连接:

esp32-esp-idf-websocket-web-server

对应的工程源码在github可以找到:

ESP32-ESP-IDF-WebSocket-Web-Server

  • 核心原理解析

  • 分区表  

     这个实例并不是将html嵌在代码中,而是将html放在/data路径下,将文件刷写到spifs中,通过spiffs文件系统访问html,下面这篇博文有个arduino的实现,可以学习一下:

基于ESP32搭建物联网服务器六(利用SPIFFS存放html,css,js等文件(读取html)_esp32 spiffs-CSDN博客

    关于ESP32的分区表,官方文档有非常详细的说明:

分区表 - ESP32 - — ESP-IDF 编程指南 latest 文档 (espressif.com)

分区表中的每个条目都包括以下几个部分:Name(标签)、Type(app、data 等)、SubType 以及在 flash 中的偏移量(分区的加载地址),在这个实例中,划分了一个名为storage的data类型分区,其子类型为spiffs(官方关于spiffs的说明文档:SPIFFS 文件系统 - ESP32 - — ESP-IDF 编程指南 latest 文档 (espressif.com)):

  

在使用idf.py进行刷写的时候,可以观察到自动调用了spiffsgen.py将/data路径打包为storage.bin,并且刷写到对应的地址中,因此可以在程序中通过spiffs的接口对html文件进行访问。

  • web server的使用

下面这篇博文是一个系列,有一系列的实操实现web server,基于arduino库实现的,但也具有学习意义:

基于ESP32搭建物联网服务器四(最简单的WEB服务器)_espasyncwebserver-CSDN博客

    我这里关注的是网页访问web server的时候,代码在哪里对request进行了处理,代码中,对HTTP_GET类型的method注册了回调,所以会进到handle_ws_req函数中:

    其次,需要获取payload的内容,从而对client端的请求解析作出响应,在handle_ws_req的后半段解析到了payload的内容,并调用trigger_async_send作出响应:

其中下面就是对led的控制,并且反馈状态给client端,改变网页的显示:

那么有个问题就是:最多可以支持多少个客户端呢?其实就是最多能连多少个tcp,由下面这个宏控制:

 错误Header fields are too long的解决

在使用edge浏览器访问的时候,提示了这个错误,参考如下博文, 将header的length修改大一些即可:

ESP32 Https server 错误Header fields are too long for server to interpret-CSDN博客

### 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、付费专栏及课程。

余额充值