📚 راهنمای جامع ماژولها و APIهای EVM JavaScript برای ESP32
چکیده (Meta Description)
این مقاله یک راهنمای کامل و عملی برای ماژولها و APIهای EVM JavaScript روی ESP32 است. با GPIO، ADC، DAC، Touch، WiFi، FileSystem و Timer آشنا شوید و پروژههای حرفهای امبدد بسازید.
مقدمه
ماشین مجازی EVM (Embedded Virtual Machine) یک بستر قدرتمند برای اجرای JavaScript روی بردهای ESP32 است که امکان دسترسی مستقیم به سختافزار را بدون نیاز به کدنویسی C فراهم میکند.
در این مقاله از شاپ الکترونیک، بهصورت کامل و عملی با مهمترین ماژولها و APIهای EVM JavaScript آشنا میشویم؛ ماژولهایی که هسته اصلی پروژههای:
- IoT
- HMI صنعتی
- ترموستات هوشمند
- کنترل صنعتی
- سیستمهای مانیتورینگ
را تشکیل میدهند.
🧠 معماری ماژولها در EVM JavaScript
EVM ماژولها را بهصورت Native Binding در اختیار JavaScript قرار میدهد. یعنی:
- سرعت بالا
- مصرف حافظه کم
- دسترسی مستقیم به سختافزار ESP32
- بدون سربار Node.js
🔌 ماژول DAC (خروجی آنالوگ)
ماژول DAC برای تولید ولتاژ آنالوگ و سیگنالهای ساده استفاده میشود.
مشخصات فنی DAC در ESP32
- ۲ کانال مستقل
- Channel 0 → GPIO25
- Channel 1 → GPIO26
- رزولوشن: 8 بیت (0 تا 255)
- محدوده ولتاژ: 0 تا 3.3V
مثال استفاده:
DAC.enable(DAC.CHANNEL_0);
DAC.generateSine(DAC.CHANNEL_0, 1000, 2000);
DAC.writeVoltage(DAC.CHANNEL_0, 1.5);
کاربردها
- تولید سیگنال تست
- مدار صوتی ساده
- کنترل ولتاژ
- راهاندازی درایورها
✋ ماژول Touch (تاچ سنسور ESP32)
ESP32 دارای تاچ سنسور داخلی است و EVM این قابلیت را بهصورت ایمن در اختیار شما میگذارد.
ویژگیها
- پشتیبانی از 10 پین تاچ
- کالیبراسیون هوشمند
- تشخیص لمس خودکار
- آزادسازی پین پس از استفاده
استفاده ایمن:
let value = Touch.read(Touch.PIN_0);
Touch.deinit(Touch.PIN_0);
let activePins = Touch.readAll();
📌 مناسب برای:
- کلید لمسی
- پنل لمسی
- تشخیص حضور
- HMI
📊 ماژول ADC (ورودی آنالوگ)
خواندن ولتاژ سنسورها و ورودیهای آنالوگ:
let voltage = ADC.read(ADC.CHANNEL_0);
let raw = ADC.readRaw(ADC.CHANNEL_1);
📌 کاربرد:
- سنسور دما
- سنسور نور
- ولتاژ باتری
- اندازهگیری آنالوگ
⚙️ ماژول PWM (کنترل سرعت و توان)
PWM.write(12, 1000, 50);
PWM.stop(12);
📌 کاربرد:
- کنترل موتور
- دیمر LED
- کنترل فن
- سروو موتور
🔗 ماژول I2C و SPI
I2C
I2C.begin(21, 22, 100000);
I2C.write(0x68, 0x6B, 0x00);
let data = I2C.read(0x68, 0x3B);
SPI
SPI.begin(23, 19, 18, 1000000);
let received = SPI.transfer(0x55);
📌 مناسب برای:
- سنسورها
- EEPROM
- LCD
- ماژولهای صنعتی
📡 ماژول UART (ارتباط سریال)
UART.begin(115200, 1, 3);
UART.write("Hello ESP32");
💾 ماژول FileSystem (مدیریت فایل)
fs.writeFileSync("/sdcard/data.json", "content");
fs.readFileSync("/sdcard/data.json");
fs.existsSync("/sdcard/data.json");
📌 مناسب برای:
- ذخیره تنظیمات
- لاگگیری
- فایل پیکربندی
- SD Card
🔌 ماژول GPIO (کنترل پایهها)
gpio.setDirection(12, gpio.OUTPUT);
gpio.write(12, gpio.HIGH);
خواندن دکمهها:
gpio.readButton(gpio.BUTTON_UP);
⏱️ ماژول Timer
Timer.setInterval(() => {
console.log("Running...");
}, 1000);
📌 مناسب برای:
- Task Scheduler
- Loop نرمافزاری
- تایمینگ دقیق
🌐 ماژول WiFi
WiFi.init();
WiFi.autoConnect();
📌 قابلیتها:
- Station / AP
- اتصال خودکار
- مدیریت IP
- اسکن شبکه
🖥️ ماژول Process (اطلاعات سیستم)
process.memoryUsage();
process.cpuUsage();
process.uptime();
📌 مناسب برای:
- مانیتورینگ
- دیباگ
- بهینهسازی مصرف حافظه
🧪 نمونه پروژه: مانیتورینگ سیستم
Timer.setInterval(() => {
let mem = process.memoryUsage();
console.log(`Memory usage: ${mem.usage}%`);
}, 5000);
✅ Best Practices
✔ آزادسازی منابع
✔ استفاده از Timer بهجای while
✔ مدیریت حافظه
✔ حذف پینهای بلااستفاده
❌ استفاده همزمان از منابع مشترک
❌ فراموش کردن deinit
❌ حلقههای بلاککننده
📌 لینکهای مرجع
🔗 گیتهاب EVM ESP32
https://github.com/hadipic/esp32-evm-bin
🔗 معرفی EVM در شاپ الکترونیک
https://shop-electronic.ir/ماشین-مجازی-جاوا-برای-امبد-بردها-evm-embedded-virtual-machi/
🎯 جمعبندی
EVM JavaScript یک تحول واقعی در برنامهنویسی امبدد است.
با استفاده از این ماژولها میتوانید پروژههایی سریع، پایدار، مدرن و صنعتی روی ESP32 پیادهسازی کنید؛ بدون پیچیدگی C و با قدرت JavaScript.
🎯 کلمه کلیدی کانونی (Focus Keyphrase)
EVM JavaScript ESP32
کلمات کلیدی مکمل
- ESP32 JavaScript
- EVM Embedded Virtual Machine
- برنامه نویسی ESP32 با جاوااسکریپت
- GPIO ESP32 JavaScript
- WiFi ESP32 EVM
- LVGL EVM
- FileSystem ESP32
- ADC DAC ESP32
- Touch Sensor ESP32
