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 the corresponding feature gate in your Cargo.toml:
RMK also provides BLE examples; check out nrf52840_ble, nrf52832_ble, pi_pico_w_ble, and esp32c3_ble for more details.
Since multiple targets are not currently supported by docs.rs, API documentation is not available on docs.rs. Check the examples for usage.
The following is the list of available feature gates (i.e., supported BLE chips):
RMK has special support for nice!nano, a widely used board for building wireless keyboards.
nice!nano has a built-in bootloader that enables flashing a .uf2 format firmware via USB drive. examples/use_rust/nrf52840_ble/README.md provides instructions for converting RMK firmware to .uf2 format.
You can also refer to the RMK user guide for the instructions.
RMK has multiple BLE profile support. The number of profiles can be set in the [rmk] section in the configuration; the default value is 3.
Vial user keycodes can be configured to operate wireless profiles. Suppose that you have N BLE profiles, then:
User0 - User(N-1): switch to a specific profileUserN: switch to the next profileUser(N+1): switch to the previous profileUser(N+2): clear current profile bond infoUser(N+3): switch default output between USB/BLEVial 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 to a profile, other devices will not be able to connect to this profile without manually clearing it first.
RMK also supports wireless split keyboards, where one of the splits acts as the central and the other splits act as peripherals. RMK also supports heterogeneous wireless split configurations; for example, you can use an ESP32S3 as the central and an nRF52 as a peripheral.
RMK provides many split keyboard examples in the examples folder. Check out the examples that end with _split.
For the configuration details, please refer to Configuration/Wireless section.