IoT何をいまさら(50) M5Stack、LCDのONとOFF

JosephHalfmoon
JosephHalfmoon

前回、バッテリが放電して動作しなくなるまでの様子をSDカードに記録できました。今回はLCDのONとOFFで、フル充電から、動かなくなるまでの期間とその期間のバッテリレベルの変化を比べてみたいと思います。でもね、LCDオフっちゃって「終わった」ことをどうやって知ろうかしら?

まずは単刀直入に、取得ほやほやのデータのグラフをご覧いただきましょう。Y軸がバッテリ・レベル、X軸が分単位の時間(ほぼ)、紺がLCDオン状態、オレンジがLCDオフ状態です。

どうですかね、LCDをオフるとほぼ倍くらいに動作時間が伸びている感じです。まあ、目論見どおりかと思います。フル充電になった直後に(isChargeFull()関数がフル充電を示したことを目視で確認しています)、USBケーブルを引き抜いた後、M5Stack Greyの内蔵150mAhのバッテリの電圧レベルが低下してアプリ・プログラムが動作しなくなるまでの様子の実例、ということであります。

LCDオンのときは、LCDが消灯したのを見て、「あ、終わった」と判断し、いそいそとSDカードを抜き取ってデータを読みだしていたのです。しかし、LCDオフのときは、「終わった」判断が難しいです。まあ、長時間放置すれば終わっているにきまっているのですが、「終わっていない」のにSDを抜きたくない。そこでテスター持ち出しました。こんな具合。

 

M5Stackの側面の3v3電源端子とGNDの間の電圧を測れるようにいたしました。上の写真は、充電中の様子。3.337Vが出力されていることが分かります。内蔵バッテリが放電しきって停止した後、電圧測るとかなりばらつくのですが、せいぜい1V前後の電圧しか見えないようなので、電圧観察して3.3Vを大きく割り込んでいたら終了、という判断であります。

LCDオンのときのプログラムは前回のものそのままですが、LCDオフ用には若干書き換えています。測定開始したら、

M5.Lcd.sleep();
M5.Lcd.setBrightness(0);

をするようにして、LCDをオフっています。正直に言うと、最初

M5.Lcd.sleep();

のみ挿入して実験してみたのです。するとなんということでしょう。

画面が真っ白に光っている

確かにLCDコントローラは停止し、画面に書き出した文字などは見えなくなったのですが、バックライトが依然、煌々と点灯していらっしゃるではありませんか。これでは消費電力など落ちる筈もありません。おやおやと思って

https://github.com/m5stack/m5-docs/blob/master/docs/ja/api/lcd.md

を読んでみると、ちゃんと書いてあるではありませんか。sleep()関数の情報という部分から1項目引用させていただきます。(なお、こちらのGithubのAPIドキュメントは日本語です。ありがたや。)

2)M5StackのLCDバックライトは別に制御しているため、必要に応じてsetBrightness( )関数で調整してください。

つまり、sleep()させただけでは、LCDに表示されなくなっただけで、バックライトは以前の設定値で光り続けてしまうと。よって、setBrightness()に0を与えてバックライトの消灯もしないとイケなかったのでした。

まあ、LCDを消しておけば大分電池の持ちが違うことが分かりました。しかし、それでも1時間とちょっと。まだ、DeepsleepとかLightsleepとか使っていないのがあるね~。そいつらをLCDオフと併用するとどのくらい動作継続時間を伸ばせるかしらん?

IoT何をいまさら(49) M5Stack、バッテリ切れを測る へ戻る

IoT何をいまさら(51) USB電力メーターで充電の様子を観察 へ進む