M1シリコンのMac miniを購入するかもしれません。。

近くの電気屋さんでApple社🍎のパソコンの10%オフのセール中をやっているので、急遽、生まれて初めてのマイMacとして、M1シリコンのMac miniの購入を考えています。。

これまで、家ではWindowsのPCをメインで使っていて、macを欲しいと思った事は全く無かったのですが、今後、家でのiPhone/iPadアプリの制作を考えると、コンパイル用にmacが1台は必要になるので、今回は80%ほど乗り気になっています。


M1 Mac mini (2020) 8GB 512GB SSD

今回購入を考えているMac miniは、2020年末に登場したM1チップ搭載モデルで、Mac miniは画面やキーボードの付属しない、パソコンの中心部分だけの商品になるので、パソコンとして普通に使うには、最低でもモニター、キーボード、マウスを接続して使う必要があります。 その反面、Mac miniはApple社のパソコンとしては、かなり小さな筐体にまとまっているのですが。。。

現在、家での作業に主に使っているWindows PCのIntel NUC7i5BNHは、筐体が高さ51mm、幅115mm、奥行き111mmという大きさで、M1シリコンのMac miniは、筐体が高さ3.6cm、幅と奥行きが19.7cmなので、NUC7i5BNHよりも高さは半分以下ですが、置く場所の占有面積は約3倍という大きさになります。。😐😐

SSDは256GBか512GBのNVMe内蔵のモデルがあってどちらも標準で8GBのRAM搭載ですが、オプションで増大も可能だそうです。 因みに、全てがメイン基板上に直接搭載されているので購入後にこれらのパーツのアップグレードが個人では出来ない仕様になっています

Mac miniの場合はSSDの容量が足りなくなったら転送速度が割と早いLightning4経由で増設するという設定なのだと思いますが、これまで買ったWindowsのパソコンでは、古くなった時にその時点で値段が落ちて手ごろになっている大容量(+高速)のメモリとSSDに交換してまた第2の道を歩ませるという使い方をしていたので、そういった使い方が出来ないモデルとなっています。


モニター、キーボードとマウス

家には、Windows PC用として購入した、HDMIモニターと、USBキーボード、USBマウスが予備としていくつかあるので、mac mini用に新しく無駄に純正商品を買い揃えるのではなく、それらを使いたいところですが、USBキーボードに関してはWindows用でウインドウズキー () は付いていますが、コマンドキー () は付いていません。。

まだ実際に確かめた事は無いのですが、普通のWindows用のUSBキーボードをMacに繋げてウンドウズキー () を押してもコマンドキー () とは認識されないみたいなので、最悪の場合は新たに純正か互換のキーボードも新たに購入しないといけません。。


Arduinoでコマンドキーを追加?

Arduino Pro Micro
コマンドキー機能を追加したArduino Pro Micro

そこで、眠っていたUSBアダプター搭載のArduinoを使ってUSB接続のコマンドキー () を自作する事を思い付きました。

全てのArduinoのボードでサポートされているという訳ではないみたいですが、Arduinoの標準ライブラリーの「Keyboard」を使うと比較的簡単にUSBキーボードの機能を追加する事が出来ます。 リンク先の説明によると「32u4」と「SAMD」系のボード (Leonardo、Esplora、Zero、Due、MKRなどのファミリー)でサポートされているそうです。

キーボードライブラリの使い方としては

  1. Keyboard.begin()で初期化。
  2. Keyboard.press(KEY_LEFT_GUI)でコマンドキー () が押された時のイベントを発生、
  3. Keyboard.release(KEY_LEFT_GUI)でコマンドキー () が元に戻った時のイベントを発生させます。

なので、デジタルインプットにスイッチを繋げてデジタル信号値を監視して、スイッチを押した時に「Keyboard.press(KEY_LEFT_GUI)」を呼んで、スイッチを放した時に「Keyboard.release(KEY_LEFT_GUI)」を呼ぶ様にプログラミングをすればUSBのコマンドキー機能が追加されます。

因みに、pressとreleaseコマンドのパラメターになっている「KEY_LEFT_GUI」はmacの場合はコマンドキー () を意味するそうです。


やってみた

今回は👆の画像の様に、SparkFanのPro Micro 5V 16MHz同等ボードをブレッドボードを使ってテストしてみました。

Pro Microのピン配列

コマンドキー () だけを追加しただけでは現在手元にあるWindowsのマシンではテストが出来ないと思ったので、デジタルI/Oピンの2番 (DIO2) と4番 (DIO4) の2本にスイッチを繋げれる設定にして、DIO2はコマンドキー ()、 DIO4には半角英字の「A」を設定してみました。

メカニカルキ―ボード定番のCherryキーも用意しておきましたが、ブレッドボードに挿す事が出来ないので、今回は、DIO2とDIO4に繋げた各デュポンワイヤーをGNDに指で押さえて繋げる事で、電気回路的にはキーを押した場合と同じにしてみました。


次はArduinoに組み込んだコードになりますが、手で配線を繋げている為、チャタリングと呼ばれる現象を防ぐために、DIOのレベルがある程度安定するまでキーが反応しない、少し保守的な設定になっています。

又、ArduinoのIDEソフトでデバッグしやすい様にシリアルポートへの情報書き出しも加えてあるので少し長めのコードにもなっています。

#include <Keyboard.h>

#define NKEYS 2
int dioPin[] = {2, 4};
char code[] = {KEY_LEFT_GUI, 'A'};

boolean keyDepressed[NKEYS];
int keyCont[NKEYS];

void setup() {
  Serial.begin(9600);
  Keyboard.begin();
  for (int idx=0; idx<NKEYS; idx++) {
    keyDepressed[idx] = false;
    keyCont[idx] = 0;
    pinMode(dioPin[idx], INPUT_PULLUP);
  }
}

void loop() {
  for (int idx=0; idx<NKEYS; idx++) {
    if (digitalRead(dioPin[idx]) == LOW) {
      if (! keyDepressed[idx])
      if (keyCont[idx] < 30) {
        keyCont[idx]++;
      } else {
        Serial.print("L[");
        Serial.print(idx, DEC);
        Serial.print("] ");
        Serial.println(keyCont[idx], DEC);
        Keyboard.press(code[idx]);
        keyDepressed[idx] = true;
      }
    } else {
      if (keyDepressed[idx])
      if (-30 < keyCont[idx]) {
        keyCont[idx]--;
      } else {
        Serial.print("H[");
        Serial.print(idx, DEC);
        Serial.print("] ");
        Serial.println(keyCont[idx], DEC);
        Keyboard.release(code[idx]);
        keyDepressed[idx] = false;
      }
    }
  }
}

上のコードを書き込んだPro MicroをWindowsのPCとテストしたところ、「KEY_LEFT_GUI」はウインドウズキー () としても反応したので、果たしてmacでコマンドキー () として機能するかは疑問ですが、mac mini購入の決断をした暁には、コマンドキー () として上手く動作するかどうか確認してみます。




追記 (): テスト結果

M1シリコンのMac miniを手に入れたので上記のArduino Pro Misro製のUSBコマンドキー () を試してみましたが、結果としてはDIO2をGNDに繋げるのと同時にWindows PC用のキーボードのキーを押す方法ではショートカットを呼び出す事は出来ませんでした。。

どうも2つのキーボードを繋げても、各キーボードからの入力は別の物と処理される様で、別のキ―ボードからの入力を足し合わせて処理はされないみたいです (もっともだと思いますがw)。

なので、上のコードを少し変更して、DIO2がGNDに繋がれた場合hは「コマンドキー」と「c」(コピー)、DIO4の場合には「コマンドキー」と「v」(ペースト)のイベントが発生する様にしてみました。 その結果、ハイライトしたテキストのコピーとペーストがDIO2とDIO4で操作する事が出来ました。

#include <Keyboard.h>

#define NKEYS 2
int dioPin[] = {2, 4};
char code[] = {'c', 'v'};

boolean keyDepressed[NKEYS];
int keyCont[NKEYS];

void setup() {
  Serial.begin(9600);
  Keyboard.begin();
  for (int idx=0; idx<NKEYS; idx++) {
    keyDepressed[idx] = false;
    keyCont[idx] = 0;
    pinMode(dioPin[idx], INPUT_PULLUP);
  }
}

void loop() {
  for (int idx=0; idx<NKEYS; idx++) {
    if (digitalRead(dioPin[idx]) == LOW) {
      if (! keyDepressed[idx])
      if (keyCont[idx] < 30) {
        keyCont[idx]++;
      } else {
        Serial.print("L[");
        Serial.print(idx, DEC);
        Serial.print("] ");
        Serial.println(keyCont[idx], DEC);
        Keyboard.press(KEY_LEFT_GUI);
        Keyboard.press(code[idx]);
        keyDepressed[idx] = true;
      }
    } else {
      if (keyDepressed[idx])
      if (-30 < keyCont[idx]) {
        keyCont[idx]--;
      } else {
        Keyboard.releaseAll();
        keyDepressed[idx] = false;
      }
    }
  }
}

純正キーボードの値段

因みに、10%オフの価格でM1シリコンのMac miniをお店で購入した際に、純正キーボード (Bluetooth接続) の値段を聞いてみた処。。

オーストラリアだと:

  • Apple Magic Keyboard $136 (約11200円税込): テンキー無し、シルバー
  • Apple Magic Keyboard with Numeric Keypad $179 (約15100円税込): テンキー付き、シルバー
  • Apple Magic Keyboard with Numeric Keypad (Space Grey) $209 (17666円税込): テンキー付き、黒

という値段で、かなりしました (オーストラリアドル~84.5円)。。 お店の人も最後の2モデルに関しては「単に色が違うだけだけれど、黒い方が$30高くなるんだよね。」と苦笑していました。

因みに、「Officeworks」というオフィス文具/家具を扱っているチェーン店では「Apple Magic Keyboard」を少し高めの $145で売っていますが、「Price Beat Guarantee (最低価格保証)(※)という、もしも販売価格が他のお店よりも高かったらその値段から5%引きに値引きすると宣言しているので、上の値段を提示すれば「Apple Magic Keyboard」であれば、$136の5%引きで、$129.20 (約10640円)になります。

それでも、長い事WindowsのPCを使って来たので、個人的には「キーボードごときに、1万円以上も。。」と思ってしまいますがw

(※) 関連記事: 👉「オフィスワークスでの買い物の小技 - Price Beat Guarantee」 (ブログQ): USBメモリが安くなりました。


Pro Microでどうにかコマンドキーを。。

「Apple Magic Keyboard」のキー数を数えてみた処、88個ありましたが、F1~F12のファンクションキーも含まれているので、「Fn」ボタンを追加して他のキーをファンクションキーとして使える様にすれば、88-12+1 = 77で、77キーでキーボードを構成する事も可能になります。

今回使った「Pro Micro」は18のI/Oピンがありますが、18本全てをデジタルI/Oピンとして使えるので、「キーボードマトリックス」という回路を使えばアウトプット9本とインプット9本という構成なら、9x9=81で、最高81個のキーを処理する事が可能です。

。。。いずれ、「Pro Micro」を使って、Mac対応のUSBキーボードを作ってみたいかと思います。



コメント