概要
RaspberryPiで温度計測センサADT7410とst7032i搭載LCDを制御し、温度をLCDに表示させるコードです。温度が上がると▲アイコンを表示、下がると▼を表示します。
動作動画
ADT7410チップをさわっている間は温度が上がるため▲アイコン表示、指を離すと温度が下がり▼アイコンが表示される仕様です。
ソース
たまにLCDの初期化でIOErrorが発生すると思いますが、例外処理していません。そんな時は再度実行すると動作します。
ADT7410.py
import smbus
from time import sleep
global old_val
def read_adt7410():
data = bus.read_word_data(adt7410,reg_data)
data2 = (data&0x00ff)<<8 | (data&0xff00)>>8
data2 >>= 3
if data2&0x1000:
temp = (data2-8192) * 0.0625
else:
temp = data2 * 0.0625
return temp
def setup_lcd():
sleep(0.04)
bus.write_i2c_block_data(lcd,command_inst,[0x39,0x39,0x1c,0x78,0x5d,0x6c])
sleep(0.2)
bus.write_i2c_block_data(lcd,command_inst,[0x0c,0x01])
sleep(0.001)
def write_string(s):
bus.write_byte_data(lcd,command_inst,0x01)
sleep(0.001)
for c in list(s):
bus.write_byte_data(lcd,command_data,ord(c))
def icon(i):
if i==0:
bus.write_byte_data(lcd,command_inst,0x47)
bus.write_byte_data(lcd,command_data,0x08)
elif i==1:
bus.write_byte_data(lcd,command_inst,0x47)
bus.write_byte_data(lcd,command_data,0x10)
bus = smbus.SMBus(1)
adt7410 = 0x48
reg_data = 0x00
lcd = 0x3e
command_inst = 0x00
command_data = 0x40
contrust = 40
old_val = read_adt7410()
setup_lcd()
try:
while True:
val = read_adt7410()
if val > old_val:
icon(1)
else:
icon(0)
old_val = val
write_string(str(val))
sleep(0.5)
except KeyboardInterrupt:
pass