I2C接続AQMシリーズのキャラクタ表示LCDをラズパイで使う (2) AQM1602

表示面積が広くて使いやすい秋月電子通商扱いのAQM1602の仕様

 前回、1行に8文字、2行表示のAQM0802をラズパイで利用しました。コンパクトですが、表示面積が狭いです。

 AQM1602は、1行に16文字、2行表示のコンパクトなキャラクタ表示LCDです。I2CでRaspberry Piと接続すると、認識しません。こちらの記事を参照ください。秋月電子通商では、バス・リピータのPCA9515をブレッドボードで利用できるようにピン幅変換基板に搭載した製品「Raspberry Pi キャラクタ液晶ディスプレイモジュールキット
[AE-AQM0802+PCA9515]」が用意されています。AQM0802専用です。AQM1602用のセットものはありません(2017年7月現在)。

 スレーブ・アドレスはAQM0802と同じく0x3eです。

 2017年7月現在、変換基板の販売価格は500円AQM1602XA自体は450円です。

 ピンをはんだ付けして組み立てます。そのまま挿し込んではんだ付けしません。1~5番まではそのまま挿し込みますが、次のように一部配線をずらします。秋月電子通商はこのように使えることを保証していません。

AE-AQM0805+PCA9515 AQM1602XA
Vlcd 1 - Vo(Vlcd)
Vout 2 6 Vout
CAPin 3 8 CAPin
CAPip 4 7 CAPip
Vdd 5 5 Vdd
Vss 6 4 Vss
SDA 7 3 SDA
SCL 8 2 SCL
XRESET 9 1 RES
LED A 10 - -
LED K 11 - -

 AQM0802のように、LCDパネルを支えるリード線が使えないので、裏側で、グルーガンを使ってぐらつかないようにしました。

Raspberry Piに入っているプログラムの確認

 2017年7月現在、RASPBIAN JESSIE WITH DESKTOPのカーネルは4.9.39で、Pythonのバージョンは2.7.9です。python-smbus(バージョン3.1.1+svn-2)が入っています。

 i2c-toolsも入っています。最初は、このツールを使います。

AQM0802をRaspberry Piに接続して動作確認

 Raspberry Piは、最初にI2Cを利用する設定が必要です。前回の説明を参照してください。

 はんだ付けしたAQM1602ボードは、GPIOにそのままさせます。1と9ピンで電源を、3と5ピンでI2C信号を供給します。11ピンのリセット信号は使いません。

動作確認

 ターミナルから、i2cdetectコマンドで、スレーブ・アドレスを確認します。データシート通り0x3eです。 

 こちらのページにあるように初期化をします。この初期化はArduino用なので、5V動作をするため、ブースタをOFFの0x51を設定をしていますが、3.3Vで動作させるため、0x56を書き込みます。

 0x38から0x0cまでが初期化です。0x41('A')、0x42('B')、0x43('C')は表示文字です。

 正しく表示できました。

使用例

 RaspberryPiのCPUの温度は、次の命令で取得できます。

vcgencmd measure_temp

 次のプログラムで、CPU温度を表示させます。

#!usr/bin/env python
# -*- coding: utf-8 -*-
import smbus
import time
import subprocess
i2c = smbus.SMBus(1) # 1 is bus number
addr02=0x3e #lcd
_command=0x00
_data=0x40
_clear=0x01
_home=0x02
display_On=0x0f
LCD_2ndline=0x40+0x80
#LCD AQM0802/1602
def command( code ):
i2c.write_byte_data(addr02, _command, code)
time.sleep(0.1)

def writeLCD( message ):
mojilist=[]
for moji in message:
mojilist.append(ord(moji))
i2c.write_i2c_block_data(addr02, _data, mojilist)
time.sleep(0.1)
def init ():
command(0x38)
command(0x39)
command(0x14)
command(0x73)
command(0x56)
command(0x6c)
command(0x38)
command(_clear)
command(display_On)
#main
init ()
command(_clear)
writeLCD("CPU: ")
while 1:
command(LCD_2ndline)
res = subprocess.check_output(['vcgencmd','measure_temp'])
print res
writeLCD(str(res))
time.sleep(0.5)

 実行例です。最後のCの後ろにごみが付いています。気になるようなら削除してください。