要在ESP8266上实现这个功能,你需要完成以下几个步骤:
- 设置ESP8266为STA模式:连接到Wi-Fi网络。
- 创建一个简单的网页:通过网页输入一个整数,并将其发送到ESP8266。
- 保存整数到文件系统:将接收到的整数保存到ESP8266的文件系统中。
- 开机时读取并输出整数:在ESP8266启动时,从文件系统中读取保存的整数,并通过串口输出。
1. 设置ESP8266为STA模式
首先,确保你已经安装了ESP8266的开发环境(如Arduino IDE),并且已经安装了ESP8266的文件系统库(如LittleFS
或SPIFFS
)。
#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_SSID
和your_PASSWORD
替换为你的Wi-Fi网络的SSID和密码。 - 文件系统:使用
LittleFS
来保存和读取文件。如果你使用的是SPIFFS
,可以将LittleFS
替换为SPIFFS
。 - 网页访问:ESP8266启动后,你可以通过浏览器访问ESP8266的IP地址来打开网页,输入整数并提交。
测试
- 上传代码到ESP8266。
- 打开串口监视器,查看ESP8266的IP地址。
- 在浏览器中输入ESP8266的IP地址,打开网页并输入一个整数(3600-7200)。
- 提交后,ESP8266会保存这个整数,并在下次启动时通过串口输出。
这样,你就完成了从网页获取整数并保存到文件系统的功能。