Hướng Dẫn Làm Tay Cầm Bluetooth ESP32 Cho PC, Android Và PlayStation
Chỉ với một board ESP32 giá rẻ, vài nút bấm và một joystick analog, bạn có thể tự làm một tay cầm chơi game không dây kết nối Bluetooth tới PC, điện thoại Android, TV Box hoặc phần mềm giả lập game phong cách PlayStation. Bài viết tổng hợp lại linh kiện, sơ đồ mạch và code mẫu cho dự án mã nguồn mở này.
Tổng quan dự án tay cầm Bluetooth ESP32
Dự án dựa trên board ESP32 — một vi điều khiển giá rẻ tích hợp sẵn WiFi, Bluetooth và ESP-NOW — kết hợp với thư viện mã nguồn mở ESP32-BLE-Gamepad để biến board thành một thiết bị HID gamepad chuẩn qua kết nối Bluetooth Low Energy. Nhờ vậy, mạch tự chế có thể được PC, điện thoại Android, TV Box hoặc các phần mềm giả lập game nhận diện như một tay cầm chơi game thông thường.
Code mẫu đi kèm hỗ trợ sẵn ba chế độ ánh xạ nút khác nhau (Android, “PS Gamepad”, PC), cho phép tuỳ chỉnh tên và thứ tự nút sao cho phù hợp với từng nền tảng hoặc từng phần mềm game cụ thể.
Linh kiện cần chuẩn bị (bản mạch breadboard cơ bản)
- Board ESP32
- ESP-WROOM-32 / Doit ESP32 DevKit V1
- Joystick module
- Joystick analog 2 trục (loại thumb joystick phổ biến)
- Nút bấm
- Vài nút momentary switch cho các phím chức năng
- Điện trở & tụ điện
- Một vài điện trở kéo (pull-up/down) và tụ điện lọc nhiễu
Các bước thực hiện
Dựng mạch breadboard
Cắm board ESP32, joystick module và các nút bấm lên breadboard theo sơ đồ tham khảo của dự án, nối các chân tín hiệu vào các GPIO còn trống của ESP32.
Cài board ESP32 cho Arduino IDE
Mở Arduino IDE → Preferences → thêm đường dẫn Boards Manager URL của Espressif, sau đó vào Boards Manager tìm và cài “ESP32” rồi khởi động lại IDE.
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
Cài thư viện ESP32 BLE Gamepad
Vào Sketch → Include Library → Manage Libraries, tìm và cài thư viện “ESP32 BLE Gamepad” (dựa trên NimBLE-Arduino). Thư viện phụ thuộc NimBLE sẽ được cài kèm hoặc cần cài thêm nếu IDE yêu cầu.
Tuỳ biến code theo mạch của bạn
Mở file code mẫu, chỉnh lại số chân GPIO trong mảng khai báo nút bấm sao cho khớp với cách bạn đã nối ở Bước 1, sau đó chọn chế độ gamepad mong muốn:
GamepadModes gamepadMode = ANDROID; // hoặc PS1 / PC
Nạp code và kiểm tra qua Bluetooth
Nạp code lên board, sau đó vào cài đặt Bluetooth trên điện thoại hoặc máy tính, ghép nối với thiết bị gamepad mới xuất hiện. Dùng ứng dụng kiểm tra gamepad (ví dụ “Gamepad Tester” trên Android) để xác nhận từng nút và joystick hoạt động đúng trước khi thử trong một game thực tế.
So sánh 3 chế độ Gamepad trong code mẫu
Code chia sẻ định nghĩa sẵn ba cách đặt tên và thứ tự nút khác nhau, có thể chọn một trong ba khi biên dịch.
| Chế độ | Tên các nút chính | Phù hợp khi nào |
|---|---|---|
| ANDROID | A, B, C, X, Y, Z, L1, R1, L2, R2, Select, Start, PS, L3, R3 | Kết nối với điện thoại/TV Box Android |
| PS GAMEPAD | Square, X, Circle, Triangle, L1, R1, L2, R2, Select, Start, L3, R3, PS | Chơi game/phần mềm giả lập theo phong cách PlayStation trên PC hoặc Android |
| PC | Tương tự ANDROID nhưng bỏ nút PS, đổi thứ tự một vài nút | Kết nối trực tiếp với máy tính Windows/macOS/Linux |
Cần lưu ý: “PS Gamepad” ở đây chỉ là cách đặt tên nút theo phong cách PlayStation để dễ nhận diện khi chơi game hoặc phần mềm giả lập, không phải là kết nối trực tiếp vào cổng controller của console PS1/PS5 thật.
Nâng cấp lên bo mạch PCB riêng (tuỳ chọn)
Sau khi mạch breadboard hoạt động ổn định, có thể thiết kế một bo mạch PCB riêng để gọn và bền hơn. Dự án gốc đã chia sẻ công khai một bản thiết kế hình dơi với danh sách linh kiện như sau:
| Linh kiện | Số lượng |
|---|---|
| Diode SB560 | 1 |
| Tụ điện 100uF 16V | 3 |
| Thumb joystick | 2 |
| IC ổn áp 7805CV | 1 |
| LED 3mm | 2 |
| Điện trở 220Ω | 2 |
| Điện trở 4.7KΩ | 6 |
| Doit ESP32 DevKit V1 | 1 |
| Nút nhấn momentary 12mm | 4 |
Bo mạch này cho phép cấp nguồn qua cổng USB của ESP32 khi thử nghiệm, hoặc qua nguồn ngoài 6–12V kèm jumper và IC ổn áp 7805 khi muốn mạch hoạt động độc lập, không cần kết nối máy tính.
Lưu ý khi thực hiện
Sai lệch ánh xạ trigger trên Android
Theo ghi chú của thư viện, Android dùng tên gọi khác cho trục trigger trái/phải (“GAS”/”BRAKE” thay vì trục trigger chuẩn), nên cần bật đúng tuỳ chọn mô phỏng tương ứng nếu muốn các trigger hoạt động chính xác trên Android.
Không có nghĩa là cắm được vào console gốc
Tay cầm này hoạt động qua Bluetooth LE chuẩn HID, chỉ tương thích với thiết bị hỗ trợ Bluetooth (PC, Android, TV Box, phần mềm giả lập), không cắm được vào cổng controller vật lý của các console không hỗ trợ Bluetooth.
Cần đúng điện áp khi dùng nguồn ngoài
Nếu cấp nguồn ngoài cao hơn dải hoạt động 6–12V của ESP32, cần dùng đúng mạch ổn áp đi kèm để tránh làm hỏng board.
Câu hỏi thường gặp
Tay cầm ESP32 này có cắm được vào cổng controller của máy PS1/PS5 gốc không?
Không. Đây là tay cầm Bluetooth LE tiêu chuẩn, được nhận diện như một gamepad HID trên PC, điện thoại Android, TV Box hoặc phần mềm giả lập; nó không cắm trực tiếp vào cổng controller vật lý của console PS1/PS5 gốc vì các console đó không hỗ trợ kết nối kiểu này.
“PS Gamepad Mode” trong code nghĩa là gì?
Đây là một chế độ ánh xạ tên nút theo phong cách PlayStation (Square, X, Circle, Triangle) trong code mẫu, giúp thuận tiện hơn khi chơi game phong cách PlayStation qua máy tính hoặc phần mềm giả lập, không liên quan đến việc cắm thẳng vào console PS1 vật lý.
Cần phần mềm gì để nạp code cho ESP32?
Cần Arduino IDE, thêm board ESP32 thông qua đường dẫn Boards Manager chính thức, và cài thư viện “ESP32 BLE Gamepad” cùng thư viện phụ thuộc NimBLE-Arduino.
Có thể tự thiết kế PCB riêng cho dự án này không?
Có. Người tạo dự án gốc đã chia sẻ công khai file Gerber cho một bản PCB hình dơi kèm danh sách linh kiện cụ thể, có thể đặt sản xuất qua các dịch vụ làm PCB theo yêu cầu.
Mạch được cấp nguồn như thế nào?
Có thể cấp nguồn qua cổng USB của board ESP32 để thử nghiệm, hoặc dùng nguồn ngoài trong khoảng 6-12V qua jumper kèm IC ổn áp 7805 nếu muốn mạch hoạt động độc lập, không cần kết nối máy tính.
Kết luận
Với chi phí linh kiện khá thấp và một board ESP32 phổ biến, bạn hoàn toàn có thể tự làm một tay cầm Bluetooth đa năng, dùng được cho cả PC, Android và các phần mềm giả lập game phong cách PlayStation. Phần khó nhất của dự án không nằm ở mạch điện mà ở việc tuỳ biến đúng pin mapping trong code cho khớp với cách bạn đã nối linh kiện — chỉ cần làm đúng bước này, mọi thứ còn lại khá đơn giản.
Bài viết tổng hợp dựa trên một dự án mã nguồn mở được chia sẻ công khai (giấy phép CC BY-SA), mang tính tham khảo. Trước khi bắt tay vào làm, nên tải code mẫu gốc và đọc kỹ comment trong file để hiểu rõ từng phần trước khi tuỳ biến.
