ATOM Lite でMacをsleepする

最終更新日

動機

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

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

訂正 Fn + F で Eject

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

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

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

シェアする