メインコンテンツへスキップ

9,000円の電子ペーパー端末に、日本語入力つきのObsidian専用ファームを自作してみた

    最近、手のひらサイズの電子ペーパー端末を買いました。
    XTEink の X4 Pro という、小さい Kindle みたいな機械です。

    アリエクスプレスで割引があって、9,000円ぐらいでした。

    ただ、これを買った理由は「本が読みたいから」ではありません。
    中身のファームウェアを、自分で好きなように作り替えられるから、です。

    で、作ってしまいました。
    Bluetoothキーボードをつないで、日本語で Markdown のメモを読んだり書いたりできる、自分専用の機械です。

    やりたかったこと

    いろいろな情報を、Obsidian というメモアプリで管理しています。
    メモは Markdown(.md)というただのテキストファイルで、Dropbox で同期しています。

    スマホでもいいんですが、ちょっと見たり、簡単に直したりするのに、電子ペーパーの端末を使ってみたかったんです。

    組み合わせるのは、Clicks の Power Keyboard という小さなキーボードです。
    Bluetooth でつながるので、これで文字を打てれば、Markdown を読んで書くことに特化した機械になるはず…と思いました。

    画像

    (左が X4 Pro、右が Clicks の Power Keyboard です)

    ここから先は技術的な話が多くなりますが、こういうのも趣味として好きでやっています。

    ゼロからは作らない

    手元にあるのは本体だけです。
    説明書も回路図もありません。

    調べてみると、CrossPoint Reader という、オープンソースの電子書籍リーダー用ファームが X4 Pro に対応していました。
    これを土台にして、足りない機能を足していくことにしました。

    中身を調べて分かったこと:

    • チップは ESP32-S3

    • フラッシュ 16MB、PSRAM(外付けのメモリ)8MB

    • 4.3インチのタッチ式 E Ink

    思っていたより余裕のある構成で、ちょっとうれしかったです。
    しかも土台のファームに、Bluetoothキーボードを受け付ける仕組みがもともと入っていました。これは助かりました!

    最初の壁:USBで書き込めない

    まずはパソコンからUSBで書き込もう…としたら、端末が認識されません。
    ケーブルを替えてもダメ。

    調べたら、自分のは中国本土向けの端末で、出荷時にUSBからの書き込みができないようになっているものでした。

    そこで、OTA Unlocker という仕組みを使いました。
    Mac を Wi‑Fi のアクセスポイントにして、端末の「システム更新」にファームを配る、という方法です。
    Mac の「インターネット共有」の設定で少しつまずきましたが、なんとか公式の CrossPoint が起動しました。

    ここまで来れば、あとは microSD カードに入れたファイルから更新できます。
    自作のファームも、この方法で入れました。

    Markdownを表示する

    土台のファームでは、.md ファイルはただのテキストとして表示されます。
    見出しも箇条書きも、記号がそのまま見える状態です。

    なので、Markdown を、もともとある電子書籍の表示エンジンが読める形に変換する仕組みを作りました。
    表示する部分は作り直さず、今あるものを使い回しています。

    見出し、箇条書き、チェックボックス、表、引用などに対応しました。
    実機で見たら見出しがちょっと大きすぎたので、あとで小さめに直しています。

    いちばん苦労した:同期が途中で止まる

    Dropbox との同期は、いちばん時間がかかったところです。

    メモは全部で1049ファイル。
    同期を始めると、途中で止まってしまうんです。

    最初は「スリープしただけで、同期は終わっているのかな?」と思いました。
    でも確かめたら、319件目で止まっていました。見立て違いです…

    次に試すと、今度は39件目で止まる。
    止まる場所が毎回違う。

    ここで、推測で直すのをやめて、SDカードに記録(ログ)を残すようにしました。
    すると、原因が見えてきました。

    同期済みのファイルの一覧を、通信に使う小さなメモリに置いていたんです。
    1件はちょっとでも、1000件を超えるとそのメモリがいっぱいになって、通信が止まっていました。
    止まる場所が毎回違ったのも、これで説明がつきます。

    一覧を 8MB の外付けメモリ(PSRAM)に移したら、1049件すべて同期できました。
    失敗0件、約19分。これはうれしかったです!

    「止まる場所が毎回違うときは、データではなくメモリを疑う」
    「推測より、まずログ」
    いい勉強になりました。

    日本語が「◆?」になる

    同期できたと思ったら、今度はファイル名も本文も「◆?」だらけ。
    これは「フォントにその文字がない」という意味です。

    日本語のフォント(Noto Sans JP)はSDカードに入れてありました。
    コードのバグかと思って調べたら…原因は設定画面の見間違いでした。

    似た名前の設定画面が2つあって、自分が開いていたのは、ネットからフォントを追加する画面のほう。
    本当に選ぶべきなのは「Reader → Font Family」でした。

    選び直したら、あっさり日本語が出ました(笑)

    ちなみにメニューは英語のままです。
    ノートの名前と本文は日本語、メニューは英語、という感じで使っています。

    日本語入力は、かな漢字変換まで

    キーボードで書けても、日本語が打てないと困ります。

    最初は「ローマ字→ひらがな・カタカナ」まででいいかなと思っていました。
    でも、実際に打ってみると、やっぱり漢字が欲しくなる。。

    それで、かな漢字変換も入れてしまいました。

    本格的な変換は、この小さな機械には重すぎます。
    なので、単語ごとに変換する方式にしました。
    ひらがなで読みを打って、Spaceで候補を出して、Enterで決定。

    辞書は、オープンソースの辞書(約18万語)を使える形に変換して、SDカードに置いています。
    メモリに全部は載らないので、SDカードの中を毎回探しに行く作りです。

    Power Keyboard では、最初かな切り替えが効かなくて少し悩みましたが、Cmd+Space でも切り替えられるようにして解決しました。

    そして、全部つながった

    端末で書いたメモは、次に同期したときに Dropbox へアップロードされます。
    パソコンやスマホで同じメモを直していた場合は、上書きせずに別のファイルとして残すようにしました。

    これで、パソコン、スマホ、X4 Pro のどれで書いても、同じメモがそろうようになりました。

    実際に作業したのは、2日間です。
    本体を買ったときは、ここまでできるとは思っていませんでした。

    使ってみて

    軽いですし、なかなか使い勝手がいい感じです。

    それと、X4 Pro は背面に磁石がついているので、Power Keyboard にピタッとくっつきます。

    画像

    くっつけて、こんな感じで使うこともできそうです。

    自分が欲しい機能を、自分で足せる。
    これが、この機械を買った理由で、やっぱり楽しいところだなと思っています。

    明日は、小学1年生の「同期」がいるピアノ教室の話です。

     
     
    アルファロメオとお酒と音楽と海外ドラマがあれば幸せ。 最近は日本酒にハマっています。

    あなたへのおすすめ