Raspberry Pi Pico W で e-paper に日本語を表示する #micropython - Qiita にて日本語を表示しましたが 8x8 と少々文字が小さめ。
実際に使うにはもうちょと大きなフォントが欲しいので 16x16 くらいで表示できる方法を調べて見ました。
最終のアウトプットがこれ。
前提
必要なもの。
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 をアップロードした。
コード
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
を変更すれば別のフォントサイズが使えるようになっている。
コードの実行結果。
これくらいのサイズであれば視認性も高め。いろんな事に使えそうです