とある事情でLCDディスプレイを手に入れたので使ってみます。
16文字×2行のしょぼいやつです。
以前に使った有機ELディスプレイのほうが文字数も機能も多いです。
低機能ですが表示するものが少なければ用途は足りるし文字も大きいので見やすく、LCDを薄くして小型化する必要の無いものであれば充分でしょうし、調べてみると特に何もインストールする必要もなく使えるそうなのでお手軽ですね。
<参考>
参考サイトの通り、まずはI2Cデバイスを有効にします。
sudo raspi-config
コマンドでラズパイの設定画面に入り、インターフェースから
I2Cデバイスを有効にします。
念の為再起動。
sudo reboot
配線も参考サイトの通り、電源とSDA/SCL線の4線を間違えないように配線するだけです。
参考サイトの通り
$sudo i2cdetect -y 1
と打つ。
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3f
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
「3f」が僕のディスプレイのアドレス
でosoyoooのサンプルプログラムをダウンロードして、
ダウンロードしたi2clcda.pyファイルを先程確認したアドレスに変更。
python3 i2clcda.py
でサンプルコードを動かしたら、LCDコントローラーのLCD濃淡調整ボリュームを弄って文字が見えるようにします。
無事に表示されたので、オリジナル文字を表示してみます。
test.py
import i2clcda as lcd
lcd.lcd_init()
lcd.lcd_string("HELLO", lcd.LCD_LINE_1)
lcd.lcd_string("1234567890123456", lcd.LCD_LINE_2)
実行!!
ちゃんと指示どうりに表示されます。簡単ですね。
さて、問題はバックライトです。
バックライト点灯しっぱなしだとLED寿命も気になりますし、消費電力も無駄になります。画面に表示するものが無い時はできれば消えてほしいものです。
LCDコントローラーに付属のピンを抜くと消えるそうですが、物理的に消すよりプログラム的に消せないのか?とサンプルプログラムを見ていると、設定項目にそれらしきものがありました。
なるほど、消したい時はこの値をどこかに入れれば良いみたいですね。
サンプルコードを見てみると、どうやらビット処理したら出来るっぽいことを発見。
サンプルコードの i2clcda.py に以下を追加
def backlight( light = True ):
On = 0x08 # LED On
Off = 0x00 # LED Off
if light:
light = On
else:
light = Off
bits_high = LCD_CMD | light
bits_low = LCD_CMD | light
# High bits
bus.write_byte(I2C_ADDR, bits_high)
lcd_toggle_enable(bits_high)
# Low bits
bus.write_byte(I2C_ADDR, bits_low)
lcd_toggle_enable(bits_low)
backlight( True )でON,backlight( False )でOFFになる設定だけLCDに送るコードです。
で、同サンプルコードのmainにbacklight(False)を追記しました。
def main():
# Main program block
# Initialise display
lcd_init()
while True:
# Send some test
lcd_string("Created by <",LCD_LINE_1)
lcd_string("Osoyoo.com <",LCD_LINE_2)
time.sleep(3)
# Send some more text
lcd_string("> Tutorial Url:",LCD_LINE_1)
lcd_string("> http://osoyoo.com",LCD_LINE_2)
backlight(False)
time.sleep(3)
実行!
きちんと動作しました!大成功です。
注意点は、[ 文字表示 → バックライトOFF ]という順番で操作することです。
逆だと、一瞬消えて文字表示した瞬間バックライトが点灯します。(文字表示のときに既にバックライトコードも盛り込むので)
これで情報を表示して、しばらく更新が無ければバックライトを消灯する。ということができますね^^
今回は以上です。