当前位置: 首页 > news >正文

[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博客

相关文章:

  • Tomcat在Java web的应用
  • 三步实现 Sentinel-Nacos 持久化
  • 压力测试工具-Jmeter使用总结
  • Flink问题解决及性能调优-【Flink rocksDB读写state大对象导致背压问题调优】
  • 2024-02-01(Hive)
  • RFID手持终端_智能pda手持终端设备定制方案
  • 扩展学习|统计学习理论(SLT)与极限学习机(ELM)应用于大社会数据分析
  • 重新配置vue项目时出现的:连接已断开问题
  • 深度学习入门笔记(八)实战经验
  • 2024美赛E题数学建模思路代码数据分享
  • 微信小程序新手入门教程三:基础语法介绍
  • docker集成 nacos/nacos-server (包括踩的坑)
  • Python学习之路-Tornado基础:初识Tornado
  • 【前端】日期转换
  • 25.云原生之ArgoCD-app of apps模式
  • 深入了解以太坊
  • php的引用
  • Angular Elements 及其运作原理
  • bearychat的java client
  • C语言笔记(第一章:C语言编程)
  • iOS小技巧之UIImagePickerController实现头像选择
  • JavaScript的使用你知道几种?(上)
  • JS题目及答案整理
  • Netty 4.1 源代码学习:线程模型
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • 从重复到重用
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 每天10道Java面试题,跟我走,offer有!
  • 免费小说阅读小程序
  • 容器服务kubernetes弹性伸缩高级用法
  • 如何设计一个比特币钱包服务
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 软件开发学习的5大技巧,你知道吗?
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 用Python写一份独特的元宵节祝福
  • 做一名精致的JavaScripter 01:JavaScript简介
  • 树莓派用上kodexplorer也能玩成私有网盘
  • #HarmonyOS:Web组件的使用
  • #控制台大学课堂点名问题_课堂随机点名
  • $.ajax()
  • (C语言)球球大作战
  • (笔试题)分解质因式
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (九)One-Wire总线-DS18B20
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .NET CLR基本术语
  • .NET Core 通过 Ef Core 操作 Mysql
  • .net refrector
  • .NET 动态调用WebService + WSE + UsernameToken
  • .net 简单实现MD5
  • .NET框架设计—常被忽视的C#设计技巧
  • .net下简单快捷的数值高低位切换
  • .Net小白的大学四年,内含面经