RaspberryPi Helix
この記事は自作キーボード #2 Advent Calendar 2018 - Adventarの25日目の記事です。 昨日は@zeriyoshiさんの ALPS メカニカルキースイッチとその歴史でした。
TL;DR
- HelixのコントローラとしてRaspberry Pi Zero Wを使った
- Bluetoothキーボードをエミュレートした
- LEDを制御した
デモ
構成
リポジトリ
以下、作業メモです。
Raspberry Pi Zero Wのセットアップ
上記の記事がとても丁寧に書かれているので、これに従って設定していきます。以下に要点をメモっておきます。
OSイメージのダウンロード
今回使ったイメージは2018-11-13-raspbian-stretch-lite.img
です。
イメージのインストール
$ sudo ./install 2018-11-13-raspbian-stretch-lite.img
設定
$ touch /Volumes/boot/ssh # ssh有効化 $ vi /Volumes/boot/cmdline.txt # "modules-load=dwc2,g_ether"を追記 $ echo "dtoverlay=dwc2" >> /Volumes/boot/config.txt
インターネット共有
$ ssh pi@raspberrypi.local
Wifiの設定
$ sudo sh -c 'wpa_passphrase "wifi_ssid" < wifi_password >> /etc/wpa_supplicant/wpa_supplicant.conf' $ sudo wpa_cli reconfigure
ここまででラズパイが使えるようになりました。
Bluetoothキーボードのエミュレート
次はこの記事に従ってラズパイをBluethoothキーボードとして使えるようにします。
ツールのインストール
$ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get install python-gobject bluez bluez-tools bluez-firmware python-bluez python-dev python-pip python-gtk2 $ sudo pip install evdev
元記事からpython-gtk2
を追加しています。
Bluethoothデーモンの設定
$ sudo /etc/init.d/bluetooth stop $ sudo /usr/sbin/bluetoothd --nodetach --debug -p time
一度Bluethoothデーモンを止めて、立ち上げ直します。
ソースコードのクローン
元記事のソースをクローンしてきます。
$ git clone https://github.com/yaptb/BlogCode.git
DBUSの設定
$ cd BlogCode/btkeyboard/dbus $ sudo cp org.yaptb.btkkbservice.conf /etc/dbus-1/system.d
Bluetoothデバイスの有効化
$ sudo hciconfig hcio up
sudo hciconfig hcio
でBluetoothデバイスアドレスをメモっておき、BlogCode/btkeyboard/server/btk_server.py
のMY_ADDRESS
を書き換えます。
エミュレーターサーバーの起動
$ cd BlogCode/btkeyboard/server $ sudo python btkserver.py
ペアリング
$ sudo /usr/bin/bluetoothctl # agent on # default-agent # scan on # discoverable on
パスキーの確認が出たらyes
とタイプしてペアリング完了。
文字を送信してみる
$ cd BlogCode/btkeyboard/keyboard $ sudo python send_string.py hello_bluetooth!
ここまででラズパイをBluetoothキーボードとして使えるようになりました。
ラズパイとHelixをつなげる
あとはHelixとラズパイを配線し、キーマトリクスの状態をGPIOで読み出してやればオーケーなはずです。
配線図
Colは左右で共用しています。VCC, GNDは省略しています。
ファームウェア
LEDの制御
せっかくなのでLED制御もします。Helixに使われているLEDはSK6812MINIですが、
これでググっても情報が出てこないのでws2812 raspberry pi
などでググります。1
すると、しっかりとライブラリがあったので、次はこの記事をなぞります。
ツールのインストール
$ sudo apt-get install build-essential scons swig
ライブラリのインストール
$ git clone https://github.com/jgarff/rpi_ws281x.git $ cd rpi_ws281x && sudo scons && cd python && sudo python setup.py install
元記事はwgetを使っていますが、gitで。
配線
VCC, GNDは省略しています。
サンプルプログラムの実行
ピンとLED数を修正してrpi_ws281x/python/examples/strandtest.py
を実行します。
まとめ
- ファームはすごい適当ですが、思ったよりもちゃんと動いていた
- レイヤー機能がないです。ちゃんと使うなら必要
- LEDのパターンを増やしていきたい
この記事はpakbdを使って書かれました。
おまけ:うまくいかなかったこと
USB HIDデバイス化
最初は有線でラズパイをHIDデバイスとして使うことを考えていました。試して見ましたがうまくいきませんでした。OSのアップデートが原因っぽい?
スマートキーボード化
- 好きな言葉で呼びかけられるGoogle HomeをDIYする - Qiita
- Raspberry Pi にGoogle Assistant SDKを搭載して「OK Google」してみる。 - Qiita
Google Assistant SDKを動かして"OK Helix!"とやりたかったんですが、 やってみるとAssistant単体では動くんですが、キーボードのファームに組み込むとLEDが光らなくなりうまくいきませんでした。
ライブラリ内部で使っている何かが競合しているのか、単にタイミングの問題なのか、まだよくわかってないです。
-
QMKのファームを読んでみたら
ws2812
と書いてあったのを見つけました↩