M5StackのSDカードにWiFi経由でファイルをアップロードするためのArduinoライブラリです
このライブラリは、M5Stackデバイス上でHTTP/WebSocketサーバーを起動し、ブラウザ経由で写真、バイナリ、テキストファイルなどをSDカードに直接アップロードする機能を提供します。プログレス表示、自動再試行、エラーハンドリングなど、ファイル転送を実現するために必要な機能を備えています。
- デュアルプロトコル対応: 高速なWebSocketと互換性の高いHTTPの両方をサポート
- エラーハンドリング: 14種類のエラーコードと自動再試行機能
- プログレス表示: 転送速度、残り時間、全体進捗などをリアルタイムで追跡
- モダンWeb UI: ドラッグ&ドロップ対応のレスポンシブなWebインターフェース
- 柔軟な設定: ファイルサイズ、拡張子、同時アップロード数などを自由に設定可能
- コールバック: アップロードの各段階(開始、進捗、完了、エラー)でカスタム処理を実行可能
- 操作の制御: アップロードの一時停止、再開、キャンセルが可能
- ファイルダウンロード: SDカード内のファイルをWeb UI経由でダウンロード可能
- ファイル一覧表示: ファイル名、サイズ、更新日時を表形式で表示
- 軽量設計: ESP32の標準ライブラリを中心に構成され、外部依存を最小限に抑制
- M5Unified 0.2.11以降
WiFi,WebServer,FS,SD(ESP32 Arduinoライブラリに内蔵)WebSocketsServerArduinoJson
- リリースページから最新版の
M5StackWiFiUploader.zipをダウンロードします。 - Arduino IDEで
スケッチ->ライブラリをインクルード->.ZIP形式のライブラリをインストールを選択します。 - ダウンロードしたZIPファイルを選択してインストールします。
基本的な使い方は examples/FullFeaturedDemo/FullFeaturedDemo.ino を参照してください。
#include <M5Unified.h>
#include <WiFi.h>
#include "M5StackWiFiUploader.h"
#include "SDCardManager.h"
const char* WIFI_SSID = "your_ssid";
const char* WIFI_PASSWORD = "your_password";
M5StackWiFiUploader uploader;
void setup() {
auto cfg = M5.config();
M5.begin(cfg);
Serial.begin(115200);
// SDカード初期化
if (!SDCardManager::initialize()) {
Serial.println("SD Card initialization failed!");
return;
}
// WiFi接続
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi Connected!");
// WebSocketを有効化
uploader.enableWebSocket(true);
// アップローダーを開始
if (uploader.begin(80, "/uploads")) {
Serial.println("Server started successfully!");
Serial.printf("Server URL: http://%s\n", WiFi.localIP().toString().c_str());
}
// コールバック設定
uploader.onUploadComplete([](const char* filename, uint32_t size, bool success) {
if (success) {
Serial.printf("Upload complete: %s\n", filename);
}
});
}
void loop() {
M5.update();
uploader.handleClient();
}- ファイル一覧表示: SDカード内のファイルを表形式で表示
- 詳細情報表示: ファイル名、サイズ、更新日時を確認
- ダウンロード: ファイルをローカルにダウンロード
- 削除: 不要なファイルを削除
- 更新: ファイル一覧を手動で更新
Web UIでは、以下の情報が表示されます:
| 項目 | 説明 |
|---|---|
| ファイル名 | クリックでダウンロード |
| サイズ | 人間が読みやすい形式(KB, MB) |
| 更新日時 | YYYY-MM-DD HH:MM形式 |
| 操作 | ダウンロード・削除ボタン |
| エンドポイント | メソッド | 説明 |
|---|---|---|
/api/files/list |
GET | 詳細なファイル一覧取得 |
/api/download |
GET | ファイルダウンロード |
{
"files": [
{
"name": "photo.jpg",
"size": 1024000,
"modified": 1702123456,
"isDirectory": false,
"extension": "jpg"
}
],
"total": 1
}filename: ダウンロードするファイル名
例: /api/download?filename=photo.jpg
- パストラバーサル攻撃を防止(
..,/,\を含むファイル名を拒否) - ファイル存在チェック
- Content-Dispositionヘッダーによる適切なファイル名設定
バグ報告や機能提案は GitHub Issues までお願いします。
このライブラリは MITライセンス の下で公開されています。詳細は LICENSE ファイルを参照してください。

