DreamerDreamのブログ

夢想家の夢です。〜揚げたてのモヤっとしたものをラフレシアと共に〜

RaspberryPiからLCDのバックライトを操作する方法 備忘録

とある事情でLCDディスプレイを手に入れたので使ってみます。

 

16文字×2行のしょぼいやつです。

 

以前に使った有機ELディスプレイのほうが文字数も機能も多いです。

dreamerdream.hateblo.jp

 

低機能ですが表示するものが少なければ用途は足りるし文字も大きいので見やすく、LCDを薄くして小型化する必要の無いものであれば充分でしょうし、調べてみると特に何もインストールする必要もなく使えるそうなのでお手軽ですね。

 

<参考>

hellobreak.net

 

参考サイトの通り、まずは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」が僕のディスプレイのアドレス

 

wget http://osoyoo.com/driver/i2clcda.py

 

で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)

 

実行!


www.youtube.com

 

きちんと動作しました!大成功です。

 

注意点は、[ 文字表示 → バックライトOFF ]という順番で操作することです。

逆だと、一瞬消えて文字表示した瞬間バックライトが点灯します。(文字表示のときに既にバックライトコードも盛り込むので)

これで情報を表示して、しばらく更新が無ければバックライトを消灯する。ということができますね^^

 

今回は以上です。

 

 

 

 

kampa.me