ESP32 یک فایلسیستم داخلی کوچک روی حافظهٔ فلش خود دارد که مستقیماً از Arduino قابل خواندن و نوشتن است. هستهٔ فعلی Arduino-ESP32 فایلسیستم LittleFS را بهجای SPIFFS قدیمیتر توصیه میکند (پایدارتر و مقاومتر در برابر قطع ناگهانی برق). این ویژگی برای ذخیرهٔ تنظیمات، لاگ سنسورها یا کش کردن داده در نبود اینترنت بسیار مفید است.
خواندن و نوشتن فایل متنی ساده با LittleFS
#include <LittleFS.h>
void setup() {
Serial.begin(115200);
if (!LittleFS.begin(true)) { // true = در صورت نیاز، فرمت خودکار
Serial.println("خطا در راهاندازی LittleFS!");
return;
}
// نوشتن در فایل (حالت append)
File f = LittleFS.open("/log.txt", "a");
f.println("رویداد جدید ثبت شد");
f.close();
// خواندن کل فایل
f = LittleFS.open("/log.txt", "r");
while (f.available()) {
Serial.write(f.read());
}
f.close();
}
void loop() {}همیشه پس از باز کردن یک فایل با LittleFS.open()، حتماً f.close() را صدا بزنید تا داده کامل روی فلش نوشته شود؛ فراموشکردن این کار میتواند باعث از دست رفتن آخرین دادهها شود.
ذخیرهٔ دادههای ساختاریافته با JSON
برای ذخیرهٔ تنظیمات پیچیدهتر (مثل نام Wi-Fi، آستانهٔ هشدار دما و ...)، فرمت JSON بسیار مناسب است؛ کتابخانهٔ محبوب ArduinoJson (نصب از Library Manager) این کار را ساده میکند.
#include <LittleFS.h>
#include <ArduinoJson.h>
void saveConfig() {
StaticJsonDocument<200> doc;
doc["wifi_ssid"] = "MyHomeWiFi";
doc["temp_threshold"] = 30;
doc["device_name"] = "esp32-academy-01";
File f = LittleFS.open("/config.json", "w");
serializeJson(doc, f);
f.close();
}
void loadConfig() {
File f = LittleFS.open("/config.json", "r");
if (!f) {
Serial.println("فایل تنظیمات یافت نشد");
return;
}
StaticJsonDocument<200> doc;
deserializeJson(doc, f);
f.close();
const char* name = doc["device_name"];
Serial.print("نام دستگاه: ");
Serial.println(name);
}
void setup() {
Serial.begin(115200);
LittleFS.begin(true);
saveConfig();
loadConfig();
}
void loop() {}حافظهٔ فلش ESP32 تعداد دفعات محدودی (اما زیاد، در حد صدها هزار بار) قابل نوشتن است؛ برای دادههایی که هر چند میلیثانیه تغییر میکنند (مثل خواندن سنسور)، نوشتن مداوم روی فلش را انجام ندهید.
کارگاه عملی: یک فایل config.json بسازید که تنظیمات آستانهٔ دما را نگه دارد؛ برنامه هنگام روشنشدن این فایل را بخواند و اگر وجود نداشت، یک نسخهٔ پیشفرض بسازد.