Wireless

RMK has built-in wireless(BLE) support for nRF52 series, ESP32 and Raspberry Pi Pico W. To use the wireless feature, you need to enable corresponding feature gate in your Cargo.toml:

rmk = { version = "...", features = [
    "nrf52840_ble", # Enable BLE feature for nRF52840
] }

RMK also provides BLE examples, checkout nrf52840_ble, nrf52832_ble, pi_pico_w_ble and esp32c3_ble for more details.

Due to multiple targets are not supported by docs.rs right now, so API documentations are not on docs.rs. Check examples for the usage.

Supported Microcontrollers

The following is the list of available feature gates(aka supported BLE chips):

  • nrf52840_ble
  • nrf52833_ble
  • nrf52832_ble
  • nrf52811_ble
  • nrf52810_ble
  • esp32c3_ble
  • esp32c6_ble
  • esp32s3_ble
  • pico_w_ble (for Raspberry Pi Pico W and Raspberry Pi Pico 2 W)

Nice!nano Support

RMK has special support for nice!nano, a widely used board for building wireless keyboard.

nice!nano has a built-in bootloader, enables flashing a .uf2 format firmware via USB drive. examples/use_rust/nrf52840_ble/README.md provides instructions to convert RMK firmware to .uf2 format.

You can also refer to RMK user guide about the instructions.

Multiple-Profile Support

RMK has multiple BLE profiles support. The number of profile can be set in [rmk] section in the configuration, the default value is 3.

Vial user keycode can be configured to operate wireless profiles, suppose that you have N BLE profiles, then:

  • User0 - User(N-1): switch to specific profile
  • UserN: switch to next profile
  • User(N+1): switch to previous profile
  • User(N+2): clear current profile bond info
  • User(N+3): switch default output between USB/BLE

Vial also provides a way to customize the displayed keycode, see customKeycodes in this example. If customKeycodes are configured, the User0 ~ User(N+3) will be displayed as BT0, ..., Switch Output.

If you've connected a host for a profile, other devices would not be able to connect to this profile before doing manually clearing.

Wireless Split Support

RMK also supports wireless split keyboard, which one of the splits acts as the central and while other splits as peripherals. RMK also supports heterogenous wireless split configuration, for example, use an ESP32S3 as central and a nRF52 as peripheral.

RMK provides lots of split keyboard examples in the example folder, checkout examples that ends with _split.

For the configuration details, please refer to Configuration/Wireless section.