Raspberry Piでシステムを構築するとき、状態が表示される機能があるとなにかと便利です。そこでRaspberry PiにLCDキャラクタ・ディスプレイを付けることにしました。
接続のための線が少なくて済むようにI2Cタイプのものを探すと、I/Fモジュールを利用してI2Cで制御できるようにしたものがAmazonから安価で入手できるのでそれを利用することにしました。
Amazon.co.jp: WayinTop 2004 LCD ディスプレイモジュール 20×4キャラクタ 緑 バックライト付き + IIC/I2C/TWI/SPI シリアルインターフェイス シリアルI/F モジュールポート : 産業・研究開発用品
I/Fモジュールは、写真のように、LCDの基板の裏側にはんだ付けで取り付けられるようになっています。
I/Fモジュールを使うことにより、Raspberry Piとの接続は4本だけになります。
LCDのバックライト端子を短絡するとオンになるのですが、それだと明るすぎます。330Ω程度の抵抗を入れると丁度いいようです。また、100kΩの可変抵抗でコントラストを変えることができますが、調整できる範囲が狭いので少し使いにくさがあります。
Raspberry Piにおいて、Raspberry Piの設定>インターフェイスでI2Cを有効化し、i2cdetectコマンドを使うと、接続のアドレスが分かります。0x27です。
pi@raspberrypi:~ $ i2cdetect -l i2c-20 i2c Broadcom STB : I2C adapter i2c-1 i2c bcm2835 (i2c@7e804000) I2C adapter i2c-21 i2c Broadcom STB : I2C adapter pi@raspberrypi:~ $ i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- 27 -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- pi@raspberrypi:~ $
LCDに送るコマンドやデータの書き込み方を探すと、下記のOSOYOOのサイトに参考になる記事があります。
Raspberry Pi Starter Kit Lesson 13: I2C 1602 LCD « osoyoo.com
その中にi2c1602_lcd.pyというPythonのコードも紹介されています。中身を解析すると、
I2C_ADDR = 0x3F
LCD_WIDTH = 16
の部分を
I2C_ADDR = 0x27
LCD_WIDTH = 20
と変更してやれば使えそうなので、利用させてもらうことにしました。
i2c1602_lcd.pyをi2clcd2004.pyと名前を変えて保存し、同じディレクトリの中に下記のテスト用のプログラム lcdtest.py を作ります。
import i2clcd2004 as lcd lcd.lcd_init() lcd.lcd_string(" March 14 is Pi Day", lcd.LCD_LINE_1) lcd.lcd_string(" 3/14 --> 3.14", lcd.LCD_LINE_2) lcd.lcd_string("I celebrate it with", lcd.LCD_LINE_3) lcd.lcd_string(" Raspberry Pi 4B!", lcd.LCD_LINE_4)
下のビデオはその lcdtest.py を実行した結果です。
今日3月14日は「πの日」ですので、テストでこういう文言を表示させてみました。
www.youtube.com
ーーーーーーーーー