SATOXのシテオク日記

~ふもっふ、ふもふも~

SSD1306のコントラスト(輝度)を変えてみる

SSD1306という制御ICを使った5~600円で買える有機ELディスプレイがあります。

1インチにも満たない小ささながら、128✕64の解像度です。

SATOXさん、最近電子工作にハマっており、この安価なディスプレイで遊んでます。

f:id:satox:20210503234814p:plain

0.96インチ 128×64ドット有機ELディスプレイ(OLED) 白色: ディスプレイ・表示器 秋月電子通商-電子部品・ネット通販

ラズパイ+Pythonで遊んでるのですが、このディスプレイがちょっと眩しすぎるし、焼付きが心配なのでコントラストを調節したいと思いました。

ssd1306データシート

データシートをみるに、コントラストの調節コマンドは0x81とあります。

一方で、AdafruitのPythonライブラリを使ってたのですが、コントラストを調節する関数があるかググってもわからず、I2Cのコマンドを叩くにもどうにもマナーが悪そうで色々悩んでたんです。

世の中の方、Pythonライブラリの機能ってどうやって調べるんでしょう。手間がかかって仕方がない。

機能があるか、ライブラリソースを調べよう

ライブラリのソースを見に行こうと思うも、ライブラリの場所はどこ?

以下の変数でファイルの場所がわかるので、実行してみます。

print(adafruit_ssd1306.__file__)

この出力結果は以下。

/usr/local/lib/python3.7/dist-packages/adafruit_ssd1306.py

そして、ソースを開いてコマンド0x81を頼りにコントラスト設定を探すと…ずばり、ありました。

def contrast(self, contrast):
     """Adjust the contrast"""
     self.write_cmd(SET_CONTRAST)
     self.write_cmd(contrast)

 初期化時に最大の0xffにセットされているようで、この関数でコントラストを指定できます。0にすると暗くなりましたが、そこそこの明るさで表示されました。

0で良いやんけ。

なんだ、あったじゃーん、というわけでソースをイジる必要はなかったというオチ。

ちなみに、ソースコードGitHubで見るなら以下。

その他のメンバ関数

その他、こんな関数がありました。

poweron() # Reset device and turn on the display

poweroff() # Turn off the display (nothing visible)

invert(invert) # Invert all pixels on the display

これらを使えば、長時間使用時の焼き付きを軽減できそうです。

余談ですが、poweronの実装がちょっと間違っていて、コメントが文字列定義になってます。う~ん、さすがPythonフリーダム。

以下、日々作り込んでるラズパイセンサーロガー。簡易的に

日の変化をグラフ表示してますが、クラウドに定期的にデータを送ってログをグラフで見ることが出来ます。

ありがたいサービス➔ Ambient – IoTデータ可視化サービス