ここではi2cInterfaceBoardを使ってRaspberry pi から20文字x4行LCD(SC2004)を制御する例を紹介します。
LCDには現在時刻の表示と外部センサー(温度湿度センサー)から読み取った値を表示します.
I2C Interface BoardとRaspberry piとの接続は電源(3.3V)とグランド、I2Cの二本の信号線のみです.
プログラムを書く上でpythonライブラリーを予めダウンロードしておきます。
以下サンプルソース
#!/usr/bin/python
import time
import i2cinterface99
import datetime
import subprocess
ii = i2cinterface99.i2cinterface99() #専用ライブラリーを読み込みます
ii.lcdInit(20) #接続するLCDのタイプを指定します。ここでは20x4(SC2004)を使います
time.sleep(1) #初期化のための時間を待ちます
ii.lcdClear() #LCD表示のクリア
ii.lcdSetPosition(0,0) #カーソル位置を左上にセット
ii.lcdPrint('Raspberry pi &')
ii.lcdSetPosition(0,1) #2行目に移動
ii.lcdPrint(' I2C Interface board')
try:
count = 0
redPushCount=0
while 1:
time.sleep(0.5) #0.5秒ごとに処理を繰り返します
count +=1
d=datetime.datetime.today() #現在時刻の取得
str=d.strftime("%m/%d %X")
ret = ii.lcdSetPosition(0,2) #2行目にセット
if ret == True: #直前のコマンドが成功した事を確認する
ii.lcdPrint(str)
if count == 1:
ii.led(0,0) #LEDも0.5秒ごとに明滅するようにした
ii.led(1,0)
elif count == 2:
ii.led(0,1)
elif count == 3:
ii.led(0,0)
ii.led(1,1)
elif count >3:
ii.led(0,1)
ret = subprocess.check_output(["sudo","./dht11-information"]); #温度湿度センサーDHT11の測定値を読む.ここでは外部実行ファイルの戻り値を参照する
ret = ret.split(",")
if ret[0]!="0" and ret[1]!="0":
if ii.lcdSetPosition(0,3)==True:
ii.lcdPrint(ret[0])
ii.lcdWrite(0xdf)
str= "C "+ret[1]+"% "
ii.lcdPrint(str)
count = 0
except KeyboardInterrupt: #ユーザー割り込みctrl+cが押されたときの処理
print 'user terminated'
実行はsudo権限で行います。もちろんraspberry pi でi2cを制御するための基本設定は済んでいる事
0.5秒ごとに処理をしている関係で”秒”の更新にぎこちなさが見られます.これは処理の頻度を上げる事で解消する事でしょう。
I2C interface board を使う事で、LCDの制御、LEDの制御のためにRaspberry piの限られたポートが多く使われる事はありません.