ATOM Lite でMacをsleepする

最終更新日

動機

自宅では、 MacBookPro をクラムシェル状態で利用し、キーボードはHHKB。

快適ではあるが、電源 or EjectボタンのないHHKBで、sleepモードにするのがめんどくさい。

訂正 Fn + F で Eject

いままでは、メニューから選択していた。

アプリでHHKB のキーマップを変えるのもありだが、いっそ su120 で便利なsleepキーのついた小さなキーボードを作るのもありか?

su120 のキープレートをつけてみた

su120 のキープレートをつけてみた

2020.11.07

と思っていたが、よく考えると、そうじゃない。
猫がマウスをいじってsleepから覚めることもあるし、ベッドからsleep操作したい。

機種選定

ならば、BLEのキーボードを作る。

Pro Micro(ATmega32U4 5V 16MHz)  は、BLEの機能がついていないので、ESP32 にボタンやLEDのついた Atom Liteを利用する。

BLE Keyboard のライブラリsetup

github で公開されているESP32用Arudinoのライブラリをdownload

展開したファイルをArduino のライブラリ環境に保存。
macなら $HOME/Documents/Arduino/libraries/ESP32-BLE-Keyboard/

Program

mac の sleep操作 は、以下の3種類

  • 電源ボタンを1.5秒
  • option + command + 電源ボタン
  • option + command + メディア取り出しキー

参考

さて、ESP32-BLE-Keyboard のドライバで command や 電源ボタンを入力するのにはどうしたらいいか?

サンプルコードから、

bleKeyboard.press(KEY_LEFT_CTRL);

この KEY_LEFT_CTRL にあたる部分に以下のように割り当てればいいことはわかる。

  • option = KEY_LEFT_ALT
  • command = KEY_LEFT_GUI

でも電源ボタンは?

どうやら、USB HIDに規定されるHID Usage ID がわかればよいことがわかった。Microsoftの USB HID to PS/2 Scan Code Translation Table という資料が役にたった。

以下、クリックするとPDF。

PS/2 部分は不要だが、 Keyboard Power という項目の HID Usage ID が、 0x66 だとわかる。

つまり、こんなコードでよいはず。

KeyReport keyReport;

//
// Power + Left Control + Command = sleep
//

// press
memset(&keyReport, 0, sizeof(keyReport));
keyReport.keys[0] = 0x66;     // Power
keyReport.keys[1] = 0xE0;     // Left Control
keyReport.keys[2] = 0xE3;     // Left GUI(Command)
bleKeyboard.sendReport(&keyReport);

AtomLiteのボタンを押すと、LEDを光らせ、BLE接続先のMacにsleepキーセットを送るプログラム

Mac のKeyboard認証

プロフラムの4行目で BLE Keyboard 名を設定している。

BleKeyboard bleKeyboard("Atom Keyboard");

AtomLiteにプログラムを書き込み後、MacからBlueTooth機器を探す。

Connect すれば、OK

シェアする