
بردهای ESP32 جدا از قیمت پایین، بهدلیل انعطافپذیری بالا یکی از محبوبترین گزینهها برای علاقهمندان به الکترونیک و برنامهنویسی هستند. با افزودن چند مقاومت، خازن و بردبورد میتوان مهارت مدارسازی را با آنها تمرین کرد، یا با اتصال یک یا دو سنسور و نوشتن فریمور (Firmware) از طریق ESPHome، آن را به یک دستگاه هوشمند برای Home Assistant تبدیل کرد. اما حتی بدون این افزودنیها نیز کارهای زیادی میتوان با یک ESP32 انجام داد؛ بهویژه اگر سراغ مدلهای پیشرفتهتر از نسخه پایه برویم.
مدل ESP32-S3 نمونهای از همین دسته است. این میکروکنترلر کوچک علاوه بر توان پردازشی بالاتر، دو پورت USB دارد و یکی از آنها این امکان را فراهم میکند که برد، نقش لوازم جانبی معمول USB را شبیهسازی کند.
پورت USB بومی؛ ستاره اصلی ESP32-S3
اگر به دقت به یک برد ESP32-S3 نگاه کنید، پورتی با برچسب UART خواهید دید. این همان پورت متعارف ارتباط سریال (Serial Communication) است که معمولاً برای اتصال میکروکنترلر به رایانه و ریختن فریمور سفارشی روی آن استفاده میشود. اما موضوع اصلی این گزارش، پورت USB دیگر است.
این پورت که معمولاً با برچسب USB مشخص میشود، به کنترلر USB On-the-Go در ESP32-S3 متصل است و همین ویژگی باعث میشود رایانه آن را مانند هر لوازم جانبی ورودی/خروجی (I/O) دیگری بشناسد. البته از نظر فنی همچنان میتوان از این پورت برای برنامهریزی برد هم استفاده کرد، چون کنترلر JTAG به آن متصل است. اما از آنجا که این پورت قادر به تقلید دستگاههای متعارف USB است، میتوان ESP32-S3 را به هر چیزی تبدیل کرد؛ از یک ماوس و دسته بازی (Joystick) خانگی تا یک کیبورد کامل و حتی یک حافظه ذخیرهسازی، هرچند با ظرفیتی بسیار محدود.
نکته جذابتر آنکه میتوان از این قابلیت برای اجرای ماکرو (Macro) استفاده کرد؛ به این شکل که هر بار یک دکمه یا سنسور متصل به میکروکنترلر فعال شود، مجموعهای از فرمانها بهصورت خودکار اجرا شوند. این کار به عقیده بسیاری از توسعهدهندگان، بهترین کاربرد پورت USB بومی این برد است.
شبیهسازی کیبورد با آردوینو IDE و کتابخانه USBHID
برای ساخت یک ماکرو پد خانگی مبتنی بر ESP32-S3 که با رایانه شخصی کار کند و نه با Home Assistant، میتوان بهجای ESPHome از محیط توسعه آردوینو IDE استفاده کرد. در یک آزمایش عملی، از ماژول آنالوگ KY-023 که در کیتهای ارزان سنسور یافت میشود بهره گرفته شده و اتصال آن به برد از طریق سیمهای جامپر انجام شده است:
- پین GND برد به GND ماژول
- پین ۳.۳ ولت برد به پین ۵ ولت ماژول (برای جلوگیری از آسیب دیدن آن)
- پین VRx به GPIO4
- پین VRy به GPIO5
- پین SW به GPIO6
سپس پورت USB نوع UART برای اتصال برد به رایانه استفاده شده و تنظیمات پورت در آردوینو IDE تغییر داده شده تا برد ESP32-S3 بهدرستی شناسایی شود. در بخش کد نیز یک خودکارسازی ساده نوشته شده که هر بار فشار دادن اهرم آنالوگ، برنامه File Explorer را در ویندوز ۱۱ باز میکند.
در این کد، بخش #include "USBHIDKeyboard.h" کتابخانهای را فراخوانی میکند که به پورت USB بومی امکان تقلید یک کیبورد را میدهد و تابع openFileExplorer() تضمین میکند که با تشخیص هر فشار جدید، میانبر Win+E فعال شود. همچنین خط millis() - lastPressTime >= debounceTimeMs باعث میشود اگر اهرم آنالوگ بهصورت مداوم فشرده بماند، میکروکنترلر سیگنال ماکرو را پشت سر هم ارسال نکند؛ سازوکاری که بهعنوان حذف لرزش کلید (Debounce) شناخته میشود.
پس از بارگذاری فریمور روی برد، کابل از پورت UART جدا و به پورت USB بومی متصل شد و ماکرو پد خانگی بدون هیچ مشکلی کار کرد.
از یک دکمه تا صفحهنمایش لمسی
این آزمایش بهتنهایی بهرهوری چندانی ایجاد نمیکند، اما جذابیت واقعی زمانی آغاز میشود که ماکروهای بیشتری روی ساختار فعلی ساخته شود. برای نمونه، بهجای باز کردن File Explorer میتوان ترکیب Ctrl+Z را به فشار دکمه نگاشت کرد. از آنجا که KY-023 در واقع یک اهرم آنالوگ است، امکان تعریف فرمانهای متفاوت برای حرکات محور X و Y نیز وجود دارد.
و این تنها یک ماژول است. با یک بردبورد میتوان بهسادگی چند دکمه را به ESP32-S3 متصل کرد. حتی میتوان یک نمایشگر لمسی گرانتر را به برد وصل کرد، برای آن برنامه نوشت تا آیکونهای مختلف را روی صفحه نشان دهد و با استفاده از مختصات هر آیکون، هنگام لمس نمایشگر فرمانهای متفاوتی اجرا شود.