6インチ電子ペーパーを使ったフォトフレーム


はじめに

何かに使えそうだと思って購入したまま放置していた電子ペーパーがあったので,電源無しで画像を保持できる利点を生かしてモノクロのフォトフレームを作りました. 使用した電子ペーパーはED060XC3というもので,電子ブック用の交換部品としてAliExpressなどで安価に売られています. ただし電子工作用に売られているようなモジュールタイプの電子ペーパーとは違って,このような素の電子ペーパーは電源の供給や信号の制御を全て自前で行う必要があります. 幸いこのタイプの電子ペーパーの使い方はEssential scrapに詳しい解説があり,非常に参考になりました.

ハードウェア

回路図
完成した基板

回路図は上に示したとおりです. 制御用のマイコンにはESP32を使用します. 画像データは内蔵フラッシュメモリに格納しますが,できるだけ多く格納できるように16MBのフラッシュメモリを搭載したESP32を使用しました(通常は4MB). 画像データはWi-FiでESP32に転送します. 表示する画像を切り替えるために,2つのタッチセンサー入力を使います. 電子ペーパーへ供給する電源をオン・オフするためにMOSFETもつながっています. 電源は,ESP32の動作電圧が比較的低く,画面書き換え時以外はディープスリープして電流をほとんど消費しないため,単3電池2本を使うことにしました. プリント基板を作るか迷いましたが,部品点数が少なく回路もシンプルなので,ユニバーサル基板上に電源モジュールやフラットケーブルの変換基板を両面テープで貼り付けて空中配線しました.

今回使用した電子ペーパーのED060XC3はデータシートが入手できませんでしたが,仕様がほとんど同じと思われる(ただしピン配置は逆)ED060XC5のデータシートを参考にしました. このような素の電子ペーパーは,一般に3.3V,+22V,+15V,-15V,-20V,VCOM(-4〜0V)の6つの電源を必要とします. 回路を簡単にするために,正負の両電源を生成できるHW-520というDC-DCモジュールを使って,±22Vと±15Vを生成します. 購入したモジュールは±12V用だったので,以前行ったのと同様に改造して電圧を変えました. -20Vの入力に関しては,最大定格が-25VだったのでDC-DCモジュールから出力した-22Vをそのまま与えています. VCOMは電子ペーパーの個体差によりコントラストが変化するため調整する必要がありますが,必要な電流は0.2mAだったので単純に抵抗分圧で生成しています. ±15Vを±22Vから三端子レギュレータで生成すれば必要なDC-DCモジュールを減らせますが,最大消費電流が正・負それぞれ50mA程度でシリーズレギュレータによる損失が大きいので,その方法はとりませんでした. 電子ペーパーの6つの電源を投入するタイミングはデータシートで規定されていますが,今回は回路をシンプルにするために無視してすべて同時に入れました. 表示等には何の問題もなく動作していますが,突入電流が大きく電源のコンデンサーを増強しないと動作が不安定になりました. 2つのDC-DCモジュールの無負荷時の消費電流は合計40mA程度で,あまり効率がよくありません.

ソフトウェア

動作モード

このフォトフレームは通常はディープスリープでマイコンを停止しており,2つのタッチセンサーからの入力があると以下の4つのモードの動作を行います:

  1. 左の端子が長押しされた時: 通信設定(Config)モードに入る.右の端子を押すとスリープする.
  2. 右の端子が長押しされた時: 画像転送(Transfer)モードに入る.左の端子を押すとスリープする.
  3. 左の端子が短く押された時: 1つ前の画像を表示してスリープする.
  4. 右の端子が短く押された時: 1つ先の画像を表示してスリープする.

通信設定モードでは,アクセスポイントモード(親機)でHTTPサーバーを動かします. スマホやタブレットで接続して,画像転送モードで接続するアクセスポイントのSSIDとパスワードを設定します(任意のキーと値のペアを登録できるので,それぞれ"SSID"と"PASS"というキーに対する値として登録します). 画像転送モードでは,ステーションモード(子機)でHTTPサーバーを動かします. PCからブラウザで接続して,画像ファイルのアップロード,画像ファイルの削除,フラッシュメモリのフォーマットを行えます.

画像データ

表示する画像データは16階調(4bpp)で1024x758サイズとなります. 独自のフォーマットを定義してもよいのですが,既存の画像ビューアーで手軽に確認できるように非圧縮のTIFFフォーマットを使いました. このフォーマットは,1バイトに2ピクセル分の情報を保持して効率よく4bppのモノクロ画像を扱えます. 以下のようにImageMagickのconvertコマンドで任意の画像から変換できます.

convert input.jpg -resize 1024x758 -gravity center -extent 1024x758 -colorspace gray -remap hald:4 -depth 4 -compress none output.tif

画像フォーマットを決め打ちしている(最初の8バイトのヘッダーの直後に画像データが続くことを仮定している)ので,別の方法で変換したデータは表示できない可能性があります. TIFFフォーマットはいくつかの圧縮方式をサポートしており,ランレングス圧縮(PackBits)やLZW圧縮でデータサイズを減らすことができますが,面倒だったので今回は非圧縮形式にのみ対応しました.

画像ファイルの名前は"01.tif"〜"99.tif"としなければならず,この順番で表示が行われます.欠番のファイルはスキップされます. ファイル名としては99通りありますが,画像ファイルのサイズが380kBで画像格納用フラッシュメモリのサイズが15MBでなので,最大で40枚程度格納できます. なお00.tifというファイル名は常に存在する特別なファイルとして予約されており,白一色の画像となります.

ESP32のフラッシュメモリに画像を格納するために,LittleFSを使いました. フラッシュメモリ上でファイルを管理するファイルシステムとしてはSPIFFSがメジャーですが,それよりも新しいファイルシステムです. 当初はSPIFFSを使っていたのですが,ファイル読み込み時に特定の位置でファイルアクセスが極端に遅くなるという問題があり,LittleFSに切り替えたところ問題が解決しました. Arduino ESP32 version 2.0.1では標準でLittleFSが使えます. なお16MB版のESP32でデータ領域を最大限使用するために,Arduino IDEの"No OTA (1MB APP/3MB SPIFFS)"の設定を変更しSPIFFS用メモリに12MB追加して,16MBのフラッシュメモリのうち1MBをプログラム,15MBをSPIFFS (LittleFS)で使うようにしました.

電子ペーパーの制御

電子ペーパーへの画像出力は,8bitのデータバスと7本の制御信号を使って行います. 画像を表示するまでに苦労するかと思いましたが,最初に書いたコードで一発で動きました. しかしながらグレースケールでの表示に苦労しました. 電子ペーパーでは,各ピクセルに対して「白」「黒」「変化なし」の3通りの色を書き込むことができます. また一回の書き込みでは十分に色が変化しないため,通常複数回各ピクセルに書き込みを行います. そして黒を書き込んだ数が多いピクセルほど濃い色になります. しかしなかなか一様なグラデーションが得られず試行錯誤しました. 薄い色がなかなか出なかったので,VCOMは0Vに設定しています. 今回実感したのは,電子ペーパーはとてもアナログなデバイスだということです. SPIFFSを使った場合には,データの転送速度のムラにより途中で画像の濃度が変わったりしました. 一番厄介だったのは画面消去で,画面の消去方法により次に描画する画像が大きく影響されます. 具体的には,黒を多く書き込んでから消去したピクセルの方が薄い色になることが分かりました. そのため,最終的に各ピクセルに24回黒を書き込んでから8回白を書き込むことで画面消去することにしました. ただしここまでしても,コントラストが強い画像だと次に表示される画像が影響を受ける場合があります.

使った感想

ケースに入れた状態(表)
ケースに入れた状態(裏)

電子ペーパーが剥き出しでは扱いにくいのでセリアで購入した写真立てに収めましたが,幅がピッタリ合いました. タッチセンサー部分にはアルミテープを使っています. 背面は3Dプリンターでカバーを作りました.

画面の消去・描画には22秒ほどかかります. その時の消費電流は100mA弱です.

LCDとは異なり,電源を入れていないのに常に画像を表示できるのはおもしろいのですが,残念ながら今回作ったフォトフレームは実用性の面でいくつか問題がありました. 一つは,やはりモノクロだとカラー写真を変換して表示しても見栄えがいまいちでした. また今回初めてESP32のタッチセンサーを使ってみましたが,動作が不確実で,ケースに入れるとしきい値が変わったりして不便でした. さらに,DC-DCモジュールの消費電流が多いためか,電池で動作させると反応しなくなったりして不安定でした. 色の問題については,多色表示可能な電子ペーパーも出ているのでそのうちに試してみたいと思います.

ダウンロード


[Back]
2021-11 製作
2021-12-04 ページ作成
T. Nakagawa