• 使用闪存文件系统建立功能更加丰富的网络服务器

    • 掌握了如何向ESP8266开发板的闪存文件上传文件,我们就有了更多的空间来存储更加丰富的网页资源,从而让我们实现功能更加丰富的物联网项目。
  • 本节教程里,我们将向您介绍一系列ESP8266开发板搭建的网页服务示例
  • 在网页中加载闪存文件系统中的图片、CSS和JavaScript
    • 请点击以上链接将本实例所用的示例程序下载并解压缩。在本示例中,您将看到data文件夹一共有5个文件和一个文件夹。以下是各个文件的作用:
    • index.html:ESP8266开发板建立的网站首页
    • main.css:控制网页的css(层叠样式表)
    • JavaScript.js和clock.js:在页面中显示日期和时钟的JavaScript文件。这两个程序主要用于演示如何在ESP8266开发板所建立的物联网页面中显示JavaScript
    • img目录中的图片taichi-maker.jpg:此图片用于演示如何在ESP8266开发板所建立的物联网页面中显示图片
  • #include <ESP8266WiFi.h>
    #include <ESP8266WiFiMulti.h>
    #include <ESP8266WebServer.h>
    #include <FS.h>  ESP8266WiFiMulti wifiMulti;     // 建立ESP8266WiFiMulti对象ESP8266WebServer esp8266_server(80);    // 建立网络服务器对象,该对象用于响应HTTP请求。监听端口(80)void setup() {Serial.begin(9600);          // 启动串口通讯Serial.println("");wifiMulti.addAP("TP-LINK_7AAD", "LKQ123456+");  // 这三条语句通过调用函数addAP来记录3个不同的WiFi网络信息。wifiMulti.addAP("CMCC-3289", "15208883289"); // 这3个WiFi网络名称分别是taichi-maker, taichi-maker2, taichi-maker3。wifiMulti.addAP("CMCC-3289-5G", "15208883289"); // 这3个网络的密码分别是123456789,87654321,13572468。Serial.println("Connecting ...");                           // 则尝试使用此处存储的密码进行连接。int i = 0;  while (wifiMulti.run() != WL_CONNECTED) { // 尝试进行wifi连接。delay(1000);Serial.print(i++); Serial.print(' ');}// WiFi连接成功后将通过串口监视器输出连接成功信息 Serial.println('\n');Serial.print("Connected to ");Serial.println(WiFi.SSID());              // 通过串口监视器输出连接的WiFi名称Serial.print("IP address:\t");Serial.println(WiFi.localIP());           // 通过串口监视器输出ESP8266-NodeMCU的IPif(SPIFFS.begin()){                       // 启动闪存文件系统Serial.println("SPIFFS Started.");} else {Serial.println("SPIFFS Failed to Start.");}esp8266_server.onNotFound(handleUserRequet);      // 告知系统如何处理用户请求esp8266_server.begin();                           // 启动网站服务Serial.println("HTTP server started");
    }void loop(void) {esp8266_server.handleClient();                    // 处理用户请求
    }// 处理用户浏览器的HTTP访问
    void handleUserRequet() {         // 获取用户请求网址信息String webAddress = esp8266_server.uri();// 通过handleFileRead函数处处理用户访问bool fileReadOK = handleFileRead(webAddress);// 如果在SPIFFS无法找到用户访问的资源,则回复404 (Not Found)if (!fileReadOK){                                                 esp8266_server.send(404, "text/plain", "404 Not Found"); }
    }bool handleFileRead(String path) {            //处理浏览器HTTP访问if (path.endsWith("/")) {                   // 如果访问地址以"/"为结尾path = "/index.html";                     // 则将访问地址修改为/index.html便于SPIFFS访问} String contentType = getContentType(path);  // 获取文件类型if (SPIFFS.exists(path)) {                     // 如果访问的文件可以在SPIFFS中找到File file = SPIFFS.open(path, "r");          // 则尝试打开该文件esp8266_server.streamFile(file, contentType);// 并且将该文件返回给浏览器file.close();                                // 并且关闭文件return true;                                 // 返回true}return false;                                  // 如果文件未找到,则返回false
    }// 获取文件类型
    String getContentType(String filename){if(filename.endsWith(".htm")) return "text/html";else if(filename.endsWith(".html")) return "text/html";else if(filename.endsWith(".css")) return "text/css";else if(filename.endsWith(".js")) return "application/javascript";else if(filename.endsWith(".png")) return "image/png";else if(filename.endsWith(".gif")) return "image/gif";else if(filename.endsWith(".jpg")) return "image/jpeg";else if(filename.endsWith(".ico")) return "image/x-icon";else if(filename.endsWith(".xml")) return "text/xml";else if(filename.endsWith(".pdf")) return "application/x-pdf";else if(filename.endsWith(".zip")) return "application/x-zip";else if(filename.endsWith(".gz")) return "application/x-gzip";return "text/plain";
    }

    代码: 文件详情

  • 先上传文件夹

  • 然后烧录代码

  • 当我们找不到函数是就会调用 onNotFound 函数 当我们不用on函数请求时就会直接用onNotFound 进行请求 当有浏览器向服务器发送请求时就会调用通过handleFileRead函数处处理用户访问 如果找到了请求的数据内容就返回真值 否则就返回假;当我们请求首页信息时就将"/"替换为"/index.html"把浏览器所请求的信息与闪存文件系统内的文件名对应起来

  • 对请求分析 如图首先对首页进行请求 之后为.css 后为时钟的.js 和太极创客的logo图片

  • 通过一个字符串变量去得到文件类型,

  • 重点:读取文件之后 将这个文件返回给浏览器

  • 通过对请求的文件结尾的判断 返回相应字符串 告诉服务器现在需要的文件类型是什么。,

  • 通过这次实验 我们可以结合自己所学web知识展示更加丰富的界面,只需修改web文件的内容便可以完成。

ESP8266学习 六 通过闪存文件系统上传web端程序相关推荐

  1. ESP8266-NodeMCU网络服务器——通过网页将文件上传到闪存文件系统

    ESP8266WebServer esp8266_server(80); / 建立网络服务器对象,该对象用于响应HTTP请求.监听端口(80) File fsUploadFile; / 建立文件对象用 ...

  2. ESP8266 NodeMCU 闪存文件系统(SPIFFS)

    目录 闪存文件系统 ESP8266闪存文件系统基本操作 1. 通过程序向闪存文件系统写入信息 2. 通过程序从闪存文件系统读取信息 3. 通过程序向闪存文件系统文件添加信息 4. 通过程序读取目录内容 ...

  3. Esp32-Arduino 学习(闪存文件系统)

    目录 闪存文件写入 闪存文件读取 闪存文件删除 从Arduino IDE 上传文件 注:本文代码来自于太极创客团队: www.taichi-maker.com,由于太极创客的教程是基于esp8266, ...

  4. 闪存文件系统(Flash File System)

    最近调研了一下闪存文件系统,部分结果展示如下,如有错误欢迎评论指正~ 一.背景 闪存(flash memory),是一种电子式可清除程序化存储器的形式,允许在操作中被多次擦或写的存储器. 随着现在闪存 ...

  5. 闪存驱动器_“空”和新格式化的闪存驱动器上如何有可用空间?

    闪存驱动器 When you delete everything from a flash drive and reformat it, you would think it should 'disp ...

  6. ESP32利用SPIFFS(闪存文件系统)创建 Web服务器实现引脚控制

    ESP32利用SPIFFS(闪存文件系统)创建 Web服务器实现引脚控制 在本教程中,我们将向您展示如何构建一个web服务器,以提供存储在ESP32文件系统中的HTML和CSS文件.我们将创建分离的H ...

  7. Android OpenGL ES 学习(六) – 使用 VBO、VAO 和 EBO/IBO 优化程序

    OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...

  8. 解决从本地文件系统上传到HDFS时的权限问题

    解决从本地文件系统上传到HDFS时的权限问题 参考文章: (1)解决从本地文件系统上传到HDFS时的权限问题 (2)https://www.cnblogs.com/hapjin/p/4846853.h ...

  9. 存储桶上传策略和签名 URL的绕过及利用

    本文中带有自己一些拙见,读者若存在相关问题或者有其他想法的,欢迎在评论区交流探讨.原文:https://labs.detectify.com/2018/08/02/bypassing-exploiti ...

最新文章

  1. 网络系统工程师的最终归宿(一)创业还是打工
  2. day3----python变量与常量
  3. tkinter的可视化拖拽工具_可视化越做越丑?这五个高级图表效果实现流程分享给你...
  4. 《数据中台:让数据用起来》读书笔记
  5. 寻java、.net、或C#兼职程序开发人员(上海)
  6. “金嗓子”宣布退市!曾因罗纳尔多代言争议爆红,广告词家喻户晓…
  7. linux之at,crontab
  8. SolrJ 查询数据
  9. 备战2022软考网络管理员(1)介绍与开篇
  10. 武汉理工大学计算机学院宿舍,武汉理工大学专业所属校区及新生住宿分布情况(v2.0)...
  11. 在线教育需要准备好哪些直播设备?
  12. DP动态规划--乡村邮局问题-Post Office(POJ-1160)python
  13. (附源码)springboot闲置衣物捐赠系统 毕业设计 021009
  14. vue实现某一区域滚动,头部底部固定,中间滚动
  15. B-spline算法(B样条曲线)
  16. html语言中hr是什么意思,网页制作中的hr是什么意思
  17. qtabwidget设置表头_Qt GUI图形图像开发之QT表格控件QTableView,QTableWidget复杂表头(多行表头) 及冻结、固定特定的行的详细方法与实例...
  18. 1367. 二叉树中的列表
  19. 【java后端学习路线3】SSM+Linux+Git学习指南,985本海硕自学转码
  20. 解决Win10安装DirectX报错:不能信任一个安装所需的压缩文件,请检查加密服务是否启用并且Cabinet文件证书是否有效

热门文章

  1. 《魔兽世界》怀旧服简单点评和一些被问到的问题的回答
  2. 强烈推荐 十多款2023年必备国内外王炸级AI工具 (免费 精品 好用) 让你秒变神一样的装逼佬、感受10倍生产力
  3. 2021-06-29 人生突变简记
  4. 《cypher》游戏第三章攻略
  5. 谁能悄悄告诉我:EDG到底是啥?
  6. C++中二级指针(指针引用)解释总结
  7. Win7改配色方案的方法
  8. CSS样式中选择器+盒子模型+定位+浮动
  9. 结界乱斗服务器维护中,结界乱斗变态版
  10. mybatis plus 一对一 、一对多映射