赞
踩
之前大家用arduino1.x版本开发ESP32或者ESP8266,上传文件都非常简单下载一个插件,在ino文件旁边创建一个data文件夹把各种文件一股脑丢进去,传完程序之后点一下上传文件就到文件系统里面了。
包括之前画板我都一直以为ESP32-C3也支持这个工具。就算arduino2.0没有这个插件也没关系大不了开两个IDE开发。
今天踩了坑才知道我想太多了,无论那个版本的arduino都不支持ESP32-C3上传文件系统的data。
然后通过以下方案解决研发调试阶段的文件上传,完成部署之后甚至比之前更方便了。
电脑固定IP
通过windows的iis开启服务器功能。
控制面板 搜索 服务 打开程序和功能查看已安装的更新
启用或关闭windows功能
把iis服务都开了,FTP也可以不开。
点击开始 然后搜索iis
文件书最下面点浏览就可以调到根目录了
这就是根目录
打开ip默认是这个主页,这不重要我们可以打开我们的文件就可以了。
#include <WiFi.h> #include <HTTPClient.h> #include "FS.h" #include "LittleFS.h" // 替换为你的 WiFi 网络名称和密码 const char* ssid = "123"; const char* password = "12345678"; void setup() { Serial.begin(115200); // delay(2000); // 延迟,以便于观察启动日志 // 连接 WiFi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("连接WiFi......."); } // 初始化 LittleFS while (!LittleFS.begin()) { Serial.println("LittleFS 打开失败了!!!"); if (LittleFS.format()) Serial.println("LittleFS 格式化完成。"); } Serial.println("LittleFS 文件系统正常。"); Serial.println("wifi链路连接成功"); String urlList[] = { "http://192.168.0.250/file1.txt", "http://192.168.0.250/主页.html", // 更多 URL ... }; if (!LittleFS.exists("/完成下载.txt")) { // 遍历 URL 列表 bool errFlag = 0; for (const auto& url : urlList) { errFlag; // 从 URL 中提取域名和文件名 int domainEndIndex = url.indexOf('/', 7); // HTTP 协议后的第一个斜杠是域名结束的位置 String domain = url.substring(0, domainEndIndex); String filename = url.substring(domainEndIndex + 1); // 创建 HTTP 客户端并开始下载文件 HTTPClient http; http.begin(url); int httpCode = http.GET(); if (httpCode > 0) { // 文件内容保存在 HTTP 服务器响应体中 String payload = http.getString(); // 打开文件准备写入 File file = LittleFS.open("/" + filename, "w"); if (!file) { Serial.println("打开文件失败"); http.end(); errFlag = 1; continue; } // 将内容写入文件 file.print(payload); file.close(); Serial.println("文件下载完成: " + filename); } else { Serial.println("HTTP 获取失败: " + String(httpCode)); errFlag = 1; } http.end(); // 关闭 HTTP 连接 } if (1 == errFlag) Serial.println("获取过程中有问题不生成:完成任务。下次开机继续下载。"); else { Serial.println("获取过程木有问题,生成:完成下载。下次开机不用下载。"); File file = LittleFS.open("/完成下载.txt", "w"); file.close(); } } else Serial.println("之前已经完成下载,本次开机无须进入下载过程。"); pinMode(12, OUTPUT); } void loop() { digitalWrite(12, HIGH); // turn the LED on (HIGH is the voltage level) delay(100); // wait for a second digitalWrite(12, LOW); // turn the LED off by making the voltage LOW delay(100); // wait for a second }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。