ESP8266 STA模式下建立一个网页,从网页获取一个整数(范围限制在3600到7200),并且把这个整数保存在FS文件系统中,下次开机时通过串口输出这个值

发布于:2025-02-10 ⋅ 阅读:(59) ⋅ 点赞:(0)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

要在ESP8266上实现这个功能,你需要完成以下几个步骤:

  1. 设置ESP8266为STA模式:连接到Wi-Fi网络。
  2. 创建一个简单的网页:通过网页输入一个整数,并将其发送到ESP8266。
  3. 保存整数到文件系统:将接收到的整数保存到ESP8266的文件系统中。
  4. 开机时读取并输出整数:在ESP8266启动时,从文件系统中读取保存的整数,并通过串口输出。

1. 设置ESP8266为STA模式

首先,确保你已经安装了ESP8266的开发环境(如Arduino IDE),并且已经安装了ESP8266的文件系统库(如LittleFSSPIFFS)。

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <LittleFS.h>

const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";

ESP8266WebServer server(80);

void setup() {
  Serial.begin(115200);

  // 连接到Wi-Fi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
  }
  Serial.println("Connected to WiFi");

  // 初始化文件系统
  if (!LittleFS.begin()) {
    Serial.println("Failed to mount file system");
    return;
  }

  // 设置网页路由
  server.on("/", HTTP_GET, handleRoot);
  server.on("/set", HTTP_POST, handleSet);

  // 启动服务器
  server.begin();
  Serial.println("HTTP server started");

  // 读取并输出保存的整数
  readAndPrintInteger();
}

void loop() {
  server.handleClient();
}

2. 创建一个简单的网页

handleRoot函数中,创建一个简单的HTML表单,允许用户输入一个整数。

void handleRoot() {
  String html = "<html><body>";
  html += "<form action='/set' method='POST'>";
  html += "Enter an integer (3600-7200): <input type='number' name='value' min='3600' max='7200' required>";
  html += "<input type='submit' value='Submit'>";
  html += "</form></body></html>";
  server.send(200, "text/html", html);
}

3. 保存整数到文件系统

handleSet函数中,处理表单提交的数据,并将其保存到文件系统中。

void handleSet() {
  if (server.hasArg("value")) {
    int value = server.arg("value").toInt();
    if (value >= 3600 && value <= 7200) {
      File file = LittleFS.open("/value.txt", "w");
      if (file) {
        file.println(value);
        file.close();
        server.send(200, "text/plain", "Value saved: " + String(value));
      } else {
        server.send(500, "text/plain", "Failed to open file for writing");
      }
    } else {
      server.send(400, "text/plain", "Value out of range");
    }
  } else {
    server.send(400, "text/plain", "No value provided");
  }
}

4. 开机时读取并输出整数

setup函数中,读取文件系统中保存的整数,并通过串口输出。

void readAndPrintInteger() {
  File file = LittleFS.open("/value.txt", "r");
  if (file) {
    int value = file.parseInt();
    file.close();
    Serial.print("Saved value: ");
    Serial.println(value);
  } else {
    Serial.println("Failed to open file for reading");
  }
}

完整代码

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <LittleFS.h>

const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";

ESP8266WebServer server(80);

void setup() {
  Serial.begin(115200);

  // 连接到Wi-Fi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
  }
  Serial.println("Connected to WiFi");

  // 初始化文件系统
  if (!LittleFS.begin()) {
    Serial.println("Failed to mount file system");
    return;
  }

  // 设置网页路由
  server.on("/", HTTP_GET, handleRoot);
  server.on("/set", HTTP_POST, handleSet);

  // 启动服务器
  server.begin();
  Serial.println("HTTP server started");

  // 读取并输出保存的整数
  readAndPrintInteger();
}

void loop() {
  server.handleClient();
}

void handleRoot() {
  String html = "<html><body>";
  html += "<form action='/set' method='POST'>";
  html += "Enter an integer (3600-7200): <input type='number' name='value' min='3600' max='7200' required>";
  html += "<input type='submit' value='Submit'>";
  html += "</form></body></html>";
  server.send(200, "text/html", html);
}

void handleSet() {
  if (server.hasArg("value")) {
    int value = server.arg("value").toInt();
    if (value >= 3600 && value <= 7200) {
      File file = LittleFS.open("/value.txt", "w");
      if (file) {
        file.println(value);
        file.close();
        server.send(200, "text/plain", "Value saved: " + String(value));
      } else {
        server.send(500, "text/plain", "Failed to open file for writing");
      }
    } else {
      server.send(400, "text/plain", "Value out of range");
    }
  } else {
    server.send(400, "text/plain", "No value provided");
  }
}

void readAndPrintInteger() {
  File file = LittleFS.open("/value.txt", "r");
  if (file) {
    int value = file.parseInt();
    file.close();
    Serial.print("Saved value: ");
    Serial.println(value);
  } else {
    Serial.println("Failed to open file for reading");
  }
}

说明

  • Wi-Fi连接:你需要将your_SSIDyour_PASSWORD替换为你的Wi-Fi网络的SSID和密码。
  • 文件系统:使用LittleFS来保存和读取文件。如果你使用的是SPIFFS,可以将LittleFS替换为SPIFFS
  • 网页访问:ESP8266启动后,你可以通过浏览器访问ESP8266的IP地址来打开网页,输入整数并提交。

测试

  1. 上传代码到ESP8266。
  2. 打开串口监视器,查看ESP8266的IP地址。
  3. 在浏览器中输入ESP8266的IP地址,打开网页并输入一个整数(3600-7200)。
  4. 提交后,ESP8266会保存这个整数,并在下次启动时通过串口输出。

这样,你就完成了从网页获取整数并保存到文件系统的功能。


网站公告

今日签到

点亮在社区的每一天
去签到