M5StackCore2のLCDバックライトの制御は「M5.Lcd.setBrightness」を使うと思っていましたが違う(らしい)ことが分かりました(自分の知識不足も分かりました)。LCDバックライトの制御には「M5.Axp.SetLcdVoltage」を使うようです。
本記事は下記記事のアップデートになります。
検索しても分からず迷走した次第です(他のユーザさんにとっては常識なのでしょうか?)。
目次
M5Stack Core2バックライト制御はSetLcdVoltageを使う(ようです)
M5StackCore2のLCDバックライト制御は、ILI9342CというLCD関連の石ではなくAXP192という電源管理用の石が行っているようです。AXP192.cppを見ると下記のようになっており、2.5V~3.3Vの電圧で明るさを制御できるようです。
void AXP192::SetLcdVoltage(uint16_t voltage)
{
if (voltage >= 2500 && voltage <= 3300)
{
SetDCVoltage(2, voltage);
}
}
下の画像は立ち上げ直後の画面になります。begin内を見ると、ここでは2.8V(2800)が設定されているようです。
setBrightnessというそれっぽい関数を使わず SetLcdVoltage というややそれっぽい関数を使うとは・・・、 これはまさに、
M5.Axp.SetLcdVoltage(3300) の場合(最大輝度)
明るい!
M5.Lcd.setBrightnessではびくともしなかったバックライトが写真で黒浮きが分かるレベルまで明るくなったことが確認できるかと思います。
M5.Axp.SetLcdVoltage(2500) の場合(最低輝度)
バックライト、いい感じに沈みました。やればできる!
M5.Axp.SetDCDC3(false) でバックライトOFF
良いです。
画面が暗いためピントが合いません。
この使い方(この関数)はbegin内の処理を見て実装してみました(begin内ではtrue指定)。うまく行きました(うまく行ったように見えます)。
まとめ
まとめると下記のような感じになります。
この辺りを使えばバックライト制御は良いかと思います。
・明るさ制御
M5.Axp.SetLcdVoltage(2500から3300を設定) ※値域外は無視
・バックライトOFF
M5.Axp.SetDCDC3(false) ※多分これを使う(ソース内にコメントなし)
・バックライトON
M5.Axp.SetDCDC3(true) ※begin内で使用していた
・LCDスリープ
M5.Lcd.sleep()
・LCD起床
M5.Lcd.wakeup()
バックライトのPWM制御はノイズ源になったり、画面のカメラ撮影に影響するため、無くても良いかと思いますが、その情報を検索等で入手しにくいのはオープン系ならではなのかもしれません(知っている、知っていないの差が大きい)。
以上、参考に少しでもなれば嬉しいです。