image
2018.2.26更新
電子ペーパー天気予報実験セットで、電子ペーパーを制御するプログラムの作り方のご紹介です。

実験セットは↓こちら↓で購入いただけます

epdexpset04
こちらの基本的なサンプルプログラムのEpdクラスが、電子ペーパーを制御するクラスとなっています。このクラスのヘッダファイルepd.hをご覧いただくと、どんな機能があるかわかります。

  ●BMPデータを電子ペーパーに表示する仕組み  

BMPファイルの画像データは電子ペーパーに直接データを転送するのではなく、画像メモリーに1画面分のデータを保存してから、画像メモリーの内容を電子ペーパーに送る仕組みになっています。電子ペーパーは一回のデータ転送では薄くしか表示されません。しっかりと濃い表示にするためには、同じ画像データを繰り返し5,6回送る必要があります。SDカードはデータの読み込みが速くないため、一旦画像メモリーに読み込んで、画像メモリーから必要な回数電子ペーパーにデータを送信します。
電子ペーパーの画像データはモノクロデータでも60kBytesになり、ESP-WROOM-02の内蔵メモリーでは足りません。このため画像メモリーは、マイコンに1Mbit SRAMを外付けしてあります。

これらのことから、クラスの機能には、画像メモリーに対する操作と、電子ペーパーに対する操作、その他設定の操作の3つから成っています。

  ●基本的な使い方  
BMPを電子ペーパーに表示するためには最低限以下の3つを記述します
  1. Epd.begin();  //初期化
  2. Epd.loadBmp( BMPファイル名 );  //画像の読み込み
  3. Epd.show();  //表示
1はsetupの中で実行します。loopの中でloadBmp()でbmp画像をメモリーに読み込んで、show()で表示します。

  ●リファレンス  
・初期化
Epd.begin()

 初期化を行います。setupの中で1回実行してください。制御回路のリセットとSDカードのマウントを行っています。SDカードがマウントできないとfalseを返します。


・画像メモリーに対する操作

Epd.loadBmp( String fileName )

 画像メモリーへ指定したファイル名のBMPを読み込みます。横800ピクセル縦600ピクセル専用です。モノクロbmpの他、16色、256色、フルカラーbmpに対応しています。カラー画像の場合、白黒に2値化して読み込みます。読み込み速度が遅いので、データサイズの小さいモノクロBMPを推奨します。bmpが読み込めないとfalseを返します。


Epd.loadBmp( String fileName ,  int x , int y ) 2018.2.26追加

 画像メモリーの指定した座標(x,y)に、指定したファイル名のBMPを読み込みます。bmpが読み込めないとfalseを返します。モノクロbmpの他、16色、256色、フルカラーbmpに対応しています。読み込み速度が遅いので、データサイズの小さいモノクロBMPを推奨します。

Epd.pset( int x , int y , char color ) 2018.2.26追加

 画像メモリーの指定した位置(x,y)のピクセルの色を変更します。colorは BLACK か WHITE のどちらかのみを指定します。


Epd.fill( int color ) 

 画像メモリーを指定した色で塗りつぶします。colorは BLACK か WHITE のどちらかのみを指定します。


・電子ペーパーに対する操作

Epd.show()

 画像メモリーのデータを電子ペーパーに出力し表示します。


Epd.white()

 電子ペーパー全体を白で塗りつぶします。画像メモリーには影響しません。


Epd.black()

 電子ペーパー全体を黒で塗りつぶします。画像メモリーには影響しません。


Epd.reflesh()

 同じ画像を繰り返し表示したり、長期間表示していると、過去に表示した画像が薄く残ってしまいます。この症状を軽減するためのリフレッシュ表示を行います。この動作が終わるまで数分かかります。


・設定に関する操作

Epd.setDrawingTimes(int n)

 電子ペーパーに繰り返し何回データを送るか設定します。デフォルトは6回です。多くするほど、鮮明に表示されます。時間に余裕がある場合は10回程度がおすすめです。


Epd.autoPowerOff( bool f ) boolはtrue(自動) か false(手動) です。

 電子ペーパーの電源ON,OFF制御を自動で行うか指定します。trueの場合、show()が実行されている時だけ電子ペーパーの電源がONし、電子ペーパーへのデータ転送が終わるとOFFします。falseの場合は、ONのままになります。短時間に何度も描画を繰り返すと、電子ペーパーの電源をOFFしたときに過去の画像が残像として現れてしまいます。そのような場合にはfalseにして、電源を切らないようにします。


Epd.powerOn()

 電子ペーパーの電源を入れます。ONしなくても、show()を実行すると自動でONします。


Epd.powerOff()

 電子ペーパーの電源を切ります。


  ●注意点   

ESP-WROOM-02(ESP8266)をプログラムする際の注意点です。だいたい0.5秒くらいに1回

ESP.wdtFeed();

を入れてください。ESP-WROOM-02はウォッチドッグタイマーが動作していて1秒くらいに1回、ESP.wdtFeed()を行わないと、CPUが暴走していると判断しリセットがかかってしまいます。delay()の場合は大丈夫なのですが、for文で長い時間ループの処理をしているなど、プログラムがCPUを長時間占有してしまうとリセットしてしまうので、適当なところで、ESP.wdtFeed() を入れてくださいね。


実験セットは↓こちら↓で購入いただけます

epdexpset04

関連リンク