import { _ as _export_sfc, c as createElementBlock, o as openBlock, a8 as createStaticVNode } from "./chunks/framework.B9AX-CPi.js"; const __pageData = JSON.parse('{"title":"Wireless / Bluetooth","description":"","frontmatter":{},"headers":[],"relativePath":"features/wireless.md","filePath":"features/wireless.md","lastUpdated":null}'); const _sfc_main = { name: "features/wireless.md" }; const _hoisted_1 = /* @__PURE__ */ createStaticVNode('

Wireless / Bluetooth

Bluetooth Known Supported Hardware

Currently Bluetooth support is limited to AVR based chips. For Bluetooth 2.1, QMK has support for RN-42 modules. For more recent BLE protocols, currently only the Adafruit Bluefruit SPI Friend is directly supported. BLE is needed to connect to iOS devices. Note iOS does not support mouse input.

BoardBluetooth ProtocolConnection Typerules.mkBluetooth Chip
Roving Networks RN-42 (Sparkfun Bluesmirf)Bluetooth ClassicUARTBLUETOOTH_DRIVER = rn42RN-42
Bluefruit LE SPI FriendBluetooth Low EnergySPIBLUETOOTH_DRIVER = bluefruit_lenRF51822

Not Supported Yet but possible:

Adafruit BLE SPI Friend

Currently The only bluetooth chipset supported by QMK is the Adafruit Bluefruit SPI Friend. It's a Nordic nRF51822 based chip running Adafruit's custom firmware. Data is transmitted via Adafruit's SDEP over Hardware SPI. The Feather 32u4 Bluefruit LE is supported as it's an AVR mcu connected via SPI to the Nordic BLE chip with Adafruit firmware. If Building a custom board with the SPI friend it would be easiest to just use the pin selection that the 32u4 feather uses but you can change the pins in the config.h options with the following defines:

A Bluefruit UART friend can be converted to an SPI friend, however this requires some reflashing and soldering directly to the MDBT40 chip.

Bluetooth Rules.mk Options

The currently supported Bluetooth chipsets do not support N-Key Rollover (NKRO), so rules.mk must contain NKRO_ENABLE = no.

Add the following to your rules.mk:

make
BLUETOOTH_ENABLE = yes\nBLUETOOTH_DRIVER = bluefruit_le # or rn42

Bluetooth Keycodes

This is used when multiple keyboard outputs can be selected. Currently this only allows for switching between USB and Bluetooth on keyboards that support both.

KeyAliasesDescription
QK_OUTPUT_AUTOOU_AUTOAutomatically switch to USB when plugged in, otherwise use wireless
QK_OUTPUT_NEXTOU_NEXTCycle forwards through USB, Bluetooth, and 2.4GHz (when available) (not yet implemented)
QK_OUTPUT_PREVOU_PREVCycle backwards through USB, Bluetooth, and 2.4GHz (when available) (not yet implemented)
QK_OUTPUT_NONEOU_NONEDisable all output (not yet implemented)
QK_OUTPUT_USBOU_USBOutput to USB only
QK_OUTPUT_2P4GHZOU_2P4GOutput to 2.4GHz only (not yet implemented)
QK_OUTPUT_BLUETOOTHOU_BTOutput to Bluetooth only
QK_BLUETOOTH_PROFILE_NEXTBT_NEXTMove to the next Bluetooth profile (not yet implemented)
QK_BLUETOOTH_PROFILE_PREVBT_PREVMove to the previous Bluetooth profile (not yet implemented)
QK_BLUETOOTH_UNPAIRBT_UNPRUn-pair the current Bluetooth profile (not yet implemented)
QK_BLUETOOTH_PROFILE1BT_PRF1Swap to Bluetooth profile #1 (not yet implemented)
QK_BLUETOOTH_PROFILE2BT_PRF2Swap to Bluetooth profile #2 (not yet implemented)
QK_BLUETOOTH_PROFILE3BT_PRF3Swap to Bluetooth profile #3 (not yet implemented)
QK_BLUETOOTH_PROFILE4BT_PRF4Swap to Bluetooth profile #4 (not yet implemented)
QK_BLUETOOTH_PROFILE5BT_PRF5Swap to Bluetooth profile #5 (not yet implemented)
', 17); const _hoisted_18 = [ _hoisted_1 ]; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { return openBlock(), createElementBlock("div", null, _hoisted_18); } const wireless = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]); export { __pageData, wireless as default };