スイッチを倒すとランプが点き、つまみを回すと画面の数値が変わる。脱出ゲームの謎解き装置や、映画に出てくるような操作卓を自作したいとき、面倒なのは配線とプログラムの両方を一から組む作業だ。Kevin Kelm氏が公開した「Enigma」は、この手間を減らすための枠組みになる。ESP32-S3を載せたUSB接続の基板と、パソコン側で動かすPythonライブラリがセットになっており、設計データも含めてGitHubで公開されている。
もともとは、同氏が1年をかけて作った宇宙船ブリッジのシミュレーター用に開発したものだ。スイッチ類は152個、画面は6面、コードは16万4000行に及ぶ。ただし専用品として作らず、あとで別の用途にも使い回せる汎用の道具として設計した。同氏は脱出ゲームが好きで、謎解き装置やアーケードゲームへの転用を見込んでいるという。
基板が担うのは、操作子の状態を読むことと、対応するランプを光らせることだ。スイッチ1個ごとにフルカラーLEDが割り当てられており、点滅や色の変化は基板側で処理する。パソコン側はLEDのアニメーションに関わらなくてよい。この分担によって、ホスト側のプログラムは「今どのスイッチが入っているか」だけを気にすればよくなる。
現在使えるのは3種類だ。照光式スイッチを14個つなぐ「SW14」、ロータリーエンコーダーを4個つなぐ「QD04」、アナログ入力を8チャンネル持つ「AN08」になる。1枚のパネルに3枚まとめて入れることもできる。今後追加予定として、サーボ16チャンネル、リレー16チャンネル、WS2812のLEDテープ4系統、モータードライバー4系統など9種類が挙げられており、通信の手順は共通化されている。
複数の基板と画面をまたいで状態をそろえる仕組みも用意した。スイッチの位置、警報の有無、計器の数値といった値を1カ所で管理し、そこから各所へ配る。表示先はWebSocketで受け取れるものなら何でもよく、UnityやGodotのゲーム画面、ブラウザーのページ、離れた場所に置いたRaspberry Piの小型画面などが使える。それぞれが必要な値だけを購読する形になる。
音の扱いも作り込まれている。音楽、音声、環境音、効果音、警報を種類ごとに音量調整でき、優先度を付けた読み上げの待ち行列を持つ。特定の値が閾値を超えたら警報音を鳴らす、といった制御ができる。同じ仕組みで振動子を駆動すれば、体に伝わる手応えも加えられる。
利用にあたっては条件を確認しておきたい。ライセンスは2種類に分かれており、Pythonライブラリとファームウェアの部分はMIT、基板の設計データはCERN Open Hardware Licence v2の強い相互性版になる。また同氏は「そのまま公開するが積極的な保守はしない」と明記しており、GitHubのIssueは無効化されている。動作確認もmacOS(Apple Silicon)のみで、他の環境での検証予定はないという。
なお、土台となったゲーム「Halcyon Dawn」自体は公開されない。作家John Scalzi氏の作品世界を借りた二次創作であり原作者が非営利を条件としていることと、専用に組んだ大がかりな筐体がないと動かないことが理由だ。