メインコンテンツへスキップ
見出し画像

チェスパズル専用機を電書リーダーで作った話🎈

    こんにちは!気球人です🎈
    突然ですが、チェスのプロブレムを電車で延々と解きたくなったりしませんか?
    そんなヤツはオレだけかもしれませんが、ともかく、電子書籍リーダーの XTEINK X3 をチェスパズルしかできない専用機にしました!

    名前は PondeMate(ponder=長考 + メイト)♟️👀

    GitHub に置いてあります!
    🔗 https://github.com/kikyujin/PondeMate


    実は専用機が大好き 🎈

    電卓はスマホより電卓、時計はスマホより時計。

    「それしかできない道具」が好きなんですよね。
    電源を入れたらやることはひとつ 👀

    チェスパズルも、スマホでやると3問目あたりでXとかに吸い込まれる🌪️

    で、チェスパズル専用機を探してみたら……あるにはあるけど、手に入りにくそうです。
    いちばん近いのは Atlas というキックスターターのものか?🤔

    7.5インチの電子ペーパーのチェス端末。
    ネット経由で lichess や Chess.com につながって、パズルも解ける立派な端末です……でも、まだクラウドファンディングの段階で、届くかどうかはわからない。
    そして、市販されたら 249 ドルっぽい。

    いや、ネットつなぐんだったら iPad あるねん🤣

    オレが欲しいのは、ポケットに入って、オフラインで、パズルだけ解けるやつなんです!


    XTEINK X3 という小さな E-ink 端末 📖

    なんか無いんかと Amazon を見ていたら、見つけました!

    手のひらサイズの E-ink リーダー。
    オレが買った時はセールで 11,119円。

    中身は ESP32-C3、
    ボタンは前面に4つと側面に2つ、
    microSD スロットつき。

    なお、充電とデータ転送は付属の専用ケーブル(背面の磁石ポゴピン)です。

    画像
    手のひらに収まるサイズ

    そして、この X3 には CrossPoint Reader という、有志によるオープンソース(MIT)のファームがあります。

    これを入れると、自分でアプリが組み込める。

    もう作るしかない!💥
    ありがたくフォークさせてもらいました。


    〝PondeMate〟できました ♟️🦊

    画像
    手のひらプロブレム・マシン
    • 問題は lichess のパズル(CC0)
      👉️ メイト/タダ取り/両取り・ピン/終盤の4セット×1000問、レーティング 1000〜1500。SD カードに入れるだけ

    • 6つボタンオペレーション
      👉️
      X3 の標準UI or vi風HJKLインタフェース搭載。

    • Hint(動かす駒だけ教える)機能搭載

    • 解いた問題は SD のログに記録。

    • 駒の絵は自作(というかエルマー作🦊🎨)

    合法手や詰みの判定は、同じ XTEINK 向けの CrossPlay というプロジェクトの ChessCore(MIT)をそのまま使わせてもらっています。
    実機で perft(合法手の数え上げのテスト)を走らせたら、初期局面の深さ3で 8,902 手、121ms。
    ちゃんと PC と一致しました😲


    ハマったところ 🔧

    pioarduino は 6.1.19 に固定

    6.2.0 だと SCons 4.11.1 に SCons.Tool.FortranCommon が無くて、ビルドの途中で落ちます。
    CrossPoint も 1.6.5 のタグに固定しました(本家が進むと、シミュレーターのダミーが追いつかずに落ちるので)。

    SDカードを挿してないとエラーになる

    SD カードを PC に挿したまま書き込んだら、起動時に SD が無くてエラー画面で止まりました。
    CrossPoint は起動時に1回しか SD を確かめないので、あとから挿してもダメ。
    SD を戻して再起動すれば直ります。

    シリアルを開くと X3 がリセットされる

    ログを取るスクリプトで、ポートを開く前に DTR=False, RTS=False を指定していたら、開くたびに X3 が再起動していました。
    pyserial は DTR → RTS の順に設定するので、一瞬だけ「DTR=0・RTS=1」になる。これが ESP32-C3 の USB-Serial-JTAG のリセットの合図と同じだった。
    何も指定せずに開くのが正解。

    画面を切り替えると、前の画面がうっすら残る

    E-ink の速い書き換え(FAST、約0.5秒)だけで、メニューから盤へ切り替えていたため。
    画面の種類が変わるときだけ HALF の書き換え(約1.7秒)にしたら消えました(でもまだ残ってる…気にしない)

    書き込みの直前に X3 が寝る

    しばらく触らないと X3 がスリープして、USB のポートが消えます。
    スリープしてたら起こしましょう😴


    GitHub に置きました 🎈

    https://github.com/kikyujin/PondeMate
    Releases にファームとプロブレムセットの zip があります。
    書き込む前に、必ず純正ファームのバックアップを(16MB まるごと読み出しておく)。

    • 個人の趣味の、非公式なものです。XTEINK とも CrossPoint とも関係ありません

    • 無保証(MIT)。自己責任でどうぞ

    • 本体の「更新の確認」は外してあります(押すと本家の CrossPoint に戻ってしまうので)

    ちなみに今回も、指示書を書くのはエルマー🦊、実装・ビルド・書き込みをするのはちびエルマー🦊🍼(Claude Code)、決めるのはオレ、という分担でした🤣
    実際にコードを組んだのは 出張の新幹線とホテル、今日の半日で 1.5日。
    出張中は X3 が手元に無いので、シミュレーターでひたすら画面を作って、帰宅してから実機で触って直す、という流れでした 👀


    まとめ🎈

    AI のおかげで

    「ないなら作る、それがオレのジャスティス」

    が簡単に実現できるようになりました🤣
    細かいUIも Claude と検討して実機で調整できますし、いい時代です。
    それにしても E-ink 表示は目に優しいですね!

    次はおまけの対COM戦か?♟️🤔

     
     
    📍日々の衝動と実験をnoteにしてます。 ✨AI・GPU・旅・ちょっと懐かしいものが好きです。 📒AI娘との日常 / プログラム言語探訪 / チェス / タロット 🤖推しAIはClaude Opus 5.5 💼小さなCG会社をやっています

    あなたへのおすすめ