I2C制御の有機ELディスプレイモジュール(制御IC SSD1306)文字表示プログラム例
有機ELディスプレイ(OLED)を用いたI2C制御の128×64ドット白色グラフィックディスプレイモジュール。モジュールで使われている制御チップはSSD1306(SOLOMON SYSTECH)で多くのライブラリが入手できる。このモジュールを使ったテキスト表示プログラムを紹介する。
●使用したハードウェア
制御チップはSSD1306(SOLOMON SYSTECH)を使った、I2C制御128×64ドット白色有機ELディスプレイモジュール。Amazonや秋月電子通商で1個\550程度で入手できる。
■主な仕様
・電源電圧:3.3~5V
・制御方式:I2C(IIC)
・制御IC:SSD1306
・解像度:128×64
・表示色:白
・アドレス:0x3C(既定)または0x3D(抵抗の付け替えによる切り替え)
●テキスト表示プログラム例
<使用したモジュール>
次のadafruitのMonochrome OLED Python Usageを参考にした。
https://learn.adafruit.com/monochrome-oled-breakouts/python-usage-2
モジュールのインストールは
sudo pip install adafruit-circuitpython-ssd1306
<プログラム例>
・OLED-SSD1306ディスプレイ表示モジュール(oledSSD1306.py)
import board from PIL import Image, ImageDraw, ImageFont import adafruit_ssd1306 as ADF # sudo pip install adafruit-circuitpython-ssd1306 # Monochrome OLED Python Usage # https://learn.adafruit.com/monochrome-oled-breakouts/python-usage-2 # SSD1306 I2Cアドレス, サイズ OLED_ADDR = 0x3C # OLEDのI2Cアドレス OLED_WIDTH = 128 # OLEDの幅(Pixels) OLED_HEIGHT = 64 # OLEDの幅(Pixels) class OLED: def __init__(self): i2c = board.I2C() self.oled = ADF.SSD1306_I2C(OLED_WIDTH, OLED_HEIGHT, i2c, addr=OLED_ADDR) self.linePix = [0, 16, 32, 48] # 4行表示のPixel位置 def cleanDisp(self): # ディスプレイ全消去 self.oled.fill(0) self.oled.show() def dispText(self, lineStr): # lineStr = [1行目文字列, 2行目文字列, 3行目文字列, 4行目文字列] image = Image.new("1", (self.oled.width, self.oled.height)) # "1" = 1-bit pixels, black and white, stored with one pixel per byte draw = ImageDraw.Draw(image) # フォントは大小2種類を用意 fontL = ImageFont.truetype("/usr/share/fonts/truetype/fonts-japanese-gothic.ttf", 16) fontS = ImageFont.truetype("/usr/share/fonts/truetype/fonts-japanese-gothic.ttf", 14) for i in range(len(lineStr)): draw.text((0, self.linePix[i]), lineStr[i], font=fontL, fill=255) # draw.text((x, y), 表示文字列, フォント, 表示色) self.oled.image(image) self.oled.show() if __name__ == "__main__": import datetime oled = OLED() for i in range(100): lineStr = ["OLED TEST"] dt = datetime.datetime.now() lineStr.append(dt.strftime('%Y年%m月%d日')) lineStr.append(dt.strftime(' %H:%M:%S')) lineStr.append(str(dt.microsecond)) oled.dispText(lineStr) oled.clearDisp()
●プログラム実行結果
サンプルプログラムは、日時を読み取って4行を表示する事例。日時を読み取り表示する1サイクルの時間は0.116secだった。(Raspberry Pi4を使用)