• Skip to main content
  • Skip to primary sidebar
  • Skip to footer
  • HOME
  • Arduino
    • Arduino初心者編
    • Arduino基礎編
    • Arduino応用編
    • Arduino実践編
  • Raspberry Pi
  • microbit
  • XBee
  • Scratch
  • Contact Us
  • Privacy Policy

STEMSHIP

ものづくりを通して、科学を学ぼう!

現在の場所:ホーム / Raspberry Pi / Raspberry Pi はじめてのラズパイ:ディスプレイ(LCD, OLED)を制御する

Raspberry Pi はじめてのラズパイ:ディスプレイ(LCD, OLED)を制御する

2020年10月27日 by STEMSHIP コメントを書く

ラズパイで文字やドット絵を手軽に表示できるデバイスとして使用されるのが、LCDモジュールやOLEDモジュールです。これらのデバイスはAdafruit社などが作成したライブラリがあり、とても簡単にプログラムを作成できます。今回は、ラズパイとLCD/OLEDデバイスの接続方法、ライブラリのインストール、プログラムの書き方について紹介します。

キャラクタディスプレイ

液晶ディスプレイ(LCD)は、文字(キャラクタ)を表示できるデバイスです。
印可する電圧によって分子の配列が変化する液晶と呼ばれる物質と、特定の偏光方向の光のみを通す偏光板という物を利用します。

液晶の分子配列と偏光板の偏光方向が一致すると透明に見え、一致しなければ不透明に見えます。
液晶はLEDと異なり自分で光を発することができません。
そのため、LEDを利用したバックライトや反射板を内蔵することで、コントラストを向上させ、読みやすくなるように工夫されています。

LCDを選ぶ際には表示できる文字数や表示・バックライトの色のほかに、接続方法を確認しておく必要があります。

安価なLCDには16本(または14本)のピンがあり、パラレル接続で使用します。

図1 1602 LCD ディスプレイモジュール


少し高価なLCDの中にはLCDに変換モジュールが内蔵または外付けされていて、I2C接続で使用できるものもあります。

図2 1602 LCD ディスプレイモジュール + IIC/I2C/TWI/SPI シリアルインターフェイスモジュール

ここでは前者のLCDモジュールを使います。
Raspberry Piからの制御に加えて、10kΩの可変抵抗を一つ取り付けます。
この可変抵抗で、文字が見えるようにLCDのコントラストを調整します

図3 キャラクタLCDのブレッドボード接続図

回路がやや複雑なので、接続リストを作成しました。
市販されているLCDの中には、この表とGNDとVCCの配置が逆のものや、バックライトのピンが別になっているもの/ないもの/LED用の抵抗が別途必要なものなどもあります。実物やデータシートを見て確認してください。

名前LCDのピンRaspberry Pi GPIOピン
GNDVSSGND
VCCVDD5V
ContrastV0可変抵抗
Register SelectorRSGPIO 25
Read/WriteRWGND
EnableEGPIO 24
データライン 0~3D0 ~ D3接続なし
データライン 4D4GPIO23
データライン 5D5GPIO17
データライン 6D6GPIO18
データライン 7D7GPIO22
バックライトアノードA5V
バックライトカソードKGND


可変抵抗は両端のピンをそれぞれ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をたくさん使用したドットマトリックス表示器です。単色表示のシンプルなものからカラー表示できる複雑なものまで数多く市販されており、身の回りでも様々な場面で目にする表示デバイスです。

図4 Adafruit PiOLED

例えば横幅160ピクセル×高さ128ピクセルのディスプレイになると、それぞれの点を個別にON/OFFを制御することは現実的ではありません。(160×128=20480点もあります)
こうしたグラフィックディスプレイは、通常I2CやSPIなどでシリアル接続して使用します。

ここまでの例でキャラクタディスプレイの直接接続やドットマトリックスLEDのSPI接続を取り上げたので、ここではI2C接続のグラフィックディスプレイを使用してみます。回路は非常にシンプルになります。

図5 I2CグラフィックディスプレイとRaspberry Piの接続

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()

Filed Under: Raspberry Pi 関連タグ:LCD, OLED

Reader Interactions

コメントを残す コメントをキャンセル

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。

最初のサイドバー

CONTACT US

  • Facebook
  • Twitter
  • Youtube

More to See

Arduinoベースのセンサノード:XBeeデータ収集ノードの製作

2021年9月27日 By STEMSHIP

Arduinoベースのセンサノード:Arduinoを使った温度センサの作製

2021年9月21日 By STEMSHIP

XBeeモジュールとBMP280センサを使用してデータ収集する

2021年5月31日 By STEMSHIP

XBeeモジュールでMicroPythonを使ってセンサを読み取る

2021年5月24日 By STEMSHIP

XBeeモジュールでセンサを読み取る:センサノードの設定と測定

2021年5月17日 By STEMSHIP

カテゴリー

  • Arduino (44)
    • Arduino初心者編 (15)
    • Arduino基礎編 (11)
    • Arduino実践編 (4)
    • Arduino応用編 (11)
    • Arduino番外編 (3)
  • MakeyMakey (1)
  • microbit (11)
  • Raspberry Pi (13)
  • Scratch (6)
  • STEM教育 (5)
  • XBee (15)
  • ものづくり教育 (2)
  • 子供の教育 (2)
  • 科学 (6)
  • 算数 (5)

Tags

BLE DCモータ EEPROM ELEGOO ESP32 ESP8266 IoT LCD LED makeymakey MQTT Node-RED scratch STEM教育 WiFi XBee アニメーション オンラインゲーム カメラ クローン ゲーム コスチュームの変更 サーボモータ ステッピングモータ ステートマシン スピーカ タイマー ピンポン ブロック定義 ペン ライントレース ラジコン リスト 分数 割り込み 実験 工作 幼児 当たり判定 温度センサ 無線通信 物理 角度制御 重力 音楽

Footer

最近の投稿

  • Arduinoベースのセンサノード:スケッチ(プログラム)の作製
  • Arduinoベースのセンサノード:XBeeデータ収集ノードの製作
  • Arduinoベースのセンサノード:Arduinoを使った温度センサの作製
  • XBeeモジュールとBMP280センサを使用してデータ収集する
  • XBeeモジュールでMicroPythonを使ってセンサを読み取る

タグ

BLE DCモータ EEPROM ELEGOO ESP32 ESP8266 IoT LCD LED makeymakey MQTT Node-RED scratch STEM教育 WiFi XBee アニメーション オンラインゲーム カメラ クローン ゲーム コスチュームの変更 サーボモータ ステッピングモータ ステートマシン スピーカ タイマー ピンポン ブロック定義 ペン ライントレース ラジコン リスト 分数 割り込み 実験 工作 幼児 当たり判定 温度センサ 無線通信 物理 角度制御 重力 音楽

Search

2023年3月
月 火 水 木 金 土 日
 12345
6789101112
13141516171819
20212223242526
2728293031  
« 10月    

Copyright © 2023 · STEMSHIP.COM