Raspberry Pi Picoで日本語表示|SSD1306とMisakiFontの使い方ガイド

目次

はじめに

ディスプレイに日本語を表示する方法を紹介します。ディスプレイに関する過去の記事は以下を参照ください

なぜ日本語がそのまま表示できないのか?

SSD1306などの単色OLEDやST7789などのディスプレイをMicroPythonから扱う際、デフォルトで用意されているのは英数字だけの単純なビットマップフォントです。そのため、次の問題が発生します。

項目説明
デフォルトのフォントASCIIコード(A〜Z、0〜9、記号)だけ対応
日本語の扱い標準で含まれていない(コードポイントがない)
日本語の表示ビットマップデータがないため、単なる空白となる

日本語がそのまま出せない理由は、デフォルトのライブラリが日本語のビットマップデータを持っていないからなのです。別途紹介しますが、e-paper用のライブラリは日本語対応になっている場合が多い為、シンプルに日本語が表示できます。

ビットマップデータとは?

ディスプレイは単なる「点」の集まり

SSD1306などの小型ディスプレイ(128×64ピクセルなど)は、白/黒の点(ピクセル)だけでできています。
日本語も、次のような単なる点の並びです。
例えば、7×7ピクセルで表現した「日」という文字を例示します。1は黒、0は白を表します

ピクセル表示
行01111111
行1100001
行21111111
行3100001
行4100001
行51111111
行60000000

遠くから見ると、「日」という字に見えませんか??

MisakiFontとは

MisakiFont は、日本語のドット単位のビットマップデータをまとめたライブラリです。

項目説明
MisakiFont日本語のそれぞれの文字コード(例えば「日」「本」「語」)を、7×7ピクセルなどの小さなビットマップデータに変換
表示側(SSD1306など)MisakiFontから取得したビットマップデータを、単純な処理で表示できる

つまり、MisakiFontを使うと日本語が読めるデータになり、SSD1306などのディスプレイで日本語が表示できるというわけです。

配線

以前の記事を参照ください

OLEDディスプレイに日本語を表示する

Misakifontを入手する

以下から入手できます。作成してくださった方に感謝です。
https://github.com/Tamakichi/pico_MicroPython_misakifont
「misakifont」のフォルダを丸ごとRaspberryPi Picoにアップロードください

日本語を表示する

from machine import Pin, I2C
import ssd1306
from misakifont import MisakiFont
import time

fcolor = 1
fsize = 1
WIDTH = 128
HEIGHT = 64

def show_string(oled, mf, text, x, y, color=fcolor, size=fsize):
    """単純にテキストを指定位置から描画"""
    for c in text:
        fd = mf.font(ord(c))
        for row in range(7):
            for col in range(7):
                if (0x80 >> col) & fd[row]:
                    oled.fill_rect(x + col * size, y + row * size, size, size, color)
        x += 8 * size

# I2CおよびOLEDの初期化
i2c = I2C(0, scl=Pin(17), sda=Pin(16), freq=400000)
oled = ssd1306.SSD1306_I2C(WIDTH, HEIGHT, i2c)
mf = MisakiFont()

# 画面初期化
oled.fill(0)

# 表示
show_string(oled, mf, "日本語つかえるよ", 0, 0)       # 1行目
show_string(oled, mf, "Aa1あ火", 0, 16)           # 2行目
oled.show()

# 5秒後、画面消去
time.sleep(10)
oled.fill(0)
oled.show()

まとめ

ディスプレイに日本語を出したくなることはきっとあると思います。ただ、実際にやってみればわかりますが、表示できない日本語もあります。それも踏まえて活用できるとより楽しめると思います。是非チャレンジください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次