利用SPIFFS(闪存文件系统)在ESP32Web服务器上显示图片

1 篇文章 0 订阅

利用SPIFFS(闪存文件系统)在ESP32Web服务器上显示图片


下面是本次案例的网页控制界面

项目文件架构

data文件夹用于通过Arduino IDE上传文件到SPIFFS(闪存文件系统)

下图为待上传的网页资源和图片资源

上传方式点此链接:https://blog.csdn.net/weixin_61908666/article/details/128415118

功能描述

  • 通过利用SPIFFS(闪存文件系统)在ESP32Web服务器上显示图片

  • Web服务器页面显示3张图片:模型图、温度图标、湿度图标

  • Web服务器页面还显示接收到的当前的温度和湿度

示例代码

Arduino代码


#include "WiFi.h"
#include "ESPAsyncWebServer.h"
#include "SPIFFS.h"

// wifi设置
const char *ssid = "*****";
const char *password = "*****";

// 在端口80上创建AsyncWebServer对象
AsyncWebServer server(80);

// 处理刷新数据
String processor(const String& var){
  Serial.println(var);
  if(var == "TEMPERATURE"){
    return "30";
  }else if (var == "HUMIDITY")
  {
    return "40";
  }
  return String();
}

void setup(){
  // 初始化串口
  Serial.begin(115200);

  // 初始化闪存文件系统
  if(!SPIFFS.begin(true)){
    Serial.println("An Error has occurred while mounting SPIFFS");
    return;
  }

  // STA模式链接网络
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }
  Serial.println(WiFi.localIP());

  // 加载根/ web页面的路由
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send(SPIFFS, "/index.html", String(), false, processor);
  });

  // 加载model.png文件的路由
  server.on("/model", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send(SPIFFS, "/model.png", "image/png");
  });

  // 加载model.png文件的路由
  server.on("/temperature", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send(SPIFFS, "/temperature.png", "image/png");
  });

  // 加载model.png文件的路由
  server.on("/humidity", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send(SPIFFS, "/humidity.png", "image/png");
  });
  
  // 启动服务器
  server.begin();
}
 
void loop(){
  
}

Arduino代码如想详细了解请看下面两个链接:

ESP32文件和文件系统使用(基于SPIFFS):https://blog.csdn.net/weixin_61908666/article/details/128415118

ESP32搭建ESPAsyncWebServer异步服务器:https://blog.csdn.net/weixin_61908666/article/details/128415118

前端代码

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv='refresh' content='4'/>
  <meta name='viewport' content='width=device-width, initial-scale=1'>
  <title>ESP32 DHT Server</title>
  <style>
    html {
        font-family: Arial;
        display: inline-block;  
        margin: 0px auto;
        text-align: center;
    }
    h2{
      color: #0F3376;
      padding: 2vh;
    }
    p { font-size: 3.0rem; }
    .units { font-size: 1.2rem; }
    .dht-labels{
      font-size: 1.5rem;
      vertical-align:middle;
      padding-bottom: 15px;
    }
  </style>
</head>
<body>
    <h2>ESP32 DHT Server!</h2>
    <p><img src="model" width="140px" height="140px"/></p>
    <p>
      <img src="temperature" width="80px" height="80px"/>
      <span class='dht-labels'>Temperature</span>
      <span>%TEMPERATURE%</span>
      <sup class='units'>&deg;C</sup>
    </p>
    <p>
      <img src="humidity" width="80px" height="80px"/>
      <span class='dht-labels'>Humidity</span>
      <span>%HUMIDITY%</span>
      <sup class='units'>&percnt;</sup>
    </p>
</body>
<script>
  setInterval(function ( ) {
      var xhttp = new XMLHttpRequest();
      xhttp.onreadystatechange = function() {
          if (this.readyState == 4 && this.status == 200) {
          document.getElementById("temperature").innerHTML = this.responseText;
          }
      };
      xhttp.open("GET", "/temperature", true);
      xhttp.send();
  }, 10000 );

  setInterval(function ( ) {
      var xhttp = new XMLHttpRequest();
      xhttp.onreadystatechange = function() {
          if (this.readyState == 4 && this.status == 200) {
          document.getElementById("humidity").innerHTML = this.responseText;
          }
      };
      xhttp.open("GET", "/humidity", true);
      xhttp.send();
  }, 3000 ) ;
</script>
</html>

前端代码不过多描述,比较浅显

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
PlatformIO是一个综合性的开发平台,支持多种嵌入式系统平台和开发板,同时也支持使用SPIFFS文件系统进行数据存储。SPIFFS是一个开源轻量级嵌入式文件系统,旨在为嵌入式系统提供可靠的数据存储,特别适用于Flash存储器。 使用PlatformIO进行SPIFFS开发,首先需要在项目中添加SPIFFS文件系统支持。具体步骤如下: 1. 打开PlatformIO IDE或CLI。 2. 创建一个新的项目或打开现有项目。 3. 在项目目录下创建一个名为“data”的文件夹。 4. 在“data”文件夹中添加需要存储的文件。 5. 在项目配置文件platformio.ini中添加以下代码: ``` [env:esp32dev] platform = espressif32 board = esp32dev framework = arduino ; 添加SPIFFS文件系统支持 board_build.filesystem = spiffs ; SPIFFS分区大小 board_build.spiffs_size = 1MB ; SPIFFS分区名称 board_build.spiffs_start = 0x180000 ``` 其中,board_build.filesystem = spiffs表示使用SPIFFS文件系统,board_build.spiffs_size = 1MB表示分配1MB的存储空间,board_build.spiffs_start = 0x180000表示SPIFFS分区的起始位置。 6. 编译并上传代码到开发板上。 7. 在代码中使用SPIFFS API进行文件的读写操作,示例代码如下: ``` #include "FS.h" void setup() { // 初始化SPIFFS文件系统 if (!SPIFFS.begin()) { Serial.println("Failed to mount SPIFFS."); return; } // 读取文件内容 File file = SPIFFS.open("/test.txt", "r"); if (!file) { Serial.println("Failed to open file for reading."); return; } while (file.available()) { Serial.write(file.read()); } file.close(); // 写入文件内容 file = SPIFFS.open("/test.txt", "w"); if (!file) { Serial.println("Failed to open file for writing."); return; } file.print("Hello World!"); file.close(); } void loop() { } ``` SPIFFS API提供了一系列的文件操作函数,包括打开、读取、写入、删除等。用户可以根据自己的需求进行调用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值