Yotazo Lab.

ほぼ自分用。でも誰かの役に立つかもしれない話題

Raspberry Piでインターネットラジオを作る #6

RPLCDの導入

HD44780の初期設定を調べている時に、Arduinoには LiquidCrystal という便利そうなライブラリがあることを知りました。これいいな~と思っていたら、 似たような感じの、RPLCDというRaspberry Pi用ライブラリがあるではありませんか。

GitHub - dbrgn/RPLCD: A Raspberry Pi LCD library for the widely used Hitachi HD44780 controller, written in Python. GPIO (parallel) and I²C modes supported.

Readmeにはこう書いてありました。

This library is inspired by Adafruit Industries' CharLCD library as well as by Arduino's LiquidCrystal library.

じゃあちょっとこれを入れてみることにします。

RPLCDの概要

  • Raspberry PIでキャラクLCDを制御するためのライブラリ
  • Python 2/3互換
  • 4bit/8bitの両モードに対応
  • 20x4、16x2のLCDでテスト済み
  • 要RPi.GPIO

こんな感じでしょうか。
面倒なLCDの制御ですが、こいつを通せば楽に扱えるようになるという便利君です。

RPLCDのインストール

手動で設置してもいいですが、RPLCDはpipでインストールすることができます。

pipのインストール方法

 ※python-devを使うので、無い場合はインストールします

$ sudo apt-get install python-dev
$ sudo apt-get install python-pip

アップグレードします

$ sudo pip install --upgrade pip

ターミナルを再起動して、バージョン確認

pip --version

ヘルプ

pip help

pipの準備ができたら、RPLCDをインストールします。

$sudo pip install RPLCD

これでOKです。

Raspberry PiのGPIOとLCDの結線

GPIOとLCDの結線がまだならば、RPLCDの初期設定通りに結線しておけばひと手間省けます。すでに結線してある場合は、初期設定でピンの設定をするのでここは飛ばして構いません。

結線の初期設定は下記の通りです。
(注意:数字は、BOARDモードの番号です)

RS: 15
RW: 18(GNDに落とす方法は後述)
E: 16
Data 4-7: 21, 22, 23, 24

RPLCDの初期設定

初期設定は、使用するプログラム内に書きます。
こんな感じで、CharLCDのインスタンス生成時に設定します。

import RPi.GPIO as GPIO
from RPLCD import CharLCD

lcd = CharLCD(pin_rs=15, pin_rw=18, pin_e=16, pins_data=[21, 22, 23, 24],
              numbering_mode=GPIO.BOARD,
              cols=20, rows=4, dotsize=8)
numbering_mode :GPIOピンの指定モード

順序が前後しますが、まずはここを設定

BOARDで設定する場合: numbering_mode=GPIO.BOARD
BCMで設定する場合: numbering_mode=GPIO.BCM

pin_rs, pin_rw, pin_e, pins_data :LCD端子の接続設定

GPIOとLCD端子の対応をそれぞれ設定します。
(ピン番号は、GPIOピンの指定方法で設定した番号で書きます)

pin_rs = RS
pin_rw = RW
pin_e = E
pins_data = [DB4, DB5, DB6, DB7]

※RWをGNDに落としている場合、pin_rw=None とします。
※8bitで使う場合、pins_data = [DB0, DB1, DB2, DB3, DB4, DB5, DB6, DB7]

rows: LCDの行数(通常は1,2,4)
cols: LCDの文字数(通常は16,20)
dotsize: ドットサイズ(通常は8、10が使えるLCDならば10も可)

16文字X2行 の場合 : cols=16, rows=2, dotsize=8
20文字X4行 の場合 : cols=20, rows=4, dotsize=8

【具体例】

16文字×2行のLCDを下記のように接続した場合、

RS --- GPIO7
RW --- GND
E --- GPIO8
DB4 --- GPIO25
DB5 --- GPIO24
DB6 --- GPIO23
DB7 --- GPIO18

初期設定はこうなります↓

pin_rs=7
pin_rw=None
pin_e=8
pins_data=[25, 24, 23, 18]
numbering_mode=GPIO.BCM
cols=16
rows=2
dotsize=8

RPLCDの初期設定(番外)

いちいちプログラムに初期設定を書くのが面倒な場合、RPLCD本体にある設定を書き換えてしまえばOKみたいです。LCDをとっかえひっかえしなければ、こちらのほうが楽です。

lcd.pyを開き、128行目あたりにある class CharLCD(object):の初期値を書き換えればOK。実行するプログラム側に初期設定を書けば、ここは上書きされます。

lcd.pyは、うちの環境ではここにあります。
/usr/local/lib/python2.7/dist-packages/RPLCD/lcd.py

テスト

ちょっくらテストしてみます
※ここでは、RPi.GPIOはlcd.pyから読んでいるのでimportしなくても大丈夫です

from RPLCD import CharLCD
lcd = CharLCD()
lcd.write_string('Hello world!')

f:id:yotazo:20150312145802j:plain

楽ちんです!

さらに、テストスクリプトがあるので実行してみます。

16×2用のテストスクリプト
https://raw.githubusercontent.com/dbrgn/RPLCD/master/test_16x2.py


f:id:yotazo:20150312145806j:plain

うまく動くと、LCDにデモ画面が表示されます。文字やカーソルの位置が期待通りの場所に表示されているかなどのチェックができます。

これでLCDの表示は問題なさそうです。


GitHub - dbrgn/RPLCD: A Raspberry Pi LCD library for the widely used Hitachi HD44780 controller, written in Python. GPIO (parallel) and I²C modes supported.


[asin:B00T356SFO:detail]

みんなのRaspberry Pi入門 [対応言語:Python]

みんなのRaspberry Pi入門 [対応言語:Python]

Raspberry Pi Zero - ラズベリー・パイ ゼロ

Raspberry Pi Zero - ラズベリー・パイ ゼロ

  • 発売日: 2015/11/26
  • メディア: Personal Computers