📌 مقدمه
در توسعه و عیبیابی پروژههای میکروکنترلی با ESP32، یکی از چالشهای مهم برای توسعهدهندگان، مشاهده رفتار پینهای GPIO در زمان واقعی است. ابزار جدیدی به نام GPIOViewer این امکان را فراهم میکند که بتوانید وضعیت دیجیتال، PWM، ADC و سایر دادههای پینها را بهصورت زنده و گرافیکی مشاهده کنید — بدون نیاز به ابزارهای پیچیده مثل اسیلوسکوپ یا تحلیلگر منطقی.
🛠️ GPIOViewer چیست؟
GPIOViewer یک کتابخانه و ابزار مبتنی بر وب است که:
- با ESP32 کار میکند
- وضعیت پینهای GPIO را بهصورت زنده (Real-Time Monitoring) نشان میدهد
- رابط کاربری تحت وب دارد که از طریق Wi-Fi نمایش داده میشود
- مناسب برای توسعهدهندههایی است که میخواهند رفتار پینها را هنگام اجرا مشاهده کنند
این ابزار نهتنها به دیده شدن مقدار HIGH/LOW کمک میکند، بلکه برای سنسورها، PWM و ورودیهای آنالوگ نیز قابلاستفاده است.
📊 چرا به GPIO Viewer نیاز داریم؟
- دیباگ بدون ابزار: بدون نیاز به تجهیزات گرانقیمت، وضعیت منطقی پینها را ببینید.
- نمایش گرافیکی: مشاهده تغییرات سیگنالها روی نمودار (Plotter) به صورت آنی.
- مانیتورینگ حافظه: بررسی وضعیت حافظه RAM و PSRAM برای جلوگیری از کرش کردن برنامه.
- پشتیبانی از انواع بردها: از ESP32 معمولی تا S2، S3 و C3.
با GPIOViewer میتوان همهچیز را مستقیماً روی مرورگر مشاهده کرد و روند دیباگ را بسیار سریعتر کرد.
🚀 کاربردهای واقعی
🔹 عیبیابی سختافزار
🔹 بررسی پاسخپینها هنگام اجرای برنامه
🔹 توسعه پروژههای IoT با بررسی لحظهای پینها
🔹 ابزار آموزشی برای یادگیری رفتار ورودی/خروجیها
راهنمای جامع GPIO Viewer: مانیتورینگ زنده و گرافیکی پروژههای ESP32
مرحله ۱: نصب کتابخانه در Arduino IDE
برای شروع، ابتدا باید کتابخانه را به محیط توسعه خود اضافه کنید:
- نرمافزار Arduino IDE را باز کنید.
- به منوی Sketch > Include Library > Manage Libraries بروید.
- در کادر جستجو عبارت GPIOViewer را تایپ کنید.
- کتابخانه ساخته شده توسط The Last Outpost Workshop را پیدا کرده و روی Install کلیک کنید.
مرحله ۲: کدنویسی و استفاده از کتابخانه
استفاده از این ابزار بسیار ساده است. در اینجا یک کد نمونه استاندارد آورده شده که همزمان به وایفای متصل شده و پنل مدیریتی را فعال میکند.
#include <WiFi.h>
#include <gpio_viewer.h> // فراخوانی کتابخانه
GPIOViewer gpio_viewer; // ایجاد یک شیء از کلاس کتابخانه
const char* ssid = "YOUR_WIFI_SSID"; // نام وایفای شما
const char* password = "YOUR_WIFI_PASSWORD"; // رمز وایفای شما
void setup() {
Serial.begin(115200);
// ۱. اتصال به شبکه وایفای
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConnected to WiFi");
// ۲. نمایش آدرس آیپی در سریال مانیتور
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
// ۳. راه اندازی کتابخانه
// به صورت پیشفرض روی پورت 8080 اجرا میشود
gpio_viewer.begin();
// مثال: تعریف یک پین برای تست
pinMode(2, OUTPUT);
}
void loop() {
// یک چشمکزن ساده برای مشاهده تغییرات در پنل وب
digitalWrite(2, HIGH);
delay(1000);
digitalWrite(2, LOW);
delay(1000);
}
مرحله ۳: دسترسی به پنل مانیتورینگ
پس از آپلود کد روی برد ESP32:
- Serial Monitor را باز کنید تا آدرس IP برد را ببینید (مثلاً
192.168.1.15). - مرورگر خود (Chrome یا Edge) را باز کرده و آدرس زیر را وارد کنید:
http://192.168.1.15:8080(حتماً پورت 8080 را در انتها وارد کنید). - حالا پنل گرافیکی ظاهر میشود و میتوانید وضعیت پینها را ببینید.
قابلیتهای پیشرفته در نسخه جدید
۱. انتخاب تصویر برد (Board Selection)
در پنل وب، میتوانید از منوی تنظیمات، مدل دقیق برد خود را انتخاب کنید. با این کار، تصویر واقعی برد شما نمایش داده میشود و شماره پینها دقیقاً با سختافزارتان مطابقت پیدا میکند.
۲. نمودار تغییرات (Live Graphs)
با کلیک بر روی هر پین، یک نمودار در پایین صفحه باز میشود که تاریخچه تغییرات آن پین را نشان میدهد. این قابلیت برای بررسی سیگنالهای PWM یا سنسورهای آنالوگ فوقالعاده است.
۳. مدیریت حافظه (Memory Map)
این ابزار به شما نشان میدهد که چه مقدار از حافظه داخلی در حال استفاده است:
- Internal RAM: حافظه اصلی اجرای برنامه.
- PSRAM: حافظه جانبی (در صورتی که برد شما آن را داشته باشد).
۴. تنظیم نرخ نمونهبرداری (Sampling Interval)
شما میتوانید مشخص کنید که اطلاعات با چه سرعتی بروزرسانی شوند. مقدار پیشفرض ۱۰۰ میلیثانیه است، اما برای دیباگ دقیقتر میتوانید آن را کاهش دهید.
نکات کلیدی برای موفقیت در پروژه
- تداخل پورتها: اگر در پروژه خود از وبسرور دیگری روی پورت ۸۰ استفاده میکنید، نگران نباشید؛ GPIO Viewer به صورت پیشفرض روی پورت ۸۰۸۰ اجرا میشود تا تداخلی ایجاد نشود.
- مصرف منابع: این کتابخانه برای دیباگ طراحی شده است. پس از اتمام مراحل عیبیابی و برای نسخه نهایی محصول، بهتر است آن را از کد خود غیرفعال کنید تا منابع سیستم آزاد شود.
آیا میخواهید با نحوه بهینهسازی پارتیشنهای ESP32 برای فضای بیشتر آشنا شوید؟ در مقالات بعدی به این موضوع خواهیم پرداخت.

