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

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

epdexpset04
  ●サンプルプログラム  
Arduinoの開発環境でプログラムでします。Arduino開発環境のセットアアップ方法はこちら

サンプルプログラムはこちらです↓。
 最新版 2018.8.24 epdhello.zip (文字を描画できるようになりました。描画が高速になりました)
 
  2018.2.26版 epdhello20180226.zip  (16色,フルカラーBMPも読み込めるようになりました)
  2017.12.14版 epdhello20171214.zip

zipを展開してできたepdhelloフォルダを、arduinoフォルダに入れてください。
epdhelloの中のsdフォルダの中身を、SDカードにコピーしてください。SDカードの中に、bmpファイルとfontフォルダができていればOKです。SDカードは、電子ペーパー実験セット基板のSDカードスロットに挿してから、USBをパソコンとつないで下さい。(2018.8.24追記)

Arduinoの開発環境で、epdhello.inoを開くとサンプルプログラムのファイルが全て読み込まれます。この中で、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()で表示します。

文字を電子ペーパーに表示するためには、以下のようになります。
  1. epd.fill(WHITE);      //画像メモリを白でクリア
  2. epd.textPos( 100 , 200 );  //文字の位置 x:100,y:200
  3. epd.textMag( 3 , 4 );       //文字サイズ 幅3倍,縦4倍
  4. epd.println( "テストABC" );
  5. epd.show();        //表示

  ●リファレンス  
epdクラスで用意してある機能をご紹介します。

・初期化
Epd.begin()

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


Epd.makeFontDB();

 フォントデータに高速にアクセスするためのDBファイルを生成します。ファイルはSDカードのfontフォルダに作られます。プログラムでフォントファイルを変更した時に、setupの中で実行してください。

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

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.print( "abc" )  2018.8.24追加

 画像メモリーに指定した文字列を描画します。arduinoのprintと同じ使い方です。


Epd.println( "abc" )  2018.8.24追加

 画像メモリーに指定した文字列を描画します。文字の終わりで改行します。arduinoのprintinと同じ使い方です。


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

Epd.show()

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


Epd.white()

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


Epd.black()

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


Epd.reflesh()

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


・設定に関する操作

Epd.textColor( color ) 2018.8.24追加

 printとprintlnで描画するテキストの色を指定します。colorは BLACK か WHITE のどちらかのみを指定します。

Epd.textPos(int x , int y) 2018.8.24追加

 printとprintlnで描画するテキストの位置を指定します。x,yは文字の左上の座標です。

Epd.textMag(int xMag , int yMag) 2018.8.24追加

 printとprintlnで描画するテキストの倍率を指定します。xMag,yMagは、元のフォントを横、縦の何倍となります。

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

関連リンク