BLE HEX Picker
January 8, 2026 · View on GitHub
This is a small helper firmware for ESP32 — an add-on companion to the main project https://github.com/Fi0nee/LS-Buttplug.
Purpose
- What: A firmware for experimenting with and testing manufacturer data HEX values used in BLE to control devices.
- Why: By discovering working values you can determine which byte sequences correspond to vibration levels and other device modes.
Where to put discovered values
- File: src/LS.h — the discovered values belong in the
manufacturerDataListarray used by the main project.
Example vibration profiles array
// ---------------- Channel values ----------------
static constexpr uint32_t CHANNELS[] = {
0xE50000, // Stop
0xF40000, // L1
0xF70000, // L2
0xF60000, // L3
0xF10000, // L4
0xF30000, // L5
0xE70000, // L6
0xE60000, // L7
};
Field notes
MANUFACTURER_DATA_PREFIX— the manufacturer prefix (fixed bytes before the command byte).- The second byte (for example
0xE5,0xF4, etc.) is the actual command / mode code for the device. - The last two bytes are commonly zero (
0x00, 0x00) and may be reserved for additional parameters.
How to use
- Flash the ESP32 with this firmware.
- Use the web UI served by the device to tweak/edit manufacturer data profiles and broadcast them to test device behavior.
- When you find working codes, copy the corresponding bytes into the
manufacturerDataListarray in src/LS.h of the main project (https://github.com/Fi0nee/LS-Buttplug).
Notes
- This repository is a helper firmware only — changes you want applied to the main firmware should be made in the
LS-Buttplugproject. - Test carefully: incorrect commands may cause unwanted device behavior.
Flashing (How to flash)
- Connect the ESP32 to your computer via USB.
- Install the PlatformIO extension in VS Code or install the PlatformIO CLI.
- Open this folder in VS Code (the root contains
platformio.ini). - Build and upload the firmware from the project folder:
pio run --target upload
Or use the PlatformIO UI in VS Code: PlatformIO: Upload.
What to change in code before flashing
- WiFi: set your WiFi SSID and password in
src/main.cpp. Edit these lines:
const char* WIFI_SSID = "YOUR_SSID";
const char* WIFI_PASS = "YOUR_PASSWORD";
-
Manufacturer data: if you want default profiles baked into the firmware, edit
manufacturerDataListinsrc/LS.hwith the values you want the device to advertise by default. -
Additional parameters: if your data format differs, adjust
MANUFACTURER_DATA_LENGTHandMANUFACTURER_DATA_PREFIXinsrc/LS.haccordingly.