SSD1306という制御ICを使った5~600円で買える有機ELディスプレイがあります。
1インチにも満たない小ささながら、128✕64の解像度です。
SATOXさん、最近電子工作にハマっており、この安価なディスプレイで遊んでます。
0.96インチ 128×64ドット有機ELディスプレイ(OLED) 白色: ディスプレイ・表示器 秋月電子通商-電子部品・ネット通販
ラズパイ+Pythonで遊んでるのですが、このディスプレイがちょっと眩しすぎるし、焼付きが心配なのでコントラストを調節したいと思いました。
データシートをみるに、コントラストの調節コマンドは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で良いやんけ。
なんだ、あったじゃーん、というわけでソースをイジる必要はなかったというオチ。
その他のメンバ関数
その他、こんな関数がありました。
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データ可視化サービス