Raspberry PiでOLEDに文字表示

Raspberry PiでOLEDに文字表示

この記事では、Raspberry Piと0.91インチのOLEDディスプレイを使って、文字を表示するまでのやり方を説明します。

具体的にはAdafruit CircuitのPythonドライバーを使って、I2C通信でOLEDに文字を表示します。

ArduinoでOLEDを使いたい場合は、【Arduino】OLEDに文字表示【Seeeduino】をご覧ください。

つかうもの

はじめに、この記事でつかうものをご紹介します。

ラズパイ

本記事ではRaspberry Pi zero WHを使用しましたが、みなさんはお好きなRaspberry Piをお使いください。

OLEDモジュール

OLEDモジュールは、こちらの「DSD TECH/OLED 0.91インチディスプレイ」を使いました。

解像度は128x32で、ドライバICにはSSD1306が使われてます。電源は3.3V〜5Vの範囲で使用できます。

Raspberry PiとOLEDとの通信はI2Cになるので、【Raspberry Pi】はじめてのI2C設定を参考にI2Cの初期設定を済ましてください。

ちなみに、OLEDとは「Organic Light Emitting Diode」の略です。LEDの発光素材にオーガニック(有機物質)を使ったものでして、「有機エレクトロルミネッセンス」や「有機EL」と呼ばれたりします。

▼ 他にもいろいろなサイズがありますのでご参考に。

Raspberry PiとOLEDモジュールの配線

Raspberry PiとOLEDモジュールの配線を次の通り行ってください。

OLEDモジュール Raspberry Pi
GND GND
VCC 3.3V
SCL SCL(GPIO3)
SDA SDA(GPIO2)

アドレスの確認

Raspberry PiとOLEDディスプレイの配線ができたら、次のコマンドをRaspberry Piで実行してI2Cデバイスのアドレスを確認しましょう。ここでは、3cがOLEDモジュールのアドレスになりました。

$ sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- 3c -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- -- 

ライブラリのインストール

OLEDモジュールをRaspberry Piで簡単に扱えるように、ライブラリのインストールを行います。

Adafruit CircuitPython SSD1306のインストール

今回使う「DSP TECH 0.91インチディスプレイ」には、メインチップにSSD1306が使われてます。

「Adafruit Python SSD1306」ライブラリが公開されいてますが、こちらはdeprecatedとなっており、現在開発が止まっているようです。今後は、CircuitPythonのライブラリ推奨とのことで、そちらを使用します。

次のコマンドを実行し、「Adafruit CircuitPython SSD1306」をインストールします。

$ sudo pip3 install adafruit-circuitpython-ssd1306

▼ Adafruit CircuitPython SSD1306

▼ DSD TECH/OLEDディスプレイの仕様

必要なライブラリのインストール

ほかにもいくつか必要なライブラリがありますので、次の通りインストールしておきましょう。

$ sudo pip3 install adafruit-blinka
$ sudo pip3 install pillow

pillow関係のエラーが出てしまったので、次のモジュールもインストールしました。

$ sudo apt-get update
$ sudo apt-get install libopenjp2-7
$ sudo apt install libtiff5

フォントのインストール

さいごに、OLEDに文字を表示させるには、Raspberry Piにフォントをインストールする必要があります。

今回は定評のある「Noto Fonts」の日本語版をインストールしました。ちなみに「Noto Fonts」とは、GoogleがAdobeと協力して作成したフォントファミリーです。

$ sudo apt-get install fonts-noto-cjk

インストールしたフォントは、/usr/share/fonts/ディレクトリ下に置かれました。

 $ ls /usr/share/fonts/opentype/noto/
NotoSansCJK-Black.ttc      NotoSansCJK-Light.ttc    NotoSansCJK-Thin.ttc    NotoSerifCJK-ExtraLight.ttc  NotoSerifCJK-Regular.ttc
NotoSansCJK-Bold.ttc       NotoSansCJK-Medium.ttc   NotoSerifCJK-Black.ttc  NotoSerifCJK-Light.ttc       NotoSerifCJK-SemiBold.ttc
NotoSansCJK-DemiLight.ttc  NotoSansCJK-Regular.ttc  NotoSerifCJK-Bold.ttc   NotoSerifCJK-Medium.ttc

▼ Noto Fonts

OLEDディスプレイに文字表示

それではさっそく、OLEDに文字を表示させてみましょう。

Adafruitのサンプルプログラムを参考に、プログラミングしてみました。OLEDの解像度は128x32ですので、他のサイズのOLEDの場合は宣言部分を書き換えるようにしてください。

import board
from PIL import Image, ImageDraw, ImageFont
import adafruit_ssd1306


i2c = board.I2C()
oled = adafruit_ssd1306.SSD1306_I2C(128, 32, i2c, addr=0x3c)

# Clear display.
oled.fill(0)
oled.show()

# Create blank image for drawing.
image = Image.new("1", (oled.width, oled.height))
draw = ImageDraw.Draw(image)


font = ImageFont.truetype("/usr/share/fonts/opentype/noto/NotoSansCJK-DemiLight.ttc", 13)
font2 = ImageFont.truetype("/usr/share/fonts/opentype/noto/NotoSansCJK-DemiLight.ttc", 10)

# Draw the text
draw.text((0, 0), "こんにちは、世界!", font=font, fill=255)
draw.text((0, 17), "This is OLED test.", font=font2, fill=255)

# Display image
oled.image(image)
oled.show()

実行するとこんな感じで文字を表示することができました。

OLEDにHello world!を表示できた
OLEDにHello world!を表示できた

他にもOLEDにいろいろな文字を表示するサンプルプログラムがあります。

▼ Adafruit CircuitPython SSD1306サンプルプログラム

▶︎ 類似した記事を探す #ディスプレイ
 

この記事が参考になりましたら
シェアをよろしくお願いします!

人気のArduino互換機
Arduinoで人気の周辺パーツ
あると便利な道具
Arduinoのオススメ参考書

▼ Arduino初心者向きの内容です。ほかのArduino書籍と比べて図や説明がとてもていねいで読みやすいです。Arduinoで一通りのセンサーが扱えるようになります。

▼ 外国人が書いた本を翻訳したものです。この手の書籍は、目からうろこな発見をすることが多いです。

▼ Arduinoの入門書を既に読んでいる方で、次のステップを目指したい人向きの本です。C言語のプログラミングの内容が中心です。ESP32だけでなく、ふつうのArduinoにも役立つ内容でした。

関連記事