{"product_id":"dstike-hackheld-ble-remote-esp32-s3-controller-with-oled-web-setup","title":"DSTIKE HackHeld BLE Remote — ESP32-S3 Controller with OLED \u0026 Web Setup","description":"\u003cdiv class=\"dstike-hackheld-ble-description\" lang=\"en\" style=\"line-height: 1.7; overflow-wrap: anywhere;\"\u003e\n\u003ch2\u003e\u003ciframe width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/01DN92gGJQs?si=Vau8lPER_ulZYlwz\" title=\"YouTube video player\"\u003e\u003c\/iframe\u003e\u003c\/h2\u003e\n\u003cp\u003e\u003ciframe width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/0mwy5tJxxcE?si=n1rwyMq6tf_e4XdF\" title=\"YouTube video player\"\u003e\u003c\/iframe\u003e\u003c\/p\u003e\n\u003cp\u003e\u003ciframe width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/7GmtwMGR91U?si=aTRu2J_0oLwX6Nq2\" title=\"YouTube video player\"\u003e\u003c\/iframe\u003e\u003c\/p\u003e\n\u003cp\u003e\u003ciframe width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/1RYSgfBENm0?si=AAYg9weACDMtjoYu\" title=\"YouTube video player\"\u003e\u003c\/iframe\u003e\u003c\/p\u003e\n\u003ch2\u003eYour Shortcuts. Six Buttons. One Handheld.\u003c\/h2\u003e\n\u003cp\u003e\u003cstrong\u003eDSTIKE HackHeld BLE Remote\u003c\/strong\u003e is an ESP32-S3 handheld platform for configurable Bluetooth Low Energy (BLE) media controls and presentation shortcuts. Its six physical buttons and OLED give your controls a dedicated interface. The BLE Remote firmware project adds three independent profiles and a local web page for changing button assignments.\u003c\/p\u003e\n\u003cdiv style=\"padding: 14px 16px; margin: 20px 0; border: 1px solid #d5dce5; border-radius: 8px; background: #f6f8fb; color: #253041;\"\u003e\n\u003cp style=\"margin: 0;\"\u003e\u003cstrong\u003eDevelopment firmware notice:\u003c\/strong\u003e The linked BLE Remote project is currently published as development source. Full ESP32-S3 build and physical-device validation are not documented as completed. Features below require compatible BLE Remote firmware installed on correctly configured hardware; factory installation is not implied.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch2\u003eThree Profiles for Everyday Controls\u003c\/h2\u003e\n\u003cp\u003eSelect \u003cstrong\u003ePhone\u003c\/strong\u003e for mobile media controls, or choose \u003cstrong\u003eComputer\u003c\/strong\u003e and then \u003cstrong\u003ePresentation\u003c\/strong\u003e or \u003cstrong\u003eMedia\u003c\/strong\u003e. Each profile has its own six assignments, giving you \u003cstrong\u003e18 independently configurable mappings\u003c\/strong\u003e.\u003c\/p\u003e\n\u003cdiv role=\"region\" style=\"max-width: 100%; overflow-x: auto; margin: 16px 0;\" tabindex=\"0\"\u003e\n\u003ctable style=\"width: 100%; min-width: 530px; border-collapse: collapse; text-align: left;\"\u003e\n\u003ccaption style=\"text-align: left; padding-bottom: 8px; font-weight: 600;\"\u003eDefault button mappings\u003c\/caption\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth scope=\"col\" style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003eButton\u003c\/th\u003e\n\u003cth scope=\"col\" style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003ePhone: Media\u003c\/th\u003e\n\u003cth scope=\"col\" style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003eComputer: Presentation\u003c\/th\u003e\n\u003cth scope=\"col\" style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003eComputer: Media\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003c\/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth scope=\"row\" style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003eUp\u003c\/th\u003e\n\u003ctd style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003ePrevious track\u003c\/td\u003e\n\u003ctd style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003ePage Up\u003c\/td\u003e\n\u003ctd style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003eVolume up\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth scope=\"row\" style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003eDown\u003c\/th\u003e\n\u003ctd style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003eNext track\u003c\/td\u003e\n\u003ctd style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003ePage Down\u003c\/td\u003e\n\u003ctd style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003eVolume down\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth scope=\"row\" style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003eLeft\u003c\/th\u003e\n\u003ctd style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003eVolume up\u003c\/td\u003e\n\u003ctd style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003eHome\u003c\/td\u003e\n\u003ctd style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003ePrevious track\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth scope=\"row\" style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003eRight\u003c\/th\u003e\n\u003ctd style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003eVolume down\u003c\/td\u003e\n\u003ctd style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003eEnd\u003c\/td\u003e\n\u003ctd style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003eNext track\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth scope=\"row\" style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003eA\u003c\/th\u003e\n\u003ctd style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003ePlay \/ Pause\u003c\/td\u003e\n\u003ctd style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003eF5\u003c\/td\u003e\n\u003ctd style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003ePlay \/ Pause\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth scope=\"row\" style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003eB\u003c\/th\u003e\n\u003ctd style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003eMute\u003c\/td\u003e\n\u003ctd style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003eEscape\u003c\/td\u003e\n\u003ctd style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003eMute\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003c\/div\u003e\n\u003cp\u003ePresentation commands depend on the active application. For example, F5 can start a slideshow in software using that shortcut. Change the assignments to match your workflow rather than assuming every presentation app uses the same keys.\u003c\/p\u003e\n\u003ch2\u003eConfigure Your Keys in a Browser\u003c\/h2\u003e\n\u003cp\u003eOnce the firmware is installed and operating, use \u003cstrong\u003eWeb Setup\u003c\/strong\u003e to edit assignments without changing source code or reflashing for each adjustment. The local page needs no companion app, cloud account or home Wi-Fi router.\u003c\/p\u003e\n\u003cp\u003eAssign a media command, a keyboard key with optional \u003cstrong\u003eCtrl, Shift, Alt or Win\/Cmd\u003c\/strong\u003e modifiers, or disable a button. Add a short OLED label using 1–12 printable ASCII characters and optionally enable hold-to-repeat on the four direction buttons.\u003c\/p\u003e\n\u003cp\u003eSave each profile separately, reload settings from the device, or restore one or all profiles to their defaults. Saved mappings are stored on the ESP32 and loaded again after restart.\u003c\/p\u003e\n\u003ch3\u003eHow Web Setup Works\u003c\/h3\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cstrong\u003eOpen setup:\u003c\/strong\u003e Select Web Setup and press A. Connect your phone or computer to \u003ccode\u003eDSTIKE-SETUP-XXXX\u003c\/code\u003e using the new 12-character password shown on the OLED.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eEdit and save:\u003c\/strong\u003e Manually open \u003ccode\u003ehttp:\/\/192.168.4.1\u003c\/code\u003e in your browser. Choose a profile, adjust its buttons, and click \u003cstrong\u003eSave this profile\u003c\/strong\u003e.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eReturn to Bluetooth:\u003c\/strong\u003e Click \u003cstrong\u003eExit setup\u003c\/strong\u003e or press B on the handheld, then select Phone or Computer.\u003c\/li\u003e\n\u003c\/ol\u003e\n\u003cp\u003e\u003cstrong\u003e Wi-Fi is for configuration, not simultaneous remote control. \u003c\/strong\u003e Entering setup disconnects BLE and pauses HID commands. Leaving setup turns Wi-Fi off. The setup hotspot has no Internet access and does not automatically open the configuration page.\u003c\/p\u003e\n\u003ch2\u003eOn-screen Labels and Simple Navigation\u003c\/h2\u003e\n\u003cp\u003eThe OLED interface shows the selected profile, connection state, button labels and last command sent. Up and Down navigate menus; A confirms. Hold \u003cstrong\u003eA + B for 1.2 seconds\u003c\/strong\u003e to return from a control screen.\u003c\/p\u003e\n\u003cp\u003eA and B perform their individual actions on release, preserving the return gesture. Direction-button repeat is optional; the defaults enable it for volume adjustment. A sent-command indication is not confirmation that the receiving application performed the action.\u003c\/p\u003e\n\u003ch2\u003eHandheld Hardware\u003c\/h2\u003e\n\u003cdiv role=\"region\" style=\"max-width: 100%; overflow-x: auto; margin: 16px 0;\" tabindex=\"0\"\u003e\n\u003ctable style=\"width: 100%; border-collapse: collapse; text-align: left;\"\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth scope=\"row\" style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003ePlatform\u003c\/th\u003e\n\u003ctd style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003eESP32-S3-based HackHeld32S3\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth scope=\"row\" style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003eDisplay\u003c\/th\u003e\n\u003ctd style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003e1.3-inch SH1106 OLED, 128 × 64 monochrome\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth scope=\"row\" style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003eControls\u003c\/th\u003e\n\u003ctd style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003eUp, Down, Left, Right, A and B\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth scope=\"row\" style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003eBattery\u003c\/th\u003e\n\u003ctd style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003eBuilt-in 1000mAh rechargeable battery\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth scope=\"row\" style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003eCharging\u003c\/th\u003e\n\u003ctd style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003eUSB-C\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth scope=\"row\" style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003eIndicator\u003c\/th\u003e\n\u003ctd style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003eWS2812B RGB LED\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth scope=\"row\" style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003eEnclosure\u003c\/th\u003e\n\u003ctd style=\"padding: 10px; border: 1px solid #d5dce5;\"\u003eTransparent handheld case\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003c\/div\u003e\n\u003ch2\u003eConnection and Compatibility\u003c\/h2\u003e\n\u003cp\u003e\u003cstrong\u003eNo dedicated receiver board is required\u003c\/strong\u003e for a host that supports BLE HID keyboard and media-control input. Pair through the host's Bluetooth settings. A computer without suitable Bluetooth hardware requires a compatible Bluetooth adapter.\u003c\/p\u003e\n\u003cp\u003eThe firmware supports \u003cstrong\u003eone connected host at a time\u003c\/strong\u003e. Phone and Computer select layouts, not specific paired devices. Disconnect the previous host when switching if it automatically reconnects.\u003c\/p\u003e\n\u003cp\u003eMedia keys and shortcuts depend on the operating system, Bluetooth support, player and active application; universal compatibility is not guaranteed. \u003cstrong\u003eMute\u003c\/strong\u003e sends a media-mute command, not a phone ringer, Do Not Disturb or microphone toggle.\u003c\/p\u003e\n\u003cp\u003eThis is a command controller, not an audio transmitter. The current firmware does not provide multi-step macros, DuckyScript execution, mouse control or browser-based firmware updates.\u003c\/p\u003e\n\u003ch2\u003eProject Source and Documentation\u003c\/h2\u003e\n\u003cp\u003eThe Arduino project, local configuration-page source and development notes are available on GitHub. Review the hardware pin checks, build settings and verification status before compiling or installing firmware. The current development repository does not supply a ready-to-flash firmware binary.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"https:\/\/github.com\/lspoplove\/HackHeld_BLE_Remote\" rel=\"noopener noreferrer\" target=\"_blank\"\u003e \u003cstrong\u003e Explore the HackHeld BLE Remote project on GitHub → \u003c\/strong\u003e \u003c\/a\u003e\u003c\/p\u003e\n\u003ch2\u003eHardware Package\u003c\/h2\u003e\n\u003cp\u003e1 × HackHeld32S3 handheld with built-in battery and enclosure.\u003cbr\u003e1 × USB-C cable.\u003c\/p\u003e\n\u003c\/div\u003e","brand":"DSTIKE","offers":[{"title":"Default Title","offer_id":49275845542071,"sku":null,"price":59.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0136\/5245\/9584\/files\/ChatGPT_2026_9_30_14_40_35.png?v=1790750446","url":"https:\/\/dstike.com\/products\/dstike-hackheld-ble-remote-esp32-s3-controller-with-oled-web-setup","provider":"DSTIKE","version":"1.0","type":"link"}