RisalDash RisalDash

دليل · الذاكرة · التخزين

Flash و SRAM و NVS — أين تعيش بياناتك فعلاً

ثلاثة أسئلة تُربك كل مبتدئ على ESP: لماذا تختفي إعداداتي بعد إعادة التشغيل؟ لماذا تُصفَّر المتغيرات؟ لماذا تنفد الـ RAM؟ تعود الثلاثة جميعها إلى أمر واحد — معرفة أي ذاكرة تحمل ماذا. إليك الخريطة، وكيف تحفظ الإعدادات بالطريقة الصحيحة.

الذاكرةNVSPreferencesEEPROMESP32ESP8266
خريطة ذاكرة ESP32: أقسام الفلاش (app وOTA وNVS وSPIFFS) ومناطق SRAM
الفلاش ينجو من إعادة التشغيل وSRAM لا — مكان الإعدادات هو NVS.

أنواع الذاكرة

لماذا تختفي إعداداتك

تعيش المتغيرات في SRAM، وهي متطايرة — تُطفئ التيار فتختفي. لكي تحتفظ بكلمة مرور Wi-Fi أو قيمة معايرة أو إعداد للمستخدم عبر عمليات إعادة التشغيل، عليك كتابتها في تخزين غير متطاير: NVS أو Flash.

احفظ الإعدادات بالطريقة الصحيحة — Preferences (NVS)

انسَ EEPROM.h على ESP. استخدم مكتبة Preferences — فهي تكتب قيماً مسمّاة ومحددة النوع في NVS وتتولى موازنة التآكل نيابةً عنك:

#include <Preferences.h>
Preferences prefs;

void saveConfig(const char* ssid, int interval) {
  prefs.begin("cfg", false);          // مساحة الأسماء "cfg"، قراءة/كتابة
  prefs.putString("ssid", ssid);
  prefs.putInt("interval", interval);
  prefs.end();
}

void loadConfig() {
  prefs.begin("cfg", true);           // للقراءة فقط
  String ssid   = prefs.getString("ssid", "");     // القيمة الافتراضية إن لم تُضبط
  int    every  = prefs.getInt("interval", 60);
  prefs.end();
}

استدعِ loadConfig() في setup() وستجد إعداداتك حاضرة بعد كل إعادة تشغيل، مع قيم افتراضية معقولة في المرة الأولى. هكذا تماماً تخزّن المكتبات بيانات اعتماد Wi-Fi.

EEPROM مقابل Preferences

على Arduino الكلاسيكي، الـ EEPROM عتاد حقيقي. أما على ESP فليس كذلك — إذ تحاكي EEPROM.h كتلة في Flash، تُعنوَن بالبايت ويسهل إفسادها. أما Preferences (NVS) فتمنحك مفاتيح مسمّاة وأنواعاً وموازنة تآكل بدلاً من إزاحات بايت خام. استخدمها في أي شيء جديد.

نفاد الـ RAM

الـ SRAM صغيرة، ومن السهل استنفادها أو تجزئتها:

ما الذي يُخزَّن أين — الجدول المرجعي

بمجرد أن تعرف أي ذاكرة متطايرة وأيها ليست كذلك، تتبخّر الألغاز: تبقى الإعدادات، وتتصرف المتغيرات كما ينبغي، ويتوقف نفاد الـ RAM.

هل تريد لقيمة أن تبقى بعد النوم العميق، لا مجرد إعادة التشغيل؟ تلك ذاكرة RTC.