おかゆ++

IT業界の片隅で生き残るブログ

山崎実業のハンディーワイパースタンド「tower」がイケてる

机の上のお掃除どうしてますか?

普段リモートワーク(在宅ワーク、テレワーク)なので、仕事部屋の掃除も自分でやらないといけないんですよね。

デスクの周辺のホコリが気になるので、普段からハンディタイプのクイックルワイパーを使ってました。

クイックルワイパー フロア用掃除道具 ハンディ ブラック 本体

クイックルワイパー フロア用掃除道具 ハンディ ブラック 本体

  • 発売日: 2019/10/21
  • メディア: ヘルスケア&ケア用品

これめちゃくちゃ取れるんですよね。 ハンディワイパーっていっぱいあるし何なら100均にも売ってるけど、これはしっかりホコリが取れるんで気に入ってます。

ただこれをそのへんにポイッっておいてるのは、ちょっと見た目悪いなーと思ってたので、 スタンドを買ってみました。

山崎実業のハンディワイパースタンド。2020年3月時点で ¥1,430 でした。

ただのスタンドに1,400円はちょっとお高いんですが、これ金属製なんですよね。 そのおかげで、ハンディワイパーを取り出すときにスタンドが倒れない。 プラスチック製の安い商品とかだと、倒れて使いにくそうですよね。 細かいポイントだけどこれのおかげで非常に快適。

あと見た目もシンプルで、普段見えるところに置いても全然かっこ悪くない。 スマート。イケてる! 買ってよかった。

f:id:okayu-moka:20200328135001j:plain
見た目も気分もすっきり。買ってよかった

ASUS Chromebook C523NAを買いました! 使用感レビュー

f:id:okayu-moka:20200305231021j:plain最近、日本でもChromebookがゴリゴリにCMされてますね。 私はTVをほとんど見ませんが、YouTubeで何回もCMを見ました。

ということで、先日Chromebook C523NAを衝動買いしてしまったので、そのレビューです。

f:id:okayu-moka:20200314115744j:plain
はじめてAmazonアウトレットで買いました。普通に美品でラッキー

今回は Chromebook 全般に関してというよりは、このC523NA自体の評価をしていきたいと思います。

ChromebookChrome OS)全般に関しては過去記事で色々書いてますので、そちらもどうぞ。

okayu-moka.hatenablog.com

スペックとか

「RAMとROMがちょっとだけ多いエントリーモデル」という感じの機種です。

www.asus.com

ポイントは、15インチと大型サイズであること、キーボードがUS配列であること、重量が1.43kgと軽いこと。

f:id:okayu-moka:20200314113202j:plain
割と珍しい? 15インチのChromebook

f:id:okayu-moka:20200314115625j:plain
本体と付属品。電源アダプタは小型で軽量。USB Type-Cなのが今どきっぽい。

サイズ感

ベゼルが結構狭く、薄型・軽量なので、十分持ち運びが可能です。

Macbook Air 13inch 2013年モデルと比べるとこんな感じ。13インチと15インチですが、比べてもそこまでサイズに差はありません。

f:id:okayu-moka:20200314113157j:plain
Macbook Air 13inch 2013とに比較

重量はMacbook Airのほうが軽いですが、 実際に持ってみるとMacbook Airのほうがサイズに対して重量がある分「詰まっている」感じがして、 C523NAのほうが持ち運びやすいです。

インターフェース類

左側にはUSB Type-C、Micro SDカードリーダ、4pinイヤホンジャック、USB 3.0。 右側にはUSB Type-C、USB 3.0のみ。

f:id:okayu-moka:20200314113148j:plainf:id:okayu-moka:20200314113145j:plain
今どきっぽいポート類

充電はUSB Type-Cポートで行います。今どきっぽいですね。 左右どちらのUSB Type-Cポートからでも給電できます。これ便利ですよね。 Macbook Proなんかも同じ仕様ですが、作業場所によってポートを使い分けられるので、 狭いスペースでも充電しながら作業できます。

映像出力もUSB Type-Cから。付属品としてUSB Type-C→HDMIの変換ケーブルが付属しているので、困ることはなさそうです。

キーボードの使用感

実は今回この機種を選んだ理由の一つが、キーボードがUS配列であること。 普段からUS配列のキーボードを使っているので、ここはマストです。 最近のChromebook日本語配列のキーボードが増えたみたいで、逆にUS配列の機種のほうが少なくて選択肢が少なかったですね。

肝心の打鍵感ですが、「かなり安っぽいが、十分使える範囲」かなと思います。

まず、使っていると結構たわみます。打鍵感も「パチパチ」というよりは「ヘコヘコ」という表現のほうが合う感じ。 自分が他に持っているノートPCは Macbook Air 2013モデルしかないんですが、それと比べるとかなーーーーり安っぽいです。

f:id:okayu-moka:20200314114807j:plain
シンプルなUS配列。見た目はGoodだが、結構たわむ。

配列はごくごく普通のUS配列で、変な位置にFNキーがあったりもせず、すぐに馴染みました。 ストロークMacbook Air と同じくらいで、総じて「まぁ普通に使えるキーボードだな」という感想です。

あと、この機種に限った話ではないですが、Chromebookはキーボードのキー数が少なく、シンプルに整理されていて、 ここは非常に良いポイントだなぁと思いました。ちゃんとCapsLockをCtrlと入れ替えることもできるし、配列に不満はないです。

もう一つ不満を言うと、買った直後の状態だとChrome OS上では日本語配列になっていて、 キーボードの印字と違う文字が入力される状態になってたので、ここはちゃんと設定した状態にしておいてほしかったですね。 (Chrome OSの制限なのかもしれないですが)

ディスプレイ

買う前からわかっていたことですが、ここはあまり褒めるところがありません。

まず良いところから書くと、15インチというサイズはやはり作業しやすいです。 ディスプレイは、可搬性を損なわない範囲で可能な限り大きいサイズが正義です。 そういう意味でC523はベゼルも狭く、15インチノートパソコンとしてはかなりコンパクトなので、ここは非常にグッドです。

ただこのディスプレイ、TN液晶なんですよね。そのためか、非常に視野角が狭い。ベストポジションを外れると、かなり見えづらくなります。 液晶の発色自体もあまり褒められてものではなく、かなりギラギラしてて目がつかれます。せっかくのノングレアなのに……

まぁ、あえてこの液晶を採用してコストを抑えたりバッテリー駆動時間を伸ばしたりしてるんだろうから、あまり文句は言えません。 ただ買う人はちゃんとこの辺を把握しておいたほうがいいですね。でないと絶対後悔すると思います。

タッチパッド

最近のノートPCによくある、どこでもクリックできる&マルチタップ対応のタッチパッドです。

Chromebookタッチパッドでの操作が色々用意されていて便利ですね。 2本指・3本指でドラッグすることで、いろんな操作ができて快適です。

C523NAのタッチパッドはというと、まぁ可もなく不可もなくといったところ。 サイズが大きいのは非常に良いですが、若干滑りが悪いです。 見た感じはMacbookとソックリなタッチパッドですが、圧倒的にMacbookのほうが滑りが良くて操作しやすいです。

細かい作業がしたければマウスを使いましょう。

総評

  • スペックはエントリーモデルとしては一般的で、使用には問題なし。
  • 15インチと大型でありながら、1.43kgと軽く、比較的薄い。
  • キーボードがUS配列。
  • 液晶がマジで見づらい。
  • 全体的に安っぽく、曲がる・たわむ。

悪い点も目立ちますが、個人的には結構良い機種だと思っています。 やっぱ液晶は大きけりゃ大きいほどいいんだよ! と声を大にして言いたい。

ChromebookにLinuxを入れてまともなターミナルを得る

Chromebookを買って持ち歩いたりしていると、

「ちょっとした開発なんかもこのマシンでできないかなー」

なんて思ったので、ターミナルの環境を整えてみました。

はじめに

今回の目的は、あくまでターミナルを得ることです。 なんでターミナルがほしいかというと、そっからメインPCなりクラウドなりにsshして作業したいからです。

最初はGoogle Chrome拡張機能とかでsshできればそれで済ませるつもりでしたが、 日本語入力に難があり、結局Linuxを入れることになりました。

でも、LinuxVSCode入れたり とかはせずに、あくまでsshで作業することを目的にしてます。 でないと、ただでさえChromebookはストレージ容量が少ないのに、Linux入れてRuby入れてNode.js入れて……なんてやってたら あっという間にストレージが枯渇してしまいます。 なので、あんまり余計なアプリを入れずにきれいな環境にしておいたほうが無難だと個人的には思います。

SecureShellじゃだめなのか?

Google Chrome拡張機能ssh クライアントに、SecureShellというのがあります。 最初はこちらを導入したんですが、どうも Ctrl + Space での日本語切り替えが動かないっぽいです。 日本語が打てないのは作業に支障が出るので、SecureShellは今回は不採用。

補足1:SecureShellのウィンドウからフォーカスを外して、別のアプリ上で日本語に切り替えてからSecureShellに戻ってくると、一応日本語が打てる。 けど日本語入力のたびにウィンドウを切り替えるのはさすがに……

補足2:私が使っているのはUSキーボードのChromebookなので、日本語切り替えは Ctrl + Space で行います。 JIS配列のChromebookだとどうなんでしょ? 知ってる方いたら教えてほしいです。

Linuxを有効にする

まずChromebookの設定画面からLinuxを有効にします。

f:id:okayu-moka:20200314110547p:plain
設定画面からLinuxの設定へ
f:id:okayu-moka:20200314105622p:plain
Linuxの有効化

有効にすると、Linuxのダウンロードとインストールが自動で進みます。 インストールが完了すると、ターミナルが立ち上がります。

f:id:okayu-moka:20200314110443j:plain
Linuxのインストールが完了すると自動でターミナルが立ち上がります

ただ、残念ながらこのターミナルだとSecureShellと同じように日本語が打てません。無念すぎる。 しょうがないので、Linuxアプリ向けの日本語入力アプリケーションをインストールして日本語が打てるようにします。

フォントの追加など

Linuxインストール直後は日本語対応など中途半端なので、色々やっときます。

$ sudo apt update
$ sudo apt upgrade -y
$ sudo apt install -y task-japanese locales-all fonts-noto-cjk
$ sudo localectl set-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"
$ source /etc/default/locale

fcitx-mozcのインストールと設定

fcitx-mozc をインストールします。 インストール後、 fcitx-autostart で起動して、その状態で fcitx-configtool で設定を開きます。

$ sudo apt install -y fcitx-mozc fcitx-frontend-all
$ fcitx-autostart
$ fcitx-configtool

ここで、左下の+ボタンから mozc を追加して、日本語入力できるようにします。

f:id:okayu-moka:20200314110624p:plain
Mozcを追加

追加で、LinuxGUIアプリでfcitxが動作するように設定します。 /etc/systemd/user/cros-garcon.service.d/cros-garcon-override.conf環境変数を設定すればいいみたいです。

$ sudo sh -c 'echo Environment=\"GTK_IM_MODULE=fcitx\" >> /etc/systemd/user/cros-garcon.service.d/cros-garcon-override.conf'
$ sudo sh -c 'echo Environment=\"QT_IM_MODULE=fcitx\"  >> /etc/systemd/user/cros-garcon.service.d/cros-garcon-override.conf'
$ sudo sh -c 'echo Environment=\"XMODIFIERS=fcitx\"    >> /etc/systemd/user/cros-garcon.service.d/cros-garcon-override.conf'

最後に、fctixが自動起動するように、 ~/.sommelierrc に追記します。

$ echo '/usr/bin/fcitx-autostart' > ~/.sommelierrc

ターミナルを入れる

念願のターミナルを入れます。

インストール候補としては、

  • gnome-terminal
  • terminator
  • xfce4-terminal
  • hyper*1
  • mate-terminal

このあたりかなと思います。 色々試しましたが、どうも一部のアプリ*2だとfcitxの変換候補が表示されなかったり、 表示されても位置がおかしいことがありました。 今回は変換候補がちゃんと表示されるmate-terminalを使うことにしました。

mate-terminalをaptでさくっと入れます。

$ sudo apt install -y mate-terminal

インストールすると、ランチャーにアプリが追加されるので、そこから起動できます。

f:id:okayu-moka:20200314111005j:plain
mate-terminal

Ctrl + Space で日本語入力へ切り替えられます。

f:id:okayu-moka:20200314111151j:plain
日本語入力できるターミナルをゲット。やったぜ。

余談:Cicaフォントを導入する

いつも使っているCicaフォントにフォントを変更します。 Nerd Fonts や絵文字、アイコンなどがごっそり合成された便利フォントです。

wgetで取ってきて /usr/share/fonts の下にフォントファイルをコピーします。

$ mkdir ~/cica
$ cd ~/cica
$ wget https://github.com/miiton/Cica/releases/download/v5.0.1/Cica_v5.0.1_with_emoji.zip
$ unzip Cica_v5.0.1_with_emoji.zip
$ rm Cica_v5.0.1_with_emoji.zip
$ sudo mv Cica*  /usr/share/fonts/
$ fc-cache -f -v
$ cd ~/
$ rm -rf ~/cica

mate-terminalの設定からフォントをCicaに変更して、いつもどおりの環境を手に入れられました。

これで色々捗ります。

*1:hyperは色々プラグインがあって楽しいターミナルですよね。ただ、いかんせん重いのと、TrueColor未対応なのがネック。

*2:gtk3のアプリかな。多分。

なんとなくChromebookを買ったら、結構便利に使えているという話

最近日本でもCMが流れて猛烈プッシュされてるChromebook

「もうMacbook Air持ってるし、別にいらないかなー

とか言ってたのに……

f:id:okayu-moka:20200305192340j:plain
なんとなく買ってしまったChromebook ASUS 523

気がついたらAmazonでポチっていました。

衝動買いした割には結構便利に使っているので、Chromebook(ChromeOS)について思ったことを書いておこうと思います。 同じようにChromebookが気になっている人の参考になれば。

購入したのは ASUS C523NA という、エントリー向けの機種になります。 *1

www.asus.com

CPU インテル® Celeron® プロセッサー N3350
メモリ 8 GB
ストレージ eMMC: 64GB
ディスプレイ 15.6インチ LEDバックライト FHD (1920x1080) ノングレア

f:id:okayu-moka:20200305231021j:plain
Amazonで40,000円弱でした

エントリーモデルということで性能は控えめ。とはいえ一応15インチのフルHDだし、最廉価ゾーンよりは少しだけメモリもストレージも多い感じです。

正直買う前は「Celeronとかでほんとに大丈夫なんか」と思ってましたが、今のところあんまり不満はないです。やっぱりChrome OS軽いですね。

多分これにWindowsが乗ってたら、速攻でハードオフに売りに行くか、実家の両親に押し付けていたと思います。*2

基本はGoogle Chrome専用機という印象

Chromebookで何ができるのか?」については他のブログなどでも散々語られているのでそちらを見てもらうとして、 私が使っていて感じたことをつらつらと。

結局のところ、Chromebookは基本的にGoogle Chrome専用機です。

f:id:okayu-moka:20200305193957p:plain
まず最初にGoogle Chromeを立ち上げる

Androidアプリをインストールして使うこともできますが、そちらはやはりスマホタブレットに最適化されたインターフェースなわけで、あくまで補助的な意味合いが強そうです。

2-in-1モデルや完全にタブレットタイプのモデル、専用ペンがついているモデルなどもあるみたいですが、2-in-1はまだしも、 AndroidタブレットiPad + Apple Pencilに勝ってるところは(現時点では)ほぼないと思います。

というわけで、やはりキーボードやマウスやトラックパッドがついてる以上は、メインの用途はGoogle Chromeでのブラウジングになるかなーと思います。

Webで完結するならChromebookは有用

「じゃあ普通の安いWindowsマシンでええやんけ」と思うかもしれませんが、やはりそこは専用OSということで、意外なほどキビキビ動きます。

今回買った機種だと所詮はCeleronなので、重量級のサイトやWebアプリケーションを動かすには厳しいときもありますが、 普通にWebで生活している範囲で困ることはあんまりなさそうです。実際このブログ記事もChromebookで書いています。

同じ値段の安物Windowsを買うなら、Chromebook買うほうが幸せになれると思います。 ただChromebookは「できることが少ない分、できることは快適にできる」という代物なので、それも当然か、という気もします。

ようは、やりたいことがすべてブラウザ=Webで完結するなら、Chromebookは最も優れたPC足り得るな、というのが私の感想です。

大体のことはブラウザでやれる時代のPC

2020年現在、なにかPCでやりたいことがあったとして、 「これブラウザでできないのかな」って思って調べてみると、大体のことはできる気がします。

Webサイトを作ることも、絵を描くことも、音楽を作ることも、小説を書くことも、ゲームで遊ぶことも、 今は何でも専用のWebサイトやサービスがあり、ブラウザ上で何でもできてしまいます。

f:id:okayu-moka:20200305195753j:plain
話がそれるけど、Figmaほんま便利。ぜひ使ってみて

もちろん専用のアプリケーションには敵わないことも多いですが、 そういうときはChromebookじゃなくて、ハイエンドなノートPCだとかデスクトップPCだとかを使えばいいわけです。 スマホは持っていてもパソコンは持っていない人が急増しているという現実を見れば、 Chromebookは今求められているPCの形の一つなんじゃないか? と思います。

とはいえ、まだまだ使い込んだとは言えないレベルでしか触れていないです。せっかく買ったものだし、使い倒していきたいと思います。

手始めにブログの更新から! ということでこの記事を書いたのでした。おしまい。

*1:余談:メインPCのマザボとグラボもASUSやし、前に使ってたノートPCもASUSやし、結構ASUS好き

*2:両親いつもゴミを押し付けてごめん。

10.組み立て&完成【手配線で自作キーボードを作る講座】

f:id:okayu-moka:20190901155614p:plain

この記事は、【手配線で自作キーボードを作る講座】の第10回目です。 そのほかの記事はこちら↓

okayu-moka.hatenablog.com

フタ取り付け

完成へ向けてキーボードを組み立てていきます。

まずは筐体のフタをして、ネジ止めします。

配線の仕方が悪いと、フタが閉まらないこともあるかもしれません。 そのような場合、スペースに収まるように配線しなおすか、少し背のあるフタに作り直すなどの対処が必要です。

滑り止めを張る

滑り止め用のシリコンシールを貼っておきましょう。

張らなくても使えなくはないですが、3Dプリントした筐体は意外と滑ります。 キーボードの使用環境に合わせて張る・張らないを決めてください。 個人的には張っておいたほうが無難だと思います。

シリコンシールはAmazonで買えるほか、ホームセンター、100円ショップなどでも入手できます。

今回は100円ショップで購入したシリコンシールを貼りました。

f:id:okayu-moka:20190828175008j:plain f:id:okayu-moka:20190828175746j:plain

キーキャップ取り付け

満を持してキーキャップ取り付けです。

取り付け自体は難しくないですが、 力を入れて無理やり嵌めようとすると、まれにキーキャップ側の十字溝が割れてしまうことがあります。 あまり力を入れすぎないように注意してください。

f:id:okayu-moka:20190828180123j:plain

ホームポジションが分かりにくいとき

無刻印のキーキャップの場合、ホームポジション用の突起がないものがほとんどです。 慣れればそのままでも使うことはできますが、あったほうがいいという方は、ラインストーンシール(デコレーションシール)を張るのがおすすめです。 こちらもAmazonのほかに、100円ショップなどでも入手できます。

完成

最終動作確認して問題なければ、晴れて自作キーボードの完成です!

f:id:okayu-moka:20190830084841j:plain

ぜひ、自分オリジナルの自作キーボードを使い込んでください。 そして、不満点が出てきたら、どんどん改良していってください。

  • キー配置を変更してみる
  • キーキャップを取り換えてみる
  • キーキャップも自作してみる
  • 筐体を塗装してみる
  • 別の配列の自作キーボードを作る

まだまだ自作キーボードの道は始まったばかりです。

自分が「これだ!」と思うキーボードが完成するまで、試行錯誤しながら頑張ってください!

9.配線その2(ProMicro部分)【手配線で自作キーボードを作る講座】

f:id:okayu-moka:20190901155550p:plain

この記事は、【手配線で自作キーボードを作る講座】の第9回目です。 そのほかの記事はこちら↓

okayu-moka.hatenablog.com

3.5mm ミニジャックの固定

配線の前に、3.5mm ミニジャックを筐体に固定しておきます。

グルーガンで固定します。 あまりたくさんつけるとミニジャックの穴の中に入ってしまうので注意してください。

f:id:okayu-moka:20190825182935j:plain

ProMicroのモゲ対策

ProMicroのMicroUSB端子は耐久性が低いことで有名です。 強い力が加わると、基板から剥がれて壊れてしまうことがあります。(いわゆる "モゲMicro")

モゲ対策のために、ホットボンドで補強をします。 ホットボンドはそこまで接着力が強くはないので、あまりに強い力がかかるとやはり壊れてしまいますが、 何も対策しないよりは断然強度が上がります。

端子の穴にホットボンドが入らないよう、マスキングテープで保護してからホットボンドで補強します。

f:id:okayu-moka:20190825180406j:plain f:id:okayu-moka:20190825181311j:plain

完璧に対策したい場合は、エポキシ系接着剤で固定するとよいでしょう。 もしくは、マグネット式のケーブルを使って端子の抜き差しをしないようにするのも有効です。

配線の手順について

配線の手順ですが、2パターン考えられます。

  • ProMicroにケーブルをはんだ付けして、次にスイッチと配線する
  • スイッチに配線して、次にProMicroに配線する

簡単なのはProMicroから先に配線する方法だと思います。

またどちらの手順でも、電線はあらかじめカットしておいたほうが作業しやすいと思います。 最後に無駄な部分はカットするために少し電線が無駄になりますが、作業のしやすさを優先します。

ProMicroへのはんだ付け

ProMicroから配線を伸ばします。

前述のとおり長めにカットした同線の被膜を剥いで 細く捻じってから、 先に電線だけをはんだ付けしておきます。

f:id:okayu-moka:20190826180916j:plain f:id:okayu-moka:20190826181532j:plain

ProMicroに差し込んで、はんだ付けします。 作業しやすいようにアームなどで固定すると良いでしょう。

f:id:okayu-moka:20190826182904j:plain f:id:okayu-moka:20190826182958j:plain

あまりきれいにできてませんが、とりあえずはんだ付けできました。 この調子で、使用するピンすべてに電線を取り付けていきます。

f:id:okayu-moka:20190826183522j:plain f:id:okayu-moka:20190826183905j:plain

最後にはみ出た部分をニッパーで切り落として、はんだ付け完了です。

f:id:okayu-moka:20190826184406j:plain

キースイッチとProMicroの配線

以前に作成した回路図を見ながら、キースイッチとProMicroを配線していきます。

この時注意が必要なのが、回路図がキーボードを表から見た時の図になっていることです。

f:id:okayu-moka:20190901143050p:plain

この回路図を実際のキーボード上に重ねると、次のようになります。

f:id:okayu-moka:20190907181549j:plain

列方向は左から、A2、A1、A0、15、14、16、10となっています。 しかし実際に配線するときは裏面から作業するので、列方向の順番が見た目逆になります。

f:id:okayu-moka:20190907181659j:plain

このように、左から10、16、14、15、A0、A1、A2となるように配線します。

それでは実際に配線していきます。 電線をケースの隙間に這わせるようにしながら、各キースイッチの行と列にはんだ付けしていきます。

はんだ付けの際は、あらかじめ電線のほうに予備はんだをしておきます。 細かい作業になるので、テープやクリップなどで電線の位置を固定しながら作業するとやり易いでしょう。

f:id:okayu-moka:20190826190820j:plain f:id:okayu-moka:20190826191132j:plain

すべての電線を配線し終えたのが次の写真です。

f:id:okayu-moka:20190826195532j:plain

今回の例ではちょっと電線が長すぎました。 短くて届かない状況よりはマシですが、配線時に必要十分な長さにカットすればよかったです。

ProMicroの固定

配線が終わったら、ProMicroをグルーガンで固定します。

f:id:okayu-moka:20190826195533j:plain

これで片手分完成です! もう片手分、頑張りましょう。

動作確認

両手分の配線が完了したら、動作確認していきましょう。

f:id:okayu-moka:20190828174521j:plain

  • フタはちゃんと閉まりますか?
  • すべてのキーが正しく動作するか?

動作しない場合の確認点

  • 電線が干渉してフタが閉まらない
    • スペースを探して電線を這わせましょう。
  • 特定のキーのみ動かない
    • 動かないキーの配線はきちんとできていますか?
    • キースイッチ自体の品質は問題ないですか? テスターなどで確認してみましょう。
      • キースイッチ自体に問題があるなら取り替えましょう。
  • 特定の列/行のキーのみ動かない
    • 動かない列/行のProMicroへの配線はきちんとできていますか?
    • ProMicroのピンと、QMK Firmwareで指定したピンは一致していますか?
  • 右側のキーボードが反応しない
    • 右側のキーボードを直接つないだ時は動作しますか?
      • 右側だけつないだときは、左手用として動作します。
      • 問題なく動くなら、左右の接続が正しくできていないと思われます。
      • 右側単体でも動かないなら、まずは右側のどこに問題があるか調査しましょう。
    • VCC、GND、通信用ピンが正しく配線できていますか?
    • QMK Firmwareで指定した通信用ピンの配線はあっていますか?
    • Micro USBケーブル、オーディオケーブルを変えてみても発生しますか?

問題なく動作したら、あとはもう最後の仕上げだけです!

次の記事:

okayu-moka.hatenablog.com

8.QMK Firmwareの設定と書き込み【手配線で自作キーボードを作る講座】

f:id:okayu-moka:20190901155543p:plain

この記事は、【手配線で自作キーボードを作る講座】の第8回目です。 そのほかの記事はこちら

QMK Firmwareの入手

QMK Firmwareの本体はGitHubから取得できます。

github.com

また、ビルド環境の構築方法や書き込み手順などは、公式サイトおよびドキュメントに記載されています。 なにか困ったらここを確認するようにしてください。

qmk.fm

docs.qmk.fm

必要なソフトウェアのインストール

QMK Firmwareのアップデートなどによって色々と変更されることもあるため、ここではあまり詳細な手順は紹介しません。 基本的には公式ドキュメントの Getting Started を見て進めてください。

公式ドキュメントが英語で少々敷居が高いですが、日本語で解説している記事なども多くありますので、 随時調べながら作業していきましょう。

Window、MacLinuxでそれぞれ必要なソフトが異なってきます。 ご使用の環境に合わせてセットアップしてください。

QMK Firmware Getting Started

Windowsの場合の例

以下、2019/08/24 時点でのWindowsの場合の手順を記載します。 前述のとおり手順が変更されている可能性もあるため、基本的に公式ドキュメントを正として、以下は参考程度にしてください。

MSYS2をダウンロードします。環境に合わせて、32bit版か64bit版のどちらかを選んでください。 ダウンロード後、インストーラに従ってインストールします。

www.msys2.org

インストール完了後、MSYS2を起動して、以下のコマンドでGitをインストールします。

$ pacman -S git

Git を使って、QMK Firmware を取得します。

$ git clone --recurse-submodules https://github.com/qmk/qmk_firmware.git

Cloneした中に util/qmk_install.sh というスクリプトがあるので、実行すると必要なソフトがインストールされます。 途中何度かインストール対象を選択する場面がありますが、おおよそ "All" や "Yes" を選択しておけば問題ないです。

$ git clone --recurse-submodules https://github.com/qmk/qmk_firmware.git
$ cd qmk_firmware
$ util/qmk_install.sh

インストールできたら、ビルドが正常にできるかテストしてみます。 以下のコマンドで試しにビルドしてみて、エラーが出なければOKです。

$ make ergo42/rev1:default

新しいキーボードの生成

QMK Firmwareは、色々な自作キーボード用の設定ファイルが大量に同梱されています。 しかし、今回作成しようとしている自作キーボードは完全なオリジナルなので、新しく設定ファイルを作成していく必要があります。

参考:QMK Firmware Building Your First Firmware

new_keyboard.shスクリプトで、自分用の新しいキーボードを作成することができます。

今回は、Ergo42 と同じ配列のキーボードなので、Ergo42 のものをベースにして作成します。 そういえば、今回作っているキーボードの名前を決めていませんでしたが、Ergo42 の Clone Keyboard ということで、Ergock としました。

new_keyboard.sh を実行すると、キーボード名などを聞かれるので、入力していきます。 Keyboard Type については、ProMicroを使う場合は avr のままでよいので、何も入力せずに Enter を入力してください。

$ util/new_keyboard.sh
Generating a new QMK keyboard directory

Keyboard Name: ergock
Keyboard Type [avr]:
Your Name [okayu]:

Copying base template files... done
Copying avr template files... done
Renaming keyboard files... done
Replacing %YEAR% with 2019... done
Replacing %KEYBOARD% with Ergock... done
Replacing %YOUR_NAME% with okayu... done

Created a new keyboard called Ergock.

To start working on things, cd into keyboards/Ergock,
or open the directory in your favourite text editor.

成功すると、 keyboards/ergock ディレクトリが作成され、中に設定ファイルのテンプレートがコピーされます。

$ cd keyboards/ergock
$ ls
config.h  ergock.c  ergock.h  info.json  keymaps  readme.md  rules.mk

各ファイルの説明

新しく作成したキーボード用の各ファイルの概要は以下の通りです。 <project_name> の部分は、 new_keyboard.sh で指定したキーボード名になります。

config.h          : ピン割当、USBデバイス設定、マトリックスの行列設定など。
<project_name>.c  : QMK Firmwareの機能の上書きなど。今回は使用しません。
<project_name>.h  : キーレイアウト設定。
info.json         : QMK API用の設定。今回は使用しません。
readme.md         : このキーボードの説明文。今回は使用しません。
rules.mk          : ハードウェアに関する設定、QMK Firmwareの機能のON/OFFなど。
keymaps           : キーマップ設定。
  └─default       : デフォルトキーマップ。
      ├─config.h  : config.hの設定を上書き設定する場合に使用します。今回は使用しません。
      ├─keymap.c  : 実際のキーマップ設定を記載します。
      └─readme.md : キーマップの説明文。今回は使用しません。

これらのファイルをテキストエディタで編集して、今回のキーボード用の設定を記載していきます。

ハードウェアの設定(rules.mk)

ハードウェアや、QMK Firmwareの機能を設定します。

まずブートローダーの設定を変更します。 ハードウェアとしてProMicroを使用しているので、ソースコード上のコメントに従って caterina に変更します。

# Bootloader selection
#   Teensy       halfkay
#   Pro Micro    caterina
#   Atmel DFU    atmel-dfu
#   LUFA DFU     lufa-dfu
#   QMK DFU      qmk-dfu
#   atmega32a    bootloadHID
BOOTLOADER = caterina

今回は左右分割キーボードを作成しているので、最終行に以下の設定を追加します。

SPLIT_KEYBOARD = yes

キーマトリックス、ピン設定(config.h)

キーマトリックス、ピンに関する設定をしていきます。

MATRIX_ROWS, MATRIX_COLS

キーマトリックスの行数、列数を指定します。

今回のキーボードは4x7分割キーボードです。 分割キーボードの場合、MATRIX_ROWS の値を2倍の値にする必要があります。今回は4×2で8を指定します。

#define MATRIX_ROWS 8 // 4*2=8
#define MATRIX_COLS 7

2倍にする理由はこちらを参照:Rows and columns of split using 2 pro micros : olkb

MATRIX_ROW_PINS, MATRIX_COL_PINS

キーマトリックスの行列に、ProMicroのどのピンを使用するかを設定します。

今回は以下のように設定しました。

#define MATRIX_ROW_PINS { D7, E6, B4, B5  }
//  Printed on ProMicro    6,  7,  8,  9
#define MATRIX_COL_PINS { F5, F6, F7, B1, B3, B2, B6 }
//  Printed on ProMicro   A2, A1, A0, 15, 14, 16, 10

この時のピン指定はProMicroに印字されている番号ではなく、データシートに記載されているPort名で指定します。 少しわかりづらいので、ソース上にはコメントでProMicroの印字との対応を記載しておきました。

Port名はsparkfunのProMicroのページで、DOCUMENTS > Graphical Datasheet のPDFを参照してください。

Pro Micro - 5V/16MHz - DEV-12640 - SparkFun Electronics Pro Micro Graphical Datasheet

SOFT_SERIAL_PIN

分割キーボードの左右の通信を行うためのピンを指定します。 今回はデフォルトの D0 (ProMicroの印字では3)のままとします。

#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6

その他

その他にも、USBデバイスに関する設定などは、好みに合わせて変更するとよいでしょう。

#define VENDOR_ID       0xFEED
#define PRODUCT_ID      0x0523
#define DEVICE_VER      0x0001
#define MANUFACTURER    okayu
#define PRODUCT         Ergock
#define DESCRIPTION     A splited keyboard for me

VENDOR_ID は通常は 0xFEED のままにしましょう。 PRODUCT_ID はほかの自作キーボードと被らない値にするべきですが、 このキーボード用ファームウェアをQMK Firmwareの本体に取り込んでもらわない場合(Pull Requestを送らない場合)は自由です。

キーレイアウトの設定(<project_name>.h)

#define LAYOUT の内容を設定します。

この設定は、2つのセクションから成っています。

/* 初期状態 */
#define LAYOUT( \
    k00, k01, k02, \
      k10,  k11   \
) \
{ \
    { k00, k01,   k02 }, \
    { k10, KC_NO, k11 }, \
}

上記は new_keyboard.sh で生成した直後の状態ですが、 ここで k00, k01~ となっている部分が前半のセクション、 { k00, k01, ~ となっている部分が後半のセクションです。

前半のセクションでは、キーボードの物理的なキーと同じ数だけの変数を指定します。ここはあくまで後半セクション用の引数になります。

後半のセクションでは、物理的なキーがキーマトリックスのどの位置に対応するかを設定します。この時に、前半で指定した変数を用います。

「習うより慣れろ」で、とりあえず今回の4x7キーボード用に作成してみます。

#define LAYOUT( \
    L00, L01, L02, L03, L04, L05, L06,    R00, R01, R02, R03, R04, R05, R06, \
    L10, L11, L12, L13, L14, L15, L16,    R10, R11, R12, R13, R14, R15, R16, \
    L20, L21, L22, L23, L24, L25, L26,    R20, R21, R22, R23, R24, R25, R26, \
    L30, L31, L32, L33, L34, L35, L36,    R30, R31, R32, R33, R34, R35, R36  \
) \
{ \
    { L00, L01, L02, L03, L04, L05, L06 }, \
    { L10, L11, L12, L13, L14, L15, L16 }, \
    { L20, L21, L22, L23, L24, L25, L26 }, \
    { L30, L31, L32, L33, L34, L35, L36 }, \
    { R00, R01, R02, R03, R04, R05, R06 }, \
    { R10, R11, R12, R13, R14, R15, R16 }, \
    { R20, R21, R22, R23, R24, R25, R26 }, \
    { R30, R31, R32, R33, R34, R35, R36 }  \
}

左右のキーがわかりやすいように、左手側は L00、右手側は R00 という命名規則で設定しました。

分割キーボードの場合、上の例のように左右のキーボードで行を分ける必要があります。 また、 MATRIX_ROWS の設定で行数を2倍の値で設定したのも、これが理由になります。

補足:キーマトリックスに空白を作りたいとき

今回作成しているキーボードでは、完全に格子状のキーボードのため、キーマトリックスがきれいに埋まります。 しかしレイアウトによっては、キーマトリックス上に「物理的なキーのない部分」が発生する場合があります。

たとえば、Helixキーボードは、 一番内側に1~2個のキーがあり、その上にはキーがありません。 このキーのない部分を表すには、 KC_NO キーコードを指定します。

詳細についてはQMK Firmwareの手配線ガイドに記載がありますので、参考にしてください。

QMK Firmware Quantum Hand-Wiring Guide

また、QMK Firmwareに入っているHelixキーボード用の設定ファイル keyboards/helix/rev2/rev2.h なども参考になります。

/* keyboards/helix/rev2/rev2.h から一部抜粋 */
#define LAYOUT( \
  L00, L01, L02, L03, L04, L05,           R00, R01, R02, R03, R04, R05, \
  L10, L11, L12, L13, L14, L15,           R10, R11, R12, R13, R14, R15, \
  L20, L21, L22, L23, L24, L25,           R20, R21, R22, R23, R24, R25, \
  L30, L31, L32, L33, L34, L35, L36, R36, R30, R31, R32, R33, R34, R35  \
  ) \
  { \
    { L00, L01, L02, L03, L04, L05, KC_NO }, \
    { L10, L11, L12, L13, L14, L15, KC_NO }, \
    { L20, L21, L22, L23, L24, L25, KC_NO }, \
    { L30, L31, L32, L33, L34, L35, L36 }, \
    { KC_NO, R00, R01, R02, R03, R04, R05 }, \
    { KC_NO, R10, R11, R12, R13, R14, R15 }, \
    { KC_NO, R20, R21, R22, R23, R24, R25 }, \
    { R36, R30, R31, R32, R33, R34, R35 }, \
  }

キーマップの設定(keymaps/default/keymap.c)

LAYOUT で設定した物理キーに対して、キーコード(押したときに入力される文字)を設定していきます。 また、ファンクションキー(レイヤー)の処理や、モードの切り替えなどについても、キーマップで行います。

今回は、一般的なQWERTY配列をベースとします。数字キーの列が存在しないため、Let's Splitなどと同じようにレイヤーの概念を導入します。

Baseレイヤー設定

キーマップの基本となるBaseレイヤーを作成して、キーコードを設定します。

キーマップ設定のメイン部分は、以下の部分です。

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [0] = LAYOUT( /* Base */
    /* ここにキーコードを書いていく */
  ),
};

<project_name>.h でも出てきた LAYOUT マクロで、実際のキーコードを割り当てていきます。

QMK Firmwareに用意されているキーコードは、以下の公式ドキュメントページで確認できます。

QMK Firmware keycodes

今回用にキーコードを設定しました。わかりやすくなるようにコメントも残していきます。

#define BASE  0
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  /* Base
   * ,------------------------------------------------.   ,------------------------------------------------.
   * | Tab  |   Q  |   W  |   E  |   R  |   T  | Reset|   | Reset|  Y   |   U  |   I  |   O  |   P  | Bksp |
   * |------+------+------+------+------+------+------|   |------|------+------+------+------+------+------|
   * | LCTL |   A  |   S  |   D  |   F  |   G  |  (   |   |  )   |  H   |   J  |   K  |   L  |   ;  |Enter |
   * |------+------+------+------+------+------+------|   |------+------+------+------+------+------+------|
   * |LShift|   Z  |   X  |   C  |   V  |   B  |  [   |   |  ]   |  N   |   M  |   ,  |   .  |   /  |  '   |
   * |------+------+------+------+------+------+------+   |------+------+------+------+------+------+------|
   * | LGUI | Alt  |LCTRL | LGUI | Lower| Space| ESC  |   | C-Spc| Space| Raise| Left | Down |  Up  |Right |
   * `------------------------------------------------'   `------------------------------------------------'
   */
  [BASE] = LAYOUT(
    KC_TAB , KC_Q   , KC_W   , KC_E   , KC_R   , KC_T   , RESET  ,     RESET  , KC_Y   , KC_U   , KC_I   , KC_O   , KC_P   , KC_BSPC, \
    KC_LCTL, KC_A   , KC_S   , KC_D   , KC_F   , KC_G   , KC_LPRN,     KC_RPRN, KC_H   , KC_J   , KC_K   , KC_L   , KC_SCLN, KC_ENT , \
    KC_LSFT, KC_Z   , KC_X   , KC_C   , KC_V   , KC_B   , KC_LBRC,     KC_RBRC, KC_N   , KC_M   , KC_COMM, KC_DOT , KC_SLSH, KC_QUOT, \
    KC_LGUI, KC_LALT, KC_LCTL, KC_LGUI, XXXXXXX, KC_SPC , KC_ESC ,     LCTL(KC_SPC), KC_SPC , XXXXXXX, KC_LEFT, KC_DOWN, KC_UP  , KC_RGHT  \
  ),
};

まだ Raise/Lowerレイヤーを作っていないので、それぞれのレイヤー用のキーは XXXXXXX にしています。 これは、押しても何も反応しないキーという意味です。

Raise/Lowerレイヤー設定

Let's Split等のように、Lower キーや Raise キーを押しているときのキーマップを設定します。

Baseレイヤーと同じように、キーマップを作製します。

レイヤー適用中もBaseレイヤーと同じキーでよい場合は、 キーコード KC_TRNS または _______ を指定します。

#define BASE  0
#define LOWER 1
#define RAISE 2 
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

  ...
  
  /* Lower
   * ,------------------------------------------------.   ,------------------------------------------------.
   * |  ~   |  !   |  @   |  #   |  $   |  %   |      |   |      |  ^   |  &   |  *   |  (   |  )   |      |
   * |------+------+------+------+------+------+------|   |------|------+------+------+------+------+------|
   * |      |      |      |      | Del  | End  |PgDown|   |      |  _   |  +   |  {   |  }   |  |   |     |
   * |------+------+------+------+------+------+------|   |------+------+------+------+------+------+------|
   * | F1   | F2   | F3   | F4   | F5   | F6   |      |   |      |  F7  | F8   | F9   | F10  | F11  | F12  |
   * |------+------+------+------+------+------+------+   |------+------+------+------+------+------+------|
   * |      |      |      |      |      |      |      |   |      |      |      |      |      |      |      |
   * `------------------------------------------------'   `------------------------------------------------'
   */
  [LOWER] = LAYOUT(
    KC_TILD, KC_EXLM, KC_AT  , KC_HASH, KC_DLR , KC_PERC, _______,     _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, \
    _______, _______, _______, KC_DEL , KC_END,  KC_PGDN, _______,     _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, _______, \
    KC_F1  , KC_F2  , KC_F3  , KC_F4  , KC_F5  , KC_F6  , _______,     _______, KC_F7  , KC_F8  , KC_F9  , KC_F10 , KC_F11 , KC_F12 , \
    _______, _______, _______, _______, _______, _______, _______,     _______, _______, _______, _______, _______, _______, _______  \
  ),
  /* Upper
   * ,------------------------------------------------.   ,------------------------------------------------.
   * |  `   |  1   |  2   |  3   |  4   |  5   |      |   |      |  6   |  7   |  8   |  9   |  0   |      |
   * |------+------+------+------+------+------+------|   |------|------+------+------+------+------+------|
   * |      |      |      |Insert| Home | PgUp |      |   |      |  -   |  =   |  [   |  ]   |  \   |      |
   * |------+------+------+------+------+------+------|   |------+------+------+------+------+------+------|
   * |      |PtScr |ScLock| Pause|      |      |      |   |      |      |      |      |      |      |      |
   * |------+------+------+------+------+------+------+   |------+------+------+------+------+------+------|
   * |      |      |      |      |      |      |      |   |      |      |      |      |      |      |      |
   * `------------------------------------------------'   `------------------------------------------------'
   */
  [RAISE] = LAYOUT( \
    KC_GRV,  KC_1   , KC_2   , KC_3   , KC_4   , KC_5   , _______,     _______, KC_6   , KC_7   , KC_8   , KC_9   , KC_0   , _______, \
    _______, _______, _______, KC_INS , KC_HOME, KC_PGUP, _______,     _______, KC_MINS, KC_EQL , KC_LBRC, KC_RBRC, KC_BSLS, _______, \
    _______, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______, _______,     _______, _______, _______, _______, _______, _______, _______, \
    _______, _______, _______, _______, _______, _______, _______,     _______, _______, _______, _______, _______, _______, _______  \
  ),

LowerレイヤーとRaiseレイヤーを作りましたが、 BaseレイヤーのLowerキーとRaiseキーに何も割り当てられてないので、動作しません。

MO(layer) を使用して、LowerキーやRaiseキーを押下している間のみ、それぞれのレイヤーが適用されるように修正します。 先ほど仮に XXXXXXX としていたところを MO(LOWER) MO(RAISE) に変更してください。

  [BASE] = LAYOUT(
    KC_TAB , KC_Q   , KC_W   , KC_E   , KC_R   , KC_T   , RESET  ,     RESET  , KC_Y   , KC_U   , KC_I   , KC_O   , KC_P   , KC_BSPC, \
    KC_LCTL, KC_A   , KC_S   , KC_D   , KC_F   , KC_G   , KC_LPRN,     KC_RPRN, KC_H   , KC_J   , KC_K   , KC_L   , KC_SCLN, KC_ENT , \
    KC_LSFT, KC_Z   , KC_X   , KC_C   , KC_V   , KC_B   , KC_LBRC,     KC_RBRC, KC_N   , KC_M   , KC_COMM, KC_DOT , KC_SLSH, KC_QUOT, \
    KC_LGUI, KC_LALT, KC_LCTL, KC_LGUI, MO(LOWER), KC_SPC , KC_ESC ,     LCTL(KC_SPC), KC_SPC , MO(RAISE), KC_LEFT, KC_DOWN, KC_UP  , KC_RGHT  \
  ),

これでLowerキーとRaiseキーが動作するようになりました。 ひとまずこれでファームウェアの設定は完了です。

ビルドと書き込み

ファームウェアの設定ができたら、まずはビルドします。

$ make ergock:default

エラーが出た場合は、メッセージに従って修正してください。

ビルドに成功したら、書き込み先のProMicroをPCに接続して、 以下のコマンドで書き込みます。

$ make ergock:default:avrdude

コマンドを実行してしばらくすると Detecting USB port, reset your controller now. と表示され、 avrdude が書き込み対象のデバイスを探し始めます。 ここでProMicroをリセットすると、 avrdude がProMicroを認識し、処理が再開されます。

ProMicroの RST ピンと GND ピンを短絡させることでリセットできます。ピンセットなどで一瞬だけ短絡させてください。 (すでにQMK Firmware書き込み済みのProMicroの場合は、 キーコードに RESET を設定したキーを押下したのでもOKです。)

書き込みが正常に終われば、以下のようなメッセージが表示されているはずです。

avrdude.exe: verifying ...
avrdude.exe: 24448 bytes of flash verified

avrdude.exe done.  Thank you.

これでファームウェアの準備が整いました。 次は、キースイッチとProMicroを配線していきます。

次の記事:

okayu-moka.hatenablog.com