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

[Raspberry Pi Pico W で e-paper に日本語を表示する #micropython - Qiita](https://qiita.com/kenji0302/items/acc6145236599639fe95) にて日本語を表示しましたが 8x8 と少々文字が小さめ。

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

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8961/88ab8c99-7b6b-544b-0770-2474ac148a73.png)


## 前提

必要なもの。

Raspberry Pi Pico W : [Raspberry Pi Pico WH — スイッチサイエンス](https://www.switch-science.com/products/8172?_pos=1&_sid=5aa1a1afe&_ss=r)

e-paper : [Raspberry Pi Pico用 2.13インチ e-Paper ディスプレイ（白黒赤）212×104 — スイッチサイエンス](https://www.switch-science.com/products/7322)

詳細は前記事参照。
[Raspberry Pi Pico W で e-paper に日本語を表示する #micropython - Qiita](https://qiita.com/kenji0302/items/acc6145236599639fe95) 

## 実装

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

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

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

![CleanShot 2024-05-17 at 14.35.00@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8961/15002e7d-a477-f975-70dd-55006a74dac6.png)

### コード

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

```python

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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8961/88ab8c99-7b6b-544b-0770-2474ac148a73.png)

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