[自製QMK鍵盤-番外] 爲QMK鍵盤加上Bluetooth藍牙無線功能

系列:自製QMK鍵盤 Posted on 2022-02-21

現在的無線技術愈來愈發達,許多人更加喜歡無線的鍵盤與滑鼠,而我也是。QMK 已經有對部分藍牙(Bluetooth 或 BLE)模組的支援,只需要啓用就可以將 QMK 變成藍牙無線鍵盤。

本文將介紹如何啓用 QMK 的藍牙功能。

藍牙模組

根據 QMK 文件的說明,目前 QMK 正式支援的藍牙模組只有 2 種:

  1. Roving Networks RN-42:支援傳統藍牙(Bluetooth Classic)
  2. Adafruit Bluefruit LE SPI Friend:支援藍牙低功耗(Bluetooth Low Energy,BLE)

而多數人使用的應該是「Adafruit Bluefruit LE SPI Friend」這個模組,以下也以它爲例。

Adafruit Bluefruit LE SPI Friend(以下簡稱 Adafruit BLE)是 Adafruit 所推出 SPI 介面藍牙模組,上面搭載了勁達 Raytac 的 MDBT40 藍牙模組,而 MDBT40 模組則是搭載了 Nordic Semi nRF51822 這個主打 BLE 與 2.4 GHz 功能的 SoC。Adafruit BLE 內有燒錄爲其所寫的專屬韌體

因爲 Adafruit BLE 的韌體已經有實作藍牙 HID 的相關 AT 指令,所以 QMK 其實只是依照按下的按鍵,再透過 AT 指令讓 Adafruit BLE 完成與電腦間的通訊。

自製 Adafruit BLE 模組

Adafruit BLE 模組的價位有點高,但因爲它的韌體有在 GitHub 上,所以也可以自己買 MDBT40 或其它 nRF51822 模組來燒錄。我使用的就是自行燒錄的,詳細教學在這裡

不過要注意的是,MDBT40 和 nRF51822 有不同的版本規格,要選用 32 KB RAM、256 KB Flash Memory 的版本才行,也就是 MDBT40-256RV3 或 MDBT40-P256RV3 及 nRF51822-xxAC。

QMK

QMK 對於藍牙功能的相關資料在這裡:QMK: Bluetooth

rules.mk

要啓用藍牙功能的話首先要在 rules.mk 中加入這兩行:

1BLUETOOTH_ENABLE = yes
2BLUETOOTH_DRIVER = AdafruitBLE # or RN42

不過 QMK 的文件有提到「The currently supported Bluetooth chipsets do not support N-Key Rollover (NKRO)」,所以要關閉防鬼鍵(NKRO)的功能:

1NKRO_ENABLE = no

config.h

再來就是可以在 config.h 中加入以下的 SPI 腳位定義(可修改):

1#define ADAFRUIT_BLE_RST_PIN  D4
2#define ADAFRUIT_BLE_CS_PIN   B4
3#define ADAFRUIT_BLE_IRQ_PIN  E6

記得要選該微控制器上有 SPI 功能的腳位才行。

編譯並燒錄

完成上述 rules.mkconfig.h 的修改就可以直接編譯並燒錄了,就是這麼簡單。

接線

因爲我使用的是 Pro Micro (ATmega32U4),故以下將以它作爲示範。也需注意 RSTIRQCS 這三個的實際腳位是可以在 config.h 中修改的。

實際上要連接的線有 6 條訊號,再加 2 條電源(Vcc、GND)。

Adafruit Bluefruit LE SPI FriendnRF51822ATmega32U4Pro Micro
SCKP0.21PB1D15
MISOP0.22PB3D14
MOSIP0.23PB2D16
CSP0.24PB4D8/A8
IRQP0.25PE6D7
RST(SWDIO)SWDIO/NRESETPD4D4/A4
DFUP0.07
FACTORYRSTP0.16
MODE LED (Red)P0.18
CONNECTED LED (Blue)P0.19

要注意 nRF51822 本身的 IO 都是 3.3V 的,不是 5V。官方的 Adafruit BLE 上已經有邏輯電平轉換電路。

▲ 接好線後的樣子

▲ 接好線後的樣子

只有把線接好後上電,它就有藍牙的功能了。在 Windows 10 的「裝置」裡可以搜尋並配對到此藍牙裝置。

你可能會想在 Keymap 中加入藍牙控制的按鍵,請參考 Bluetooth Keycodes

效果展示

相關資訊

相關文章



留言可能不會立即顯示。若過了幾天仍未出現,請 Email 聯繫:)

comments powered by Disqus