Raspberry PiでLCDを自由自在に使いこなす

標準

Raspberry PiでLCDキャラクタディスプレイを使って、自由自在に文字表示が出来るようにします。
ディスプレイに温度を表示させたりとか出来ると、一気にRaspiの活用の幅が広がると思うので、この機会に是非。

使用したディスプレイは「I2C接続キャラクタLCDモジュール 16×2行 白色バックライト付」というやつです。1,200円というLCDの中では中庸的な価格ですね。このディスプレイはコントラスト調整しないと何一つ文字が読めないので、半固定抵抗器などを活用して調整する必要があります。

今回は温度センサーモジュールを併用した場合のソースを書いておこうと思います。
使用した温度センサーモジュールはこちらです。また、Raspberry Piはアナログ値を読み取ることが出来ないので、A/DコンバーターであるMCP3008を使っています。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
  
import sys
import time
import spidev
import smbus
import time
import datetime
import subprocess
  
t0 = 0
d1 = 0
bus_number = 1
  
/* LCDのアドレスを設定 データシートに沿ってください */
addr = 0x50
register_setting = 0x00
register_display = 0x80
  
spi = spidev.SpiDev()
spi.open(0,0)
  
/* LCD初期化する関数 */
def setup_lcd():
	bus.write_byte_data(addr, register_setting, 0x01)
	time.sleep(0.02)
	bus.write_byte_data(addr, register_setting, 0x38)
	time.sleep(0.02)
	bus.write_byte_data(addr, register_setting, 0x0f)
	time.sleep(0.02)
	bus.write_byte_data(addr, register_setting, 0x06)
	time.sleep(0.02)
  
/* LCDに文字を表示する関数 */
def write_str(str):
	for c in list(str):
		bus.write_byte_data(addr,register_display,ord(c))
		time.sleep(0.1)
  
/* 温度センサーモジュールから値を取得する関数 */
def get_adc(channel):
	r = spi.xfer2([1,(8+channel)<<;4,0])
	ret = ((r[1]&3) << 8) + r[2]
	return ret
  
bus = smbus.SMBus(bus_number)
  
setup_lcd()
  
while 1:
	bus.write_byte_data(addr,register_setting,0x80) //LCDのカーソルを左上に
	t0=round(((get_adc(0)*3.3/1024)-0.500)/0.010,4) //取得したデジタル値から温度に変換
	d1=datetime.datetime.now().strftime("%Y/%m/%d %H:%M")
	write_str("temp:" + str(t0))
	bus.write_byte_data(addr, register_setting, 0xc0) //LCDを改行
	write_str(str(d1))
	print('%s' %t0)
	print('%s' %d1)
	time.sleep(60)

これで、温度センサーモジュールから出力されたアナログ値を、A/Dコンバーターで変換したデジタル値から温度に変換して、その値をLCDディスプレイに表示させることが出来ます。
今回の本題となっている「LCDを自在に操る」ためには、このソース内にあるwrite_str()関数を使えばいいということになります。このソースを添削していけば色々な事に応用できると思うので、是非ご活用ください。

参考にしたサイト:
http://pongsuke.hatenablog.com/entry/2016/01/12/141904
http://qiita.com/masato/items/f089a17b1c9329eb7d03

投稿者プロフィール

yoshipc
コンピューター関連を得意としています。PHPが専門です(尚、技量はお察し)。このブログとMastodonのインスタンスを運営・管理しています。よろしくお願いいたします。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です