2018.8.24更新
電子ペーパー天気予報実験セットで、電子ペーパーを制御するプログラムの作り方のご紹介です。
実験セットは↓こちら↓で購入いただけます
●BMPデータを電子ペーパーに表示する仕組み
BMPファイルの画像データは電子ペーパーに直接データを転送するのではなく、画像メモリーに1画面分のデータを保存してから、画像メモリーの内容を電子ペーパーに送る仕組みになっています。電子ペーパーは一回のデータ転送では薄くしか表示されません。しっかりと濃い表示にするためには、同じ画像データを繰り返し5,6回送る必要があります。SDカードはデータの読み込みが速くないため、一旦画像メモリーに読み込んで、画像メモリーから必要な回数電子ペーパーにデータを送信します。
電子ペーパーの画像データはモノクロデータでも60kBytesになり、ESP-WROOM-02の内蔵メモリーでは足りません。このため画像メモリーは、マイコンに1Mbit SRAMを外付けしてあります。
これらのことから、クラスの機能には、画像メモリーに対する操作と、電子ペーパーに対する操作、その他設定の操作の3つから成っています。
●基本的な使い方
BMPを電子ペーパーに表示するためには最低限以下の3つを記述します。
- epd.begin(); //初期化
- epd.loadBmp( BMPファイル名 ); //画像の読み込み
- epd.show(); //表示
- epd.fill(WHITE); //画像メモリを白でクリア
- epd.textPos( 100 , 200 ); //文字の位置 x:100,y:200
- epd.textMag( 3 , 4 ); //文字サイズ 幅3倍,縦4倍
- epd.println( "テストABC" );
- epd.show(); //表示
●リファレンス
Epd.begin()
初期化を行います。setupの中で1回実行してください。制御回路のリセットとSDカードのマウントを行っています。SDカードがマウントできないとfalseを返します。
Epd.makeFontDB();
・画像メモリーに対する操作
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追加
Epd.textPos(int x , int y) 2018.8.24追加
Epd.textMag(int xMag , int yMag) 2018.8.24追加
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() を入れてくださいね。
実験セットは↓こちら↓で購入いただけます
関連リンク
コメント