پروژه کنترل LED با وب و دکمه فیزیکی توسط ESP32
در این آموزش قصد داریم یک پروژه کاربردی با برد ESP32-WROOM-32 بسازیم که در آن یک LED هم از طریق مرورگر وب و هم بهصورت دستی توسط یک دکمه فشاری کنترل میشود.
در این پروژه، ESP32 به شبکه Wi-Fi متصل شده و یک صفحه وب ساده ایجاد میکند. کاربر میتواند با باز کردن این صفحه در مرورگر موبایل یا کامپیوتر، LED را روشن یا خاموش کند. علاوه بر این، یک کلید فیزیکی نیز به مدار اضافه میشود تا امکان کنترل مستقیم LED بدون نیاز به وب فراهم باشد.
یکی از نکات مهمی که در این پروژه یاد میگیریم، انتخاب صحیح پایههای GPIO در ESP32 است که در واقع هدف اول پروژه همین آمزش هست. برخلاف بسیاری از بردهای سادهتر، همه پایههای ESP32 برای استفاده عمومی مناسب نیستند. انتخاب اشتباه پایهها ممکن است باعث ایجاد مشکل هنگام راهاندازی، آپلود برنامه یا عملکرد نادرست مدار شود.
به همین دلیل در این پروژه از پایههایی استفاده میکنیم که برای کاربردهای عمومی و پروژههای آموزشی گزینههای مطمئنتری هستند.
معرفی کلی پروژه

هدف این پروژه ساخت یک سیستم کنترل LED مبتنی بر ESP32 است که دو روش کنترل را در اختیار کاربر قرار میدهد:
کنترل LED از طریق یک صفحه وب در شبکه Wi-Fi
کنترل LED با استفاده از یک کلید فیزیکی متصل به برد
در بخش نرمافزاری، ESP32 مانند یک وبسرور کوچک عمل میکند و یک رابط ساده برای تغییر وضعیت LED در اختیار کاربر قرار میدهد.
در بخش سختافزاری نیز یک دکمه فشاری به عنوان ورودی دیجیتال استفاده میشود تا بتوان وضعیت LED را بهصورت محلی تغییر داد.
این پروژه در ظاهر ساده است، اما یک نکته مهم درباره معماری ESP32 را آموزش میدهد: تمام پایههای GPIO این برد عملکرد یکسانی ندارند.
برخی پایهها برای حافظه داخلی فلش استفاده میشوند، بعضی فقط قابلیت ورودی دارند و برخی دیگر در فرآیند بوت شدن ESP32 نقش دارند. بنابراین قبل از اتصال قطعات، بهتر است نقشه پایههای ESP32-WROOM-32 را بررسی کرده و GPIO مناسب را انتخاب کنیم.
برای انتخاب پایهها در این پروژه از راهنمای Pinout برد ESP32-WROOM-32 استفاده شده است.
در این پروژه چه چیزهایی یاد میگیریم؟
با انجام این پروژه یاد خواهید گرفت:
نحوه اتصال LED به ESP32
نحوه اتصال کلید فشاری به عنوان ورودی دیجیتال
انتخاب پایههای مناسب GPIO برای پروژههای ESP32
ایجاد یک صفحه وب ساده توسط ESP32
کنترل خروجی برد از طریق مرورگر
خواندن وضعیت یک ورودی فیزیکی
جلوگیری از خطاهای رایج مربوط به انتخاب پایههای ESP32
چرا انتخاب GPIO در ESP32 اهمیت دارد؟
در بردهایی مانند Arduino Uno معمولاً بیشتر پایههای دیجیتال بدون نگرانی خاصی قابل استفاده هستند. اما ESP32 به دلیل امکانات بیشتر و معماری پیچیدهتر، نیازمند دقت بیشتری در انتخاب پایهها است.
برخی GPIOها در ESP32 به بخشهای داخلی ماژول متصل هستند و استفاده از آنها ممکن است باعث ایجاد مشکل شود. برای مثال:
پایههایی برای حافظه فلش SPI استفاده میشوند.
بعضی پایهها فقط قابلیت ورودی دارند.
برخی GPIOها روی حالت بوت برد تأثیر میگذارند.
استفاده نادرست از این پایهها میتواند باعث مشکلاتی مانند:
اجرا نشدن برنامه پس از روشن شدن برد
خطا هنگام آپلود کد
رفتار غیرمنتظره مدار
برای این پروژه از پایههای زیر استفاده میکنیم:
| عملکرد | پایه ESP32 | دلیل انتخاب |
|---|---|---|
| خروجی LED | GPIO 23 | پایه خروجی عمومی و مناسب |
| ورودی دکمه | GPIO 18 | پایه عمومی مناسب برای ورودی و خروجی |
این انتخابها برای پروژههای آموزشی و نمونههای اولیه مناسب هستند، زیرا از پایههای مربوط به حافظه فلش، پایههای فقط ورودی و مشکلات بوت جلوگیری میکنند.
قطعات مورد نیاز
| قطعه | تعداد |
|---|---|
| برد توسعه ESP32-WROOM-32 | 1 عدد |
| LED | 1 عدد |
| مقاومت 220 اهم | 1 عدد |
| کلید فشاری | 1 عدد |
| مقاومت 10 کیلواهم | 1 عدد |
| بردبورد | 1 عدد |
| سیم جامپر | چند عدد |
| کابل USB | 1 عدد |
اتصالات مدار
اتصال LED
| پایه ESP32 | اتصال |
|---|---|
| GPIO 23 | پایه مثبت LED (آند) از طریق مقاومت 220 اهم |
| GND | پایه منفی LED (کاتد) |
مقاومت 220 اهم برای محدود کردن جریان LED و محافظت از آن استفاده میشود.
اتصال کلید فشاری
| پایه ESP32 | اتصال |
|---|---|
| GPIO 18 | یک طرف کلید فشاری |
| 3.3V | طرف دیگر کلید |
| GPIO 18 به GND | اتصال مقاومت Pull-down با مقدار 10kΩ |
عملکرد این مدار به این صورت است:
زمانی که کلید فشرده نیست، پایه GPIO 18 مقدار LOW را دریافت میکند.
هنگام فشردن کلید، این پایه مقدار HIGH خواهد داشت.
نکات مهم در سیمکشی
ESP32 با منطق 3.3 ولت کار میکند. بنابراین هرگز نباید ولتاژ 5V را مستقیماً به پایههای GPIO متصل کنید؛ زیرا ممکن است باعث آسیب به برد شود.
همچنین بهتر است از پایههای GPIO 6 تا GPIO 11 استفاده نکنید، زیرا این پایهها معمولاً به حافظه SPI Flash داخلی ESP32 متصل هستند.
برای پروژههای آموزشی، استفاده از GPIOهای عمومی مانند موارد زیر انتخاب مناسبتری است:
GPIO 18
GPIO 19
GPIO 21
GPIO 22
GPIO 23
کد های پروژه :
در اینجاهم میتونید کدهای پروژه رو دانلود کنید
برای دریافت فایل های پروژه باید عضویت پایه داشته باشید، عضویت رایگان است
نرمافزارهای مورد نیاز
برای اجرای این پروژه به موارد زیر نیاز دارید:
Arduino IDE
بسته پشتیبانی بردهای ESP32 در Arduino IDE
یک شبکه Wi-Fi ( اتصال مودم )
قبل از آپلود برنامه، مطمئن شوید که برد صحیح ESP32 در تنظیمات Arduino IDE انتخاب شده است.

