ラズパイで文字やドット絵を手軽に表示できるデバイスとして使用されるのが、LCDモジュールやOLEDモジュールです。これらのデバイスはAdafruit社などが作成したライブラリがあり、とても簡単にプログラムを作成できます。今回は、ラズパイとLCD/OLEDデバイスの接続方法、ライブラリのインストール、プログラムの書き方について紹介します。
キャラクタディスプレイ
液晶ディスプレイ(LCD)は、文字(キャラクタ)を表示できるデバイスです。
印可する電圧によって分子の配列が変化する液晶と呼ばれる物質と、特定の偏光方向の光のみを通す偏光板という物を利用します。
液晶の分子配列と偏光板の偏光方向が一致すると透明に見え、一致しなければ不透明に見えます。
液晶はLEDと異なり自分で光を発することができません。
そのため、LEDを利用したバックライトや反射板を内蔵することで、コントラストを向上させ、読みやすくなるように工夫されています。
LCDを選ぶ際には表示できる文字数や表示・バックライトの色のほかに、接続方法を確認しておく必要があります。
安価なLCDには16本(または14本)のピンがあり、パラレル接続で使用します。
少し高価なLCDの中にはLCDに変換モジュールが内蔵または外付けされていて、I2C接続で使用できるものもあります。
ここでは前者のLCDモジュールを使います。
Raspberry Piからの制御に加えて、10kΩの可変抵抗を一つ取り付けます。
この可変抵抗で、文字が見えるようにLCDのコントラストを調整します
回路がやや複雑なので、接続リストを作成しました。
市販されているLCDの中には、この表とGNDとVCCの配置が逆のものや、バックライトのピンが別になっているもの/ないもの/LED用の抵抗が別途必要なものなどもあります。実物やデータシートを見て確認してください。
名前 | LCDのピン | Raspberry Pi GPIOピン |
GND | VSS | GND |
VCC | VDD | 5V |
Contrast | V0 | 可変抵抗 |
Register Selector | RS | GPIO 25 |
Read/Write | RW | GND |
Enable | E | GPIO 24 |
データライン 0~3 | D0 ~ D3 | 接続なし |
データライン 4 | D4 | GPIO23 |
データライン 5 | D5 | GPIO17 |
データライン 6 | D6 | GPIO18 |
データライン 7 | D7 | GPIO22 |
バックライトアノード | A | 5V |
バックライトカソード | K | GND |
可変抵抗は両端のピンをそれぞれ5VとGNDに、中央のピンをLCDのV0ピンに接続します。
次に、Raspberry Piのライブラリをインストールします。
ライブラリがなくてもLCDを使うことはできますが、大変な回り道になります。
ライブラリ「Adafruit-CharLCD」をインストールします。
pip3 install Adafruit-CharLCD
次のコードを使ってLCDに文字を出力します。
import time import Adafruit_CharLCD as LCD lcd_rs = 25 lcd_en = 24 lcd_d4 = 23 lcd_d5 = 17 lcd_d6 = 18 lcd_d7 = 22 lcd_backlight = 4 lcd_columns = 16 lcd_rows = 2 lcd = LCD.Adafruit_CharLCD(lcd_rs,lcd_en,lcd_d4,lcd_d5,lcd_d6,lcd_d7,lcd_columns,lcd_rows,lcd_backlight) lcd.clear() lcd.blink(False) lcd.show_cursor(False) lcd.message("Hello\nWorld")
LCDに何も表示されない場合、コントラスト調整用の可変抵抗を動かしてみてください。
グラフィックディスプレイ
グラフィックディスプレイは、言うなれば非常に小さなLEDをたくさん使用したドットマトリックス表示器です。単色表示のシンプルなものからカラー表示できる複雑なものまで数多く市販されており、身の回りでも様々な場面で目にする表示デバイスです。
例えば横幅160ピクセル×高さ128ピクセルのディスプレイになると、それぞれの点を個別にON/OFFを制御することは現実的ではありません。(160×128=20480点もあります)
こうしたグラフィックディスプレイは、通常I2CやSPIなどでシリアル接続して使用します。
ここまでの例でキャラクタディスプレイの直接接続やドットマトリックスLEDのSPI接続を取り上げたので、ここではI2C接続のグラフィックディスプレイを使用してみます。回路は非常にシンプルになります。
SPIインターフェースと同様に、Raspberry Pi のI2Cインターフェースを使えるように設定します。
設定は「raspi-config」ツールを使用して行います。コンソールで「sudo raspi-config」を実行すると起動できます。
「5 Interface Options」>「P5 I2C」を選択し、「Yes」を選択します。
I2Cをオフにしたい場合はここで「No」を選択します。
今回必要なライブラリは「Adafruit-SSD1306」というライブラリです。
以下のコマンドでインストールします。
pip3 install Adafruit-SSD1306
このライブラリはSSD1306というコントローラを使用した128×64ピクセルの有機ELディスプレイに特化したものです。
他のグラフィックディスプレイや有機ELディスプレイを使用する場合にはこれとは別のライブラリが必要になるかもしれません。
準備ができたら、次のコードを使ってグラフィックディスプレイに文字を出力します。
import time import Adafruit_SSD1306 from PIL import Image from PIL import ImageDraw from PIL import ImageFont RST = None disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST) disp.begin() disp.clear() disp.display() image = Image.new('1',(disp.width,disp.height)) draw = ImageDraw.Draw(image) font = ImageFont.load_default() draw.rectangle((0,0,disp.width,disp.height),outline=0,fill=0) draw.text((0,0),"Hello",font=font,fill=255) draw.text((0,8),"World",font=font,fill=255) disp.image(image) disp.display()
コメントを残す