🏗️ ساختار پروژه EVM-ESP32 – راهنمای کامل معماری و توسعه
📋 فهرست محتوا
معرفی پروژه
فلسفه طراحی
معماری لایهای
ساختار دایرکتوری
کامپوننتهای اصلی
سیستم ماژولار
مدیریت منابع
گردش کار توسعه
🎯 معرفی پروژه
EVM-ESP32 یک فریمورک پیشرفته و یکپارچه برای اجرای برنامههای JavaScript روی میکروکنترلر ESP32 است. این پروژه با رویکرد Common Peripheral Framework طراحی شده که امکان مدیریت یکپارچه سختافزار را فراهم میکند.
✨ فلسفه طراحی
ایجاد یک سیستم embedded با قابلیتهای سطح بالا:
🔄 توسعه سریع: نوشتن برنامه به زبان JavaScript بدون نیاز به کامپایل
🔧 مدیریت یکپارچه: کنترل تمام سختافزارها با APIهای استاندارد
📱 رابط کاربری: پشتیبانی کامل از رابطهای گرافیکی با LVGL
🌐 اتصال شبکه: شبکههای مختلف (WiFi, MQTT, HTTP, FTP, WebSocket)
⚡ کارایی: بهینهسازی برای منابع محدود embedded
🎯 اهداف کلیدی
انتزاع سختافزار: پنهان کردن پیچیدگیهای سختافزاری
قابلیت حمل: اجرای کدهای یکسان روی پلتفرمهای مختلف
امنیت: اجرای برنامهها در محیط sandboxed
کارایی: استفاده بهینه از منابع محدود
قابلیت توسعه: سیستم ماژولار و قابل گسترش
🏗️ معماری لایهای
مدل چهار لایهای EVM-ESP32
لایه ۱: درایورهای سختافزار و سیستم ← ESP32 SDK / FreeRTOS / LVGL لایه ۲: ماژولهای EVM ← APIهای استاندارد سختافزاری لایه ۳: موتورهای JavaScript ← QuickJS / MuJS / JerryScript / Duktape لایه ۴: برنامههای کاربر ← JavaScript Applications
لایه ۱: زیرساخت سختافزاری
ESP-IDF: چارچوب رسمی توسعه ESP32
FreeRTOS: سیستم عامل real-time برای مدیریت تسکها
درایورهای سختافزاری: کنترل مستقیم GPIO، ADC، PWM، I2C، SPI
LVGL: کتابخانه گرافیکی برای رابط کاربری
لایه ۲: ماژولهای EVM
Common Peripheral Framework: رابط یکپارچه برای همه سختافزارها
APIهای استاندارد: توابع ثابت برای همه ماژولها
مدیریت منابع: تخصیص هوشمند حافظه و منابع
سیستم رویداد: مدیریت رویدادهای ناهمزمان
لایه ۳: موتورهای JavaScript
پشتیبانی از چند موتور: QuickJS، MuJS، JerryScript، Duktape
مترجم و کامپایلر: تبدیل JavaScript به کد قابل اجرا
مدیریت حافظه: Garbage Collection و مدیریت heap
ماژولهای استاندارد: console، timer، fs، process

لایه ۴: برنامههای کاربر
برنامههای مستقل: هر برنامه در محیط خود اجرا میشود
سیستم فایل: ذخیرهسازی در SPIFFS یا SD Card
مدیریت برنامه: نصب، حذف، بهروزرسانی
رابط کاربری: صفحات LVGL با کنترل کامل
📁 ساختار دایرکتوری
ساختار منطقی پروژه
📁 evm-esp32/
📁 هسته اصلی سیستم/core
📁 ماشین مجازی EVM/evm_core
📁 مدیریت برنامهها/app_manager
📁 مدیریت منابع/resource_manager
📁 موتورهای JavaScript/engines
📁 ✅ QuickJS (ES2020)/quickjs
📁 ✅ MuJS (ES5)/mujs
📁 ✅ JerryScript (ES5.1)/jerryscript
📁 ✅ Duktape (ES5-ES6)/duktape
📁 مدیریت سختافزار/hardware
📁 درایورهای سطح پایین/drivers
📁 فریمورک مشترک/common_peripheral
📁 پیادهسازی ESP32/esp32_specific
📁 ماژولهای سیستم/modules
📁 ماژولهای سیستمی/system_modules
📁 ماژولهای شبکه/network_modules
📁 ماژولهای گرافیکی/gui_modules
📁 سیستم ذخیرهسازی/storage
📁 حافظه فلش داخلی/spiffs
📁 کارت حافظه خارجی/sd_card
📁 مدیریت دوگانه/dual_storage
📁 برنامههای کاربر/applications
📁 برنامههای سیستمی/system_apps
📁 برنامههای کاربران/user_apps
📁 مثالهای آموزشی/examplesساختار فیزیکی (برای ESP-IDF)
📁 evm-esp32/
📁 کد اصلی برنامه/main
main.c
evm_launcher.c
system_init.c
📁 کامپوننتهای ESP-IDF/components
📁 موتور JavaScript/evm_engine
📁 مدیریت سختافزار/hardware_manager
📁 کتابخانه گرافیکی/lvgl
📁 شبکه و پروتکلها/mongoose
📁 سیستم فایل/file_system
📁 جدول پارتیشنها/partitions
📁 تنظیمات SDK/sdkconfig
📁 فایلهای کامپایل/build🔧 کامپوننتهای اصلی
۱. 🧠 هسته EVM (EVM Core)
وظایف اصلی:
مدیریت موتورهای JavaScript
اجرای برنامههای کاربر
مدیریت حافظه و منابع
ارتباط بین ماژولها
ویژگیها:
✅ پشتیبانی از چند موتور
✅ مدیریت sandboxed environment
✅ Garbage Collection پیشرفته
✅ Debugging و profiling
۲. 📱 مدیر برنامه (App Manager)
وظایف اصلی:
اسکن و شناسایی برنامهها
بارگذاری و اجرای برنامهها
مدیریت چرخه زندگی برنامهها
کنترل دسترسی و مجوزها
گردش کار:
۱. اسکن دایرکتوری apps/ 🔍 ۲. ایجاد لیست برنامههای موجود 📋 ۳. بارگذاری برنامه انتخاب شده 🚀 ۴. اجرای برنامه در محیط ایزوله ⚡ ۵. پاکسازی منابع بعد از اتمام 🧹
۳. 🔌 مدیر سختافزار (Hardware Manager)
معماری Common Peripheral Framework:
// ساختار یکپارچه برای تمام peripheral ها typedef struct { evm_val_t jobject; // آبجکت JavaScript void* platform_data; // دادههای پلتفرم خاص bool initialized; // وضعیت مقداردهی اولیه } peripheral_t;
ماژولهای پشتیبانی شده:
GPIO (کنترل پینهای دیجیتال)
ADC (خواندن مقادیر آنالوگ)
PWM (مدولاسیون عرض پالس)
I2C/SPI/UART (ارتباطات سریال)
WiFi/Network (اتصال شبکه)
File System (مدیریت فایل)
۴. 🎨 سیستم گرافیکی (GUI System)
معماری مبتنی بر LVGL:
درایورهای ESP32 ← LVGL Core v8 ← ماژول LVGL ← برنامه کاربر
ویژگیها:
✅ پشتیبانی از تمام ویجتهای LVGL
✅ مدیریت حافظه پیشرفته
✅ انیمیشن و ترنزیشن
✅ پشتیبانی از فونت فارسی
✅ بهینهسازی برای نمایشگرهای کوچک
۵. 🌐 سیستم شبکه (Network System)
پشته شبکه کامل:
WiFi Driver ← LwIP Stack ← Mongoose Core ← برنامه کاربر
سرویسهای شبکه:
HTTP Server: REST API برای کنترل دستگاه
WebSocket Server: ارتباط real-time دوطرفه
MQTT Broker/Client: پیامرسانی IoT
FTP Server: انتقال فایل از راه دور
DNS/DHCP Client: مدیریت آدرسهای شبکه
🧩 سیستم ماژولار
ساختار ماژولها
هر ماژول دارای:
فایل پیادهسازی (
module_name.c)فایل هدر (
module_name.h)فایل binding (
module_binding.js)مستندات (
README.md)
طبقهبندی ماژولها
ماژولهای سیستمی (اجباری)
📦 ماژولهای سیستمی/system_modules
console.c # کنترل خروجی و لاگ
process.c # اطلاعات سیستم
timer.c # زمانبندی و تایمر
file_system.c # مدیریت فایل
memory.c # مدیریت حافظهماژولهای سختافزاری (بر اساس نیاز)
📦 ماژولهای سختافزاری/hardware_modules
gpio.c # کنترل پینهای دیجیتال
adc.c # خواندن مقادیر آنالوگ
pwm.c # کنترل موتور و LED
i2c_spi_uart.c # ارتباطات سریال
touch.c # سنسورهای لمسیماژولهای شبکه (اختیاری)
📦 ماژولهای شبکه/network_modules
wifi.c # اتصال WiFi
http_client.c # درخواستهای HTTP
mqtt.c # پروتکل MQTT
websocket.c # ارتباط real-time
ftp.c # انتقال فایلماژولهای گرافیکی (برای رابط کاربری)
📦 ماژولهای گرافیکی/gui_modules
lvgl_core.c # هسته LVGL
widgets.c # ویجتهای استاندارد
themes.c # تمها و استایلها
images.c # مدیریت تصاویر⚡ مدیریت منابع
سلسله مراتب حافظه
SD Card Storage (تا 32GB) ← آهسته، برای ذخیرهسازی بلندمدت SPI PSRAM (4-8MB) ← متوسط، برای برنامههای کاربر Internal SRAM (320KB) ← سریع، برای سیستم و kernel CPU Cache (8KB) ← بسیار سریع، برای دادههای حیاتی
تخصیص هوشمند حافظه
void* evm_malloc(size_t size, mem_type_t type) { switch(type) { case MEM_CRITICAL: return heap_caps_malloc(size, MALLOC_CAP_INTERNAL); case MEM_LARGE: return heap_caps_malloc(size, MALLOC_CAP_SPIRAM); case MEM_PERSISTENT: return malloc_spiffs(size); default: return malloc(size); } }
مدیریت CPU و انرژی
توزیع تسکها بین هستهها:
هسته ۰ (PRO CPU): رابط کاربری، مدیریت سیستم
هسته ۱ (APP CPU): اجرای JavaScript، پردازش داده
مدیریت انرژی:
تنظیم خودکار فرکانس CPU
خواب عمیق در حالت بیکاری
خاموش کردن ماژولهای غیرضروری
🔄 گردش کار توسعه
مراحل توسعه یک برنامه
۱. نوشتن کد JavaScript 📝 ۲. انتقال به دستگاه (FTP/USB/SD Card) 🔧 ۳. اجرای برنامه از لانچر 🚀 ۴. دیباگ و تست (Serial Monitor) 🐛 ۵. بستهبندی برای توزیع 📦
ابزارهای توسعه
برای توسعهدهندگان:
VS Code با پلاگین ESP-IDF
Serial Monitor برای دیباگ
ESP-IDF Tools برای کامپایل
Git برای کنترل نسخه
برای کاربران نهایی:
لانچر گرافیکی برای اجرای برنامهها
FTP Server برای انتقال فایل
Web Interface برای مدیریت از راه دور
OTA Updates برای بهروزرسانی
🎯 مزایای کلیدی معماری EVM-ESP32
۱. 🚀 سرعت توسعه بالا
نوشتن برنامه به جای کد C
کتابخانههای آماده برای تمام سختافزارها
تست سریع بدون نیاز به کامپایل
۲. 🔧 قابلیت نگهداری آسان
کدهای ماژولار و مستقل
مستندات کامل
سیستم مدیریت خطا
۳. 📱 تجربه کاربری بهتر
رابط گرافیکی با LVGL
کنترل از راه دور با وب
بهروزرسانی آسان
۴. 🌐 قابلیت اتصال گسترده
پشتیبانی از پروتکلهای مختلف
ارتباط با سرویسهای ابری
شبکههای محلی و اینترنت
۵. ⚡ بهینهسازی منابع
مدیریت هوشمند حافظه
مصرف انرژی بهینه
استفاده از سختافزار دو هستهای
🔮 آینده پروژه
توسعههای آتی
کوتاهمدت (۳-۶ ماه):
✅ بهبود پایداری سیستم
✅ افزودن ماژولهای جدید
✅ بهینهسازی عملکرد
میانمدت (۶-۱۲ ماه):
📦 Package Manager برای ماژولها
☁️ اتصال به سرویسهای ابری
🤖 Machine Learning روی دستگاه
بلندمدت (۱۲+ ماه):
🔄 پشتیبانی از پلتفرمهای دیگر
🎮 موتور بازی دو بعدی
🔊 پردازش صوت real-time
🏁 نتیجهگیری
EVM-ESP32 یک معماری پیشرفته و جامع برای سیستمهای embedded مبتنی بر JavaScript ارائه میدهد که:
از نظر فنی:
🏗️ معماری لایهای برای جداسازی نگرانیها
🧩 سیستم ماژولار برای قابلیت توسعه
⚡ مدیریت منابع هوشمند برای کارایی بالا
🔌 Common Peripheral Framework برای یکپارچگی سختافزار
از نظر کاربردی:
🚀 توسعه سریع برنامههای embedded
📱 تجربه کاربری غنی با رابط گرافیکی
🌐 اتصال گسترده با دنیای خارج
🔧 نگهداری آسان با کدهای ماژولار
این معماری نه تنها یک راهحل فنی، بلکه یک پلتفرم کامل برای نسل بعدی دستگاههای هوشمند embedded فراهم میآورد که در آن مرز بین توسعه embedded و توسعه وب محو میشود.
| لایه حافظه | نوع | اندازه | کاربرد | سرعت |
|---|---|---|---|---|
| کش پردازنده | داخلی | ۸ کیلوبایت | دستورات پردازنده | بسیار سریع |
| حافظه داخلی | داخلی | ۳۲۰ کیلوبایت | دادههای سیستمی | سریع |
| SPI RAM | خارجی | ۴-۸ مگابایت | حافظه موقت | متوسط |
| کارت SD | خارجی | تا ۳۲ گیگابایت | برنامهها و دادهها | آهسته |
📦 لینکهای مرجع و منابع
🔗 مخزن گیتهاب ESP32 EVM:
https://github.com/hadipic/esp32-evm-bin?tab=readme-ov-file
🔗 کانال تلگرام EVM:
https://t.me/esp32_evm
🔗 معرفی ماشین مجازی EVM در شاپ الکترونیک
https://shop-electronic.ir/ماشین-مجازی-جاوا-برای-امبد-بردها-evm-embedded-virtual-machi/
