Sparrow62 v2 の Firmware コード
keymap.py を書き換えて、自在にキーマップ ./keymap.pyを変更して楽しんで下さい。
左右分割キーボードを 1 個の Raspberry PI Pico と MCP23017 で実現するためのトリックが ./code.py に入っています。
Raspberry Pi PICO 用の Circuit Python のファームウェアをダウンロードして、インストールします。
https://circuitpython.org/board/raspberry_pi_pico/
インストールには、PICO 上のボタンを押しながら USB を接続すると、RP2 という USB メモリとして認識するため、その中に uf2 のファイムウェアのファイルを起きます。
必要な 2 つのライブラリが、submodule としてこのリポジトリに含まれています。
- MCP23017 のライブラリ: https://github.com/adafruit/Adafruit_CircuitPython_MCP230xx
- KMK Firmware: https://github.com/KMKfw/kmk_firmware
libs 内にない場合、以下のコマンドを実行してチェックアウトします。
git submodule update -i
Circuit Python がブートされると、CIRCUITPY という USB メモリとして認識するため、以下の 2 つのディレクトリを libs/ 内に置きます。
- libs/libs/Adafruit_CircuitPython_MCP230xx/adafruit_mcp230xx
- libs/kmk_firmware/kmk
また、RGB LED を点灯する NeoPixel モジュールをインストールします。 以下のリリースから、 adafruit-circuitpython-bundle-7.x-mpy-20220326.zip をダウンロードし、ZIP 中の lib/neopixel.mpy を、CIRCUITPY 内の libs/ 内に置きます。
https://github.com/adafruit/Adafruit_CircuitPython_Bundle/releases
以下の 2 つのファイルを、CIRCUITPY のルートディレクトリに置きます。
- boot.py
- code.py
- keymap.py
boot.py には、自動リロードをオフにする設定が入っています(ソースコードが置き換わる前に、リロードされるとエラーになるため)。
このリポジトリには、MacOS、Linux で使用できるアップロードコマンドが Python のタスクランナー Invoke で実装されています。
invoke、detect がインストールされている場合(もしくは poetry install を行った場合)、以下のコマンドでアップロードを実行できます。
# invoke, detect がインストールされている
inv -e upload
# poetry を使う場合
poetry run inv -e upload
詳しい実装は ./tasks.py をみてみてください。
Circuit Python の出力は、USB シリアルコンソールに出力されます。エラー時のエラーメッセージもこちらに表示されます。
接続の仕方はこちらを確認ください。
https://zenn.dev/link/comments/cc8372b5b0c7d4
初期起動時には LED の色は白色に光ります。その後、発色を抑えるなどをおこなってください。
レイヤーの切り替えのボタンを押したときに色を変えたい場合、以下のように実装できます。
なお、keyboard.pixels は kmk/extensions/rgb.py のクラス RGB
です。
mac_blue = (0, 0, 1) # R G B 0~255
# デフォルトレイヤーを偏向するボタン
kc_to_mac = KC.DF(mac_base_layer)
# 押下時のイベントで LED の色を変更する
kc_to_mac.after_press_handler(lambda *args: keyboard.pixels.set_rgb_fill(mac_blue))
この code.py には、モジュールの読み込みでエラーが発生した場合、自動的に 10 秒で再起動する処理が入っています。 慌てずに、kmk などライブラリを CIRCUITPY 内の lib/ に入れてください。
キーマップを開発している時、Python のコードのため、実行するまでエラーが含まれているかどうかがわかりません。 この code.py ではキーマップの読み込みでエラーになった場合、LED を赤色に変えて、さらに backup_keymap.py を読み込んで実行するようになっています。 ぜひ、動作する状態のキーマップを backup_keymap.py として保存しておいてください。
ソフトウェアリセットは supervisor.reload()
で行うことができます。
これをボタンを押したときに実行するキーコードとして以下のように実装できます。
def do_soft_reset(*args):
keyboard.pixels.set_rgb_fill(led_clear)
import supervisor
supervisor.reload()
reset = KC.NO.clone()
reset.after_press_handler(do_soft_reset)
Zenn にまとめています。