
پروژه تبدیل کیبورد USB به کیبورد بلوتوث با ESP32-S3
در دنیای امروز که دستگاههای همراه و نیاز به تایپ سریع و راحت در هر مکان روزبهروز بیشتر میشود، کیبورد بلوتوث تمامسایز هنوز بهترین تجربهی نوشتن را ارائه میدهند. اما مشکل این است که بیشتر کیبوردهای قدیمی یا ارزانقیمت به صورت سیمی طراحی شدهاند و اتصال مستقیم به تلفن همراه یا تبلت همیشه ممکن نیست. پروژهای که در ادامه معرفی میکنم، همین مشکل را حل میکند: با استفاده از ESP32-S3 میتوان هر کیبورد USB را به یک کیبورد بلوتوث تبدیل کرد.
ایده کلی و مزایا
ایده بسیار ساده و در عین حال کاربردی است: ESP32-S3 از قابلیت USB-OTG سختافزاری پشتیبانی میکند. با استفاده از این قابلیت، میتوان ESP32-S3 را به عنوان میزبان (Host) برای یک کیبورد USB قرار داد و سپس دادههای HID (ورودی صفحهکلید) را از طریق بلوتوث به دستگاههای مختلف ارسال کرد. نتیجه این است که هر کیبورد USB، از جمله کیبوردهای مکانیکی بزرگ و خوشدست، میتواند به یک کیبورد بلوتوث تبدیل شود و با گوشی، تبلت، لپتاپ یا تلویزیون هوشمند جفت شود.
مزایای اصلی:
- استفاده از سختافزار واقعی USB-OTG بدون شبیهسازی نرمافزاری.
- پشتیبانی از چند دستگاه: امکان جفت شدن با تا سه دستگاه و سوئیچ سریع بین آنها با ترکیب کلید.
- تاخیر پایین: ارسال مستقیم گزارشهای HID باعث تجربهی پاسخدهی سریع میشود.
- سازگاری گسترده: کار با Windows، macOS، Linux، iOS، Android و حتی برخی Smart TVها.

مراحل نصب و راهاندازی پروژه روی ESP32-S3
این پروژه امکان اتصال کیبورد USB به ESP32-S3 و ارسال مستقیم دادههای HID از طریق بلوتوث (BLE) را فراهم میکند. در این بخش، مراحل نصب و راهاندازی پروژه بهصورت گامبهگام توضیح داده شده است.
1. پیشنیازهای سختافزاری
برای راهاندازی پروژه، موارد زیر مورد نیاز است:
- برد ESP32-S3 با پشتیبانی از USB-OTG
- کابل USB-C مناسب انتقال داده
- یک کیبورد USB
- یک USB Hub پاوردار (توصیهشده)
- منبع تغذیه 5 ولت برای USB Hub
نکته: پورت USB-C اغلب بردهای ESP32-S3 ولتاژ 5V را روی خط VBUS خروجی نمیدهد؛ بنابراین اتصال مستقیم کیبورد به برد معمولاً امکانپذیر نیست و استفاده از USB Hub پاوردار ضروری است.
2. پیشنیازهای نرمافزاری
- نصب Visual Studio Code
- نصب افزونه PlatformIO IDE
- نصب ابزار Git
3. دریافت سورس پروژه
ابتدا مخزن پروژه را کلون کرده و وارد پوشه آن شوید:
|
1 2 3 |
git clone https://github.com/KoStard/ESP32S3-USB-Keyboard-To-BLE cd ESP32S3-USB-Keyboard-To-BLE |
4. باز کردن پروژه در PlatformIO
- نرمافزار VS Code را اجرا کنید.
- از منوی PlatformIO گزینه Open Project را انتخاب کنید.
- پوشه پروژه کلونشده را باز کنید.
5. تنظیم برد هدف
فایل platformio.ini را باز کرده و برد مورد استفاده را بررسی کنید:
|
1 2 |
board = esp32-s3-devkitc-1 |
در صورت استفاده از بردی متفاوت، مقدار board را مطابق مدل برد خود تغییر دهید.
برد انتخابشده باید حتماً از USB-OTG پشتیبانی کند.
6. پیکربندی نام دستگاه بلوتوث
برای تغییر نام دستگاههای بلوتوث، فایل زیر را ویرایش کنید:
|
1 2 |
src/Config.h |
نمونه تنظیمات:
|
1 2 3 4 5 |
#define DEVICE_NAME_1 "USB-BLE Dev 1" #define DEVICE_NAME_2 "USB-BLE Dev 2" #define DEVICE_NAME_3 "USB-BLE Dev 3" #define DEVICE_MANUFACTURER "Custom" |
این نامها هنگام Pair شدن در سیستمعامل مقصد نمایش داده میشوند.
7. کامپایل پروژه
پس از اعمال تنظیمات، پروژه را کامپایل کنید:
|
1 2 |
pio run |
در صورت عدم وجود خطا، پروژه آماده آپلود خواهد بود.
8. آپلود روی ESP32-S3
برد ESP32-S3 را از طریق USB به کامپیوتر متصل کرده و فرمان زیر را اجرا کنید:
|
1 2 |
pio run -t upload |
پس از پایان فرآیند آپلود، برد بهصورت خودکار ریست شده و آماده استفاده خواهد بود.
9. اتصال کیبورد
در نهایت، کیبورد USB را از طریق USB Hub پاوردار به پورت USB-C برد ESP32-S3 متصل کنید. پس از روشن شدن برد، دستگاههای بلوتوث با نامهای تعریفشده آماده Pair شدن خواهند بود.
اجزای فنی و نحوه کار
سختافزار اصلی
- ESP32-S3: نسخهای از خانواده ESP32 که از USB-OTG پشتیبانی میکند و برای این پروژه نقش کلیدی را ایفا میکند.
- کیبورد USB: هر کیبوردی که از رابط USB استفاده کند.
- منبع تغذیه مناسب: مسئلهی مهمی که در ادامه مفصل توضیح داده میشود.
جریان داده
- کیبورد USB به پورت USB-C یا USB-A (بسته به برد توسعه) متصل میشود.
- ESP32-S3 به عنوان میزبان USB، گزارشهای HID را دریافت میکند.
- این گزارشها به صورت مستقیم به بلوتوث LE HID تبدیل و به دستگاههای جفتشده ارسال میشوند.
- کاربر میتواند با ترکیب کلیدهای تعریفشده بین سه دستگاه جفتشده سوئیچ کند.
ویژگیهای برجسته پروژه
- Native USB Host: استفاده از پشتیبانی سختافزاری USB-OTG در ESP32-S3، بدون نیاز به شبیهسازی نرمافزاری.
- Multi-Device Support: امکان جفت شدن با سه دستگاه و سوئیچ بین آنها با ترکیب کلید.
- Low Latency: ارسال مستقیم HID reportها برای تجربهی تایپ سریع و روان.
- Universal Compatibility: کار با سیستمعاملها و دستگاههای مختلف.
- ذخیره وضعیت فعال: اسلات فعال پس از ریبوت ذخیره و بازیابی میشود.
- نمایش وضعیت با LED: LED متصل به GPIO2 برای نمایش اسلات فعال با تعداد چشمکها.
جزئیات عملکرد سوئیچ چنددستگاهی
یکی از قابلیتهای جذاب این پروژه، سوئیچ بین سه دستگاه با استفاده از ترکیب کلیدها است. روش کار ساده و کاربردی است:
- Scroll Lock + 1 → سوئیچ به دستگاه 1 با نام USB-BLE Dev 1
- Scroll Lock + 2 → سوئیچ به دستگاه 2 با نام USB-BLE Dev 2
- Scroll Lock + 3 → سوئیچ به دستگاه 3 با نام USB-BLE Dev 3
مراحل پیشنهادی برای راهاندازی:
- با فشردن Scroll Lock + 1، اسلات 1 فعال میشود؛ سپس با دستگاه اول جفت شوید.
- با فشردن Scroll Lock + 2، اسلات 2 فعال میشود؛ سپس با دستگاه دوم جفت شوید.
- با فشردن ترکیبها میتوانید بین دستگاهها جابهجا شوید و اتصالها به سرعت تغییر میکنند.
نکته مهم: وضعیت اسلات فعال روی حافظه ذخیره میشود و پس از روشن شدن مجدد برد، همان اسلات بازیابی میشود. LED روی GPIO2 با تعداد چشمکها وضعیت اسلات را نشان میدهد.
مسئله تغذیه USB و راهحلها
یکی از مهمترین چالشهای عملی در این پروژه، تامین برق کیبورد USB است. بسیاری از بردهای توسعه مبتنی بر ESP32-S3 پورت USB-C آنها خروجی 5 ولت ندارد و حتی اگر برد از طریق پین 5V تغذیه شود، این تغذیه معمولاً به خط VBUS پورت USB-C منتقل نمیشود. بنابراین اگر کیبورد به پورت USB-C متصل شود، ممکن است برق لازم را دریافت نکند و کار نکند.
راهحلهای پیشنهادی:
- گزینه 1: هاب USB با تغذیه خارجی (توصیهشده)
- قرار دادن یک هاب USB دارای منبع تغذیه بین ESP32-S3 و کیبورد.
- هاب میتواند باتریدار باشد تا مجموعه کاملاً قابل حمل شود یا از یک منبع 5V سیمی استفاده شود تا نیازی به شارژ نداشته باشید.
- ساختار:
ESP32-S3 USB-C ──► [Powered USB Hub] ──► USB Keyboardو هاب از منبع 5V تغذیه میشود.
- گزینه 2: تغذیه مستقیم به کیبورد (تستنشده)
- تغذیه 5V و GND را مستقیماً به برد USB کیبورد متصل کنید و تنها خطوط داده (D+/D-) را از طریق ESP32-S3 عبور دهید.
- نیاز به کابل USB بریده یا برد بریکآوت دارد.
- این روش نیازمند دقت و آگاهی از سیمکشی و ایمنی است و ممکن است برای همه کیبوردها مناسب نباشد.
- گزینه 3: استفاده از برد توسعه ESP32-S3 با پورت USB-A میزبان
- برخی بردها مانند ESP32-S3-USB-OTG دارای پورت USB-A میزبان با خروجی 5V مناسب هستند؛ در این حالت نیازی به تغییرات یا هاب خارجی نیست.
- گزینه 4: تغییر سختافزاری برد توسعه (پیشرفته)
- برخی بردها دارای پدهای لحیمکاری هستند که میتوانند 5V را به VBUS USB-C متصل کنند. این کار نیاز به بررسی شماتیک برد و لحیمکاری دقیق دارد و برای کاربران مبتدی توصیه نمیشود.
راهاندازی نرمافزاری و ساخت پروژه
کلون کردن و ساخت پروژه
برای شروع کافی است مخزن گیتهاب پروژه را کلون کنید و با PlatformIO بسازید:
|
1 2 3 4 5 6 7 8 9 |
git clone https://github.com/KoStard/ESP32S3-USB-Keyboard-To-BLE cd ESP32S3-USB-Keyboard-To-BLE # Build with PlatformIO pio run # Upload to ESP32-S3 pio run -t upload |
پیکربندی اولیه
- نام دستگاه: در فایل
src/Config.hمیتوانید نام دستگاه و تولیدکننده را تغییر دهید:123#define DEVICE_NAME_1 "USB-BLE Dev 1"#define DEVICE_MANUFACTURER "Custom" - انتخاب برد: پروژه برای
esp32-s3-devkitc-1پیکربندی شده است. اگر از برد دیگری استفاده میکنید، مقدارboardرا درplatformio.iniتغییر دهید. برد شما باید از USB-OTG پشتیبانی کند.
محدودیتهای سختافزاری و مشکلات شناختهشده
محدودیت کانالهای USB Host
ESP32-S3 دارای محدودیت در تعداد کانالهای میزبان USB (HCD channels/pipes) است. این محدودیت زمانی خودش را نشان میدهد که شما یک هاب پیچیده یا کیبوردی با چندین اینترفیس مجازی متصل کنید (مثلاً کیبوردهای گیمینگ که هم کیبورد، هم ماوس و هم چند اینترفیس دیگر را معرفی میکنند).
علائم مشکل:
- در لاگ سریال پیامهایی مانند No more HCD channels available مشاهده میشود.
- برخی اینترفیسها یا دستگاهها مقداردهی اولیه نمیشوند.
توصیهها:
- از هابهای ساده استفاده کنید.
- از دستگاههایی که چندین اینترفیس مجازی معرفی میکنند پرهیز کنید یا آنها را جداگانه تست کنید.
- اگر نیاز به اتصال همزمان چند دستگاه پیچیده دارید، ممکن است لازم باشد از راهحلهای سختافزاری دیگر یا هابهایی با مدیریت بهتر استفاده کنید.
نکات عملی و توصیههای استفاده
- انتخاب کیبورد: کیبوردهای سادهتر و تک اینترفیس معمولاً بهترین سازگاری را دارند. کیبوردهای گیمینگ با نورپردازی، ماکروها و چندین اینترفیس ممکن است نیاز به بررسی بیشتر داشته باشند.
- تست قبل از استفاده روزمره: قبل از اینکه این تبدیل را برای کار روزمره یا سفر استفاده کنید، حتماً آن را با دستگاههای هدف تست کنید تا از سازگاری و پایداری اطمینان حاصل کنید.
- پایداری بلوتوث: بلوتوث LE HID معمولاً پایدار است، اما در محیطهای شلوغ رادیویی ممکن است تداخل وجود داشته باشد؛ در این حالت فاصله و موانع را کاهش دهید.
- پیکربندی نامها: نامهای دستگاه را طوری تنظیم کنید که هنگام جفت شدن در لیست بلوتوث دستگاهها قابل تشخیص باشند.
- پاوربانک مناسب: اگر میخواهید مجموعه قابل حمل باشد، از پاوربانکهایی استفاده کنید که خروجی 5V پایدار و جریان کافی برای کیبورد را فراهم کنند.
کاربردها و ایدههای توسعه
این پروژه فراتر از یک تبدیل ساده است و میتواند پایهای برای ایدههای خلاقانهتر باشد:
- ایجاد کیبورد بیسیم برای تبلتها و گوشیها: استفاده از کیبورد مکانیکی قدیمی برای نوشتن طولانی روی موبایل.
- ایستگاه کاری چنددستگاهی: یک کیبورد فیزیکی که بین لپتاپ، دسکتاپ و تبلت سوئیچ میکند.
- کیبوردهای سفارشی برای تلویزیونهای هوشمند: تایپ راحت در اپلیکیشنهای Smart TV.
- پروژههای آموزشی و آزمایشی: یادگیری USB Host و BLE HID با یک مثال عملی.
- افزودن امکانات نرمافزاری: مثلاً نگاشت کلیدها، ماکروها یا میانبرهای سفارشی در ESP32-S3 قبل از ارسال به دستگاه مقصد.
عیبیابی رایج
- کیبورد شناسایی نمیشود:
- بررسی کنید که کیبورد برق کافی دریافت میکند.
- از هاب تغذیهشده استفاده کنید یا روش تغذیه مستقیم را امتحان کنید.
- لاگ سریال ESP32-S3 را بررسی کنید تا پیامهای خطا را ببینید.
- خطاهای HCD channels:
- از هاب سادهتر استفاده کنید.
- دستگاههایی که چندین اینترفیس معرفی میکنند را جداگانه تست کنید.
- قطع و وصل بلوتوث یا تاخیر:
- فاصله و موانع بین ESP32-S3 و دستگاه مقصد را کاهش دهید.
- تداخل رادیویی را بررسی کنید.
- مشکل در سوئیچ بین دستگاهها:
- مطمئن شوید که هر اسلات به درستی جفت شده و نامها به درستی تنظیم شدهاند.
- وضعیت اسلات را با LED بررسی کنید.
جمعبندی و نتیجهگیری
پروژه ESP32-S3 USB to BLE Keyboard Bridge یک راهحل ساده، ارزان و بسیار کاربردی برای تبدیل کیبوردهای USB به کیبوردهای بلوتوث است. با استفاده از قابلیت USB-OTG سختافزاری ESP32-S3، میتوان تجربهی تایپ با کیبوردهای تمامسایز را به دستگاههای همراه آورد. مهمترین چالش عملی، تامین برق کیبورد است که با استفاده از هاب تغذیهشده یا بردهای توسعه مناسب قابل حل است. این پروژه نه تنها برای کاربران عادی مفید است، بلکه برای سازندگان، دانشجویان و علاقهمندان به سختافزار نیز یک نمونهی آموزشی عالی محسوب میشود.
این پروژه توسط KoStard توسعه یافته و کد و مستندات آن در گیتهاب موجود است: https://github.com/KoStard/ESP32S3-USB-Keyboard-To-BLE.



