Raspberry pi から20文字x4行LCD(SC2004)を制御する

ここではi2cInterfaceBoardを使ってRaspberry pi から20文字x4行LCD(SC2004)を制御する例を紹介します。
LCDには現在時刻の表示と外部センサー(温度湿度センサー)から読み取った値を表示します.

I2C Interface BoardとRaspberry piとの接続は電源(3.3V)とグランド、I2Cの二本の信号線のみです.
CIMG2417
プログラムを書く上で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の限られたポートが多く使われる事はありません.