自己動手「焊」鍵盤,使用Python編寫,一鍵放連招不在話下
這是一個內(nèi)部運行 Python 的開源鍵盤,可根據(jù)個人需求定制鍵盤映射。從此以后,「窮苦玩家」也能在 MOBA 游戲里一鍵放連招了,不知這樣算不算硬件外掛?「氪金玩家」請出門右轉(zhuǎn)購買宏編程鍵盤。
近日,一位中國開發(fā)者在 GitHub 上開源了一個帶有 USB 和藍牙的手工「焊」接 Python 鍵盤的代碼。該項目使用了 AdaFruit 的人員開發(fā)的 CircuitPython(衍生自 MicroPython)的特定實現(xiàn),該實現(xiàn)可以在容納 256K 的代碼空間和 16K 的 RAM 的虛擬機上運行。
這一 Python 鍵盤可以讓用戶輕松地使用 Python 編寫控制板。
項目地址:https://github.com/makerdiary/python-keyboard
下面我們就來看下這個 Python 鍵盤的具體操作和實現(xiàn)細節(jié)。
操作步驟
在 GitHub 上,作者詳細描述了制作這個 Python 鍵盤的操作步驟,總結(jié)起來包括:
1. 手工「焊」接鍵盤
下面這些圖展示了作者對這些鍵盤內(nèi)部結(jié)構(gòu)的改造。
去掉鍵盤帽扣,作者用焊絲把關(guān)聯(lián)按鍵連接起來,達到下圖這樣的效果。
最后,作者把一個能夠運行 Python 的開源控制板連接到鍵盤上。最終圖示如下。
2. 編程 Pitaya Go
第二步是對上圖中紅色設備的編程。作者在 Github 中編寫了詳細的指南,對 Pitaya Go 進行編程并燒寫到 Flash CircuitPython 固件上。
3. 下載 CircuitPython 庫
接下來,下載兩個 CircuitPython 庫:adafruit-ble 和 adafruit-hid,并將它們放入名為 CIRCUITPY 的 USB 驅(qū)動器里的 lib 目錄中,如下圖所示。
4. 復制代碼
最后一步是將 Python 的代碼復制到 code.py。重新加載 code.py 后,我們就可以獲得一個帶有 USB 以及藍牙的鍵盤了。
完整代碼作者也開源到 Github 項目中。
生產(chǎn)力升級
60%(61 鍵)的鍵盤缺少 F1~F12、方向鍵、PgUp、PgDn 等鍵位。該項目加入了 tmk_keyboard 項目中的鍵位映射功能,同時參考了 Toward a more useful keyboard 項目對于鍵位設置上的優(yōu)化理念,使得小鍵盤更具生產(chǎn)力「折騰才有樂趣,就是不買全鍵盤」!
- tmk_keyboard 項目地址:https://github.com/tmk/tmk_keyboard/blob/master/tmk_core/doc/keymap.md
- Toward a more useful keyboard 項目地址:https://github.com/jasonrudolph/keyboard
由于使用了 Python 編寫鍵位映射,我們可以很方便地對鍵位進行個性化定制「以后誰還需要宏編程鍵盤,大霧」。該項目自帶 Tap-key 功能,即按住一個鍵不放可激活替代功能模式,在 60% 鍵盤上擴展出更多鍵位。我們只需將 keyboard.py 與 keycodes.py 復制到 CIRCUITPY 目錄下,之后修改 code.py 導入新鍵盤,即可將按鍵 D 用作導航。
當僅想要輸出 D 時快速敲擊即可,而按住 D 不放則激活導航功能,變化后的鍵位如下圖所示。
此時 H、J、K、L 鍵分別被映射為上下左右方向鍵,而 U 與 N 則被映射為 PgUp 和 PgDn。
另外還支持同時按住兩個鍵(間隔小于 25 毫秒)激活替代功能模式,以及按住「;」鍵作為 Ctrl。
為什么要用 Python 寫?
這個項目在 hackernews 和 twitter 上都引來了不少人圍觀。多數(shù)人認為這是一個非常有創(chuàng)意的想法,之前沒見過這種操作。
但鑒于作者在項目中用的語言是 Python,大家不免擔心起速度問題。對此,作者回復稱,「確實有點慢,現(xiàn)在掃描一次矩陣需要 4 毫秒,但優(yōu)化之后速度會有提升?!?/p>
既然用 Python 速度慢,那為什么不用 C 語言寫呢?也沒有多復雜啊。作者表示,「項目中的硬件包含一個 QSPI 閃存,它是一個 USB 存儲,用來保存 Python 源代碼,你可以直接改 Python 代碼。而且,使用 Python 為快速驗證硬件產(chǎn)品的創(chuàng)意提供了一個新的方式。」
除此之外,也有人幫作者補充了使用 Python 的好處。ta 指出,這個項目用到的 CircuitPython 實現(xiàn)使用一個非常不同的 VM 運行,雖然不能指望它接近 C 的性能,但相比 Cpython 要輕量化得多。整個開發(fā)過程也會簡單得多。