پیشرفته⏱ 17 دقیقه مطالعه

ESP32 یک فایل‌سیستم داخلی کوچک روی حافظهٔ فلش خود دارد که مستقیماً از Arduino قابل خواندن و نوشتن است. هستهٔ فعلی Arduino-ESP32 فایل‌سیستم LittleFS را به‌جای SPIFFS قدیمی‌تر توصیه می‌کند (پایدارتر و مقاوم‌تر در برابر قطع ناگهانی برق). این ویژگی برای ذخیرهٔ تنظیمات، لاگ سنسورها یا کش کردن داده در نبود اینترنت بسیار مفید است.

خواندن و نوشتن فایل متنی ساده با LittleFS

CPP
#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) این کار را ساده می‌کند.

CPP
#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 تعداد دفعات محدودی (اما زیاد، در حد صدها هزار بار) قابل نوشتن است؛ برای داده‌هایی که هر چند میلی‌ثانیه تغییر می‌کنند (مثل خواندن سنسور)، نوشتن مداوم روی فلش را انجام ندهید.

شبیه‌سازی زندهٔ LittleFS — دقیقاً همین کد، همراه با فایل partitions.csv لازم برای پارتیشن spiffs باز کردن در Wokwi ↗
در حال بارگذاری شبیه‌ساز… (ممکن است چند ثانیه طول بکشد)

این یک شبیه‌سازی واقعی و قابل اجراست؛ روی دکمه پخش (▶) در Wokwi بزنید تا کد روی برد مجازی ESP32 اجرا شود. اگر جعبهٔ بالا بیش از حد سیاه/خالی ماند، صفحه را رفرش کنید یا از دکمهٔ «باز کردن در Wokwi» بالا استفاده کنید.

🛠️ کارگاه عملی

کارگاه عملی: یک فایل config.json بسازید که تنظیمات آستانهٔ دما را نگه دارد؛ برنامه هنگام روشن‌شدن این فایل را بخواند و اگر وجود نداشت، یک نسخهٔ پیش‌فرض بسازد.

❓ کدام فایل‌سیستم توسط هستهٔ فعلی Arduino-ESP32 به‌جای SPIFFS قدیمی توصیه می‌شود؟
طراحی و توسعه: امین شیخ نجدیglcd.ir | نسخهٔ افزونه: 1.21.0