LoginSignup
2
1

Raspberry Pi Pico W で e-paper に日本語を表示する その2(大きめのフォント表示)

Last updated at Posted at 2024-05-18

Raspberry Pi Pico W で e-paper に日本語を表示する #micropython - Qiita にて日本語を表示しましたが 8x8 と少々文字が小さめ。

実際に使うにはもうちょと大きなフォントが欲しいので 16x16 くらいで表示できる方法を調べて見ました。

最終のアウトプットがこれ。

image.png

前提

必要なもの。

Raspberry Pi Pico W : Raspberry Pi Pico WH — スイッチサイエンス

e-paper : Raspberry Pi Pico用 2.13インチ e-Paper ディスプレイ(白黒赤)212×104 — スイッチサイエンス

詳細は前記事参照。
Raspberry Pi Pico W で e-paper に日本語を表示する #micropython - Qiita

実装

利用ライブラリ・フォント

https://github.com/Tamakichi/pico_MicroPython_Multifont をダウンロード、mfont/ を RaspberryPI Pico W にアップロード。ただし、全てのフォントをアップロードするとストレージに入りきらないので使うもののみにする。

今回は 16x16 と 20x20 をアップロードした。

CleanShot 2024-05-17 at 14.35.00@2x.png

コード

https://github.com/waveshareteam/Pico_ePaper_Code/blob/main/python/Pico_ePaper-2.13-B_V4.py をダウンロード。 if __name__=='__main__': より下を以下のコードに書き換え。


MY_FONT_SIZE = 16  # 使用するフォントサイズ

def jpredchar(fd, epd, x, y, width, height):
    bn = (width+7)>>3
    py = y
    for i in range(0, len(fd), bn):
        px = x
        for j in range(bn):
            for k in range(8 if (j+1)*8 <=width else width % 8):
                if fd[i+j] & 0x80>>k:
                    epd.imagered.pixel(px + k, py, 0x00)
            px+=8
        py+=1

def jpblackchar(fd, epd, x, y, width, height): 
    bn = (width+7)>>3
    py = y
    for i in range(0, len(fd), bn):
        px = x
        for j in range(bn):
            for k in range(8 if (j+1)*8 <=width else width % 8):
                if fd[i+j] & 0x80>>k:
                    epd.imageblack.pixel(px + k, py, 0x00)
            px+=8
        py+=1


def jpredtext(str, x, y, mf, epd):
    mf.begin()
    for c in str:
        d = mf.getFont(ord(c))
        jpredchar(d, epd, x, y, mf.getWidth(), mf.getHeight())
        x = x + mf.getWidth()
    mf.end()

def jpblacktext(str, x, y, mf, epd):
    mf.begin()
    for c in str:
        d = mf.getFont(ord(c))
        jpblackchar(d, epd, x, y, mf.getWidth(), mf.getHeight())
        x = x + mf.getWidth() 
    mf.end()


if __name__=='__main__':
    # epd = EPD_2in13_B_V4_Portrait()
    epd = EPD_2in13_B_V4_Landscape()
    epd.Clear(0xff, 0xff)
    epd.imageblack.fill(0xff)
    epd.imagered.fill(0xff)


    mf = mfont()
    mf.setFontSize(MY_FONT_SIZE)    

    str="● はろーわーるど"
    jpredtext(str, 5, 10, mf, epd)

    str="○ 日本語の表示テスト"
    jpblacktext(str, 5, 35, mf, epd)

    str="○ 日本語の表示テスト"
    jpblacktext(str, 5, 60, mf, epd)

    str="○ 日本語の表示テスト"
    jpblacktext(str, 5, 85, mf, epd)

    str="○ 日本語の表示テスト"
    jpblacktext(str, 5, 110, mf, epd)

    epd.display()

16x16で表示してみる。MY_FONT_SIZE を変更すれば別のフォントサイズが使えるようになっている。

コードの実行結果。

image.png

これくらいのサイズであれば視認性も高め。いろんな事に使えそうです

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1