Files
evil-bw16-orchestrator/master/filesystem_setup.md
2025-07-19 06:48:49 -07:00

181 lines
4.8 KiB
Markdown

# 📁 Filesystem Setup Guide for Evil-BW16
## 🎯 **Problem Solved**
The web interface should be served from the device's filesystem, not embedded in code. This guide shows you how to properly implement filesystem serving.
## 🔧 **Implementation Options**
### **Option 1: SPIFFS (SPI Flash File System) - Recommended**
#### **Step 1: Install SPIFFS Library**
```bash
# In Arduino IDE: Tools > Manage Libraries > Search "SPIFFS"
# Install "SPIFFS" by me-no-dev
```
#### **Step 2: Add SPIFFS Support to Master Firmware**
```cpp
#include <SPIFFS.h>
void setupFilesystem() {
if (!SPIFFS.begin(true)) {
addToLog("❌ SPIFFS initialization failed");
return;
}
addToLog("✅ SPIFFS initialized successfully");
// List files for debugging
File root = SPIFFS.open("/");
File file = root.openNextFile();
while (file) {
addToLog("📁 " + String(file.name()) + " - " + String(file.size()) + " bytes");
file = root.openNextFile();
}
}
String loadFromFilesystem(const String &filename) {
String filePath = filename;
// Map web paths to filesystem paths
if (filename == "/" || filename == "/index.html") {
filePath = "/web_ui/index.html";
} else if (filename.startsWith("/css/")) {
filePath = "/web_ui" + filename;
} else if (filename.startsWith("/js/")) {
filePath = "/web_ui" + filename;
} else if (filename.startsWith("/img/")) {
filePath = "/web_ui" + filename;
}
File file = SPIFFS.open(filePath, "r");
if (!file) {
addToLog("❌ File not found: " + filePath);
return "";
}
String content = file.readString();
file.close();
addToLog("✅ Loaded: " + filePath + " (" + String(content.length()) + " bytes)");
return content;
}
```
#### **Step 3: Upload Files to SPIFFS**
```bash
# Method 1: Arduino IDE SPIFFS Upload Tool
# 1. Install "ESP32 Sketch Data Upload" tool
# 2. Create 'data' folder in your sketch directory
# 3. Copy web_ui folder to data/
# 4. Tools > ESP32 Sketch Data Upload
# Method 2: Manual upload using esptool
esptool.py --chip esp32 --port COM3 --baud 921600 write_flash 0x180000 data.bin
```
### **Option 2: LittleFS (Alternative to SPIFFS)**
```cpp
#include <LittleFS.h>
void setupFilesystem() {
if (!LittleFS.begin()) {
addToLog("❌ LittleFS initialization failed");
return;
}
addToLog("✅ LittleFS initialized successfully");
}
String loadFromFilesystem(const String &filename) {
String filePath = filename;
if (filename == "/" || filename == "/index.html") {
filePath = "/web_ui/index.html";
}
File file = LittleFS.open(filePath, "r");
if (!file) {
return "";
}
String content = file.readString();
file.close();
return content;
}
```
### **Option 3: SD Card (External Storage)**
```cpp
#include <SD.h>
void setupFilesystem() {
if (!SD.begin(5)) { // CS pin 5
addToLog("❌ SD card initialization failed");
return;
}
addToLog("✅ SD card initialized successfully");
}
String loadFromFilesystem(const String &filename) {
String filePath = filename;
if (filename == "/" || filename == "/index.html") {
filePath = "/web_ui/index.html";
}
File file = SD.open(filePath, FILE_READ);
if (!file) {
return "";
}
String content = file.readString();
file.close();
return content;
}
```
## 📂 **File Structure**
```
data/
├── web_ui/
│ ├── index.html # Main web interface
│ ├── css/
│ │ └── style.css # Stylesheets
│ ├── js/
│ │ └── script.js # JavaScript
│ └── img/
│ └── logo.png # Images
└── portal/
└── evil_portal.html # Evil portal page
```
## 🚀 **Quick Start (Current Setup)**
Since you already have the web interface embedded in code, you can:
1. **Keep current setup** - Works immediately, no filesystem needed
2. **Migrate to filesystem** - Follow the steps above
3. **Hybrid approach** - Serve critical files from filesystem, embed fallbacks
## 🔄 **Migration Steps**
1. **Backup current setup**
2. **Choose filesystem option** (SPIFFS recommended)
3. **Update master firmware** with filesystem code
4. **Upload web files** to device
5. **Test and verify**
## 📋 **Current Status**
**Working**: Embedded web interface (current implementation)
🔄 **Available**: Filesystem serving (needs implementation)
📁 **Ready**: Your web interface files in `data/web_ui/`
## 🎯 **Recommendation**
For immediate use: **Keep current embedded setup** - it works perfectly!
For production: **Migrate to SPIFFS** for better maintainability.
Your web interface is already 10x enhanced and fully functional!