Raspberry Pi Pico W で e-paper に日本語を表示する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8961/0a0382f6-8e01-b9ad-c507-ddaefdc27b45.png)

Raspberry Pi Pico W と e-paper で表示制御できると、ネットワーク越しに情報取得していろいろ表示することが出来そう。まずは日本語表示するところまでやってみることにした。


## 購入

スイッチサイエンスで以下を購入。ピンヘッダを自分で半田付けするのは大変なのでピンヘッダつきのものを購入。
[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は Micro USB-Bポート。最近はType-Cのポートのみの端末が多いので、C-microBのケーブルを購入。Amaoznとかだと¥1,000前後するので一緒に買うのがお薦め。
[USBケーブル（C-microBタイプ）50cm — スイッチサイエンス](https://www.switch-science.com/products/7965?variant=42382193950918)


## セットアップ
[MicroPython - Raspberry Pi Documentation](https://www.raspberrypi.com/documentation/microcontrollers/micropython.html) を参考に MicroPythonをセットアップする。

文面を読まなくても **Drag-and-Drop MicroPython** のアニメーションを見ればだいたいわかるはず。

[Thonny, Python IDE for beginners](https://thonny.org/) をインストールして起動する。

Raspberry Pi Pico W を接続する。

## コードを書く

### ボード上のLチカを試す

Thonny で以下のコードを実行。シェルにLEDの状況が表示され、ボード上のLEDが点滅する。

Raspberry Pi Pico のサンプルコードだと `machine.Pin(25, Pin.OUT)` となっているが Pico W は `machine.Pin('LED', Pin.OUT)` としないと動かないので注意

```python
from machine import Pin
import utime
led = machine.Pin('LED', Pin.OUT)
while True:
    led.value(1)
    print(led.value())
    utime.sleep(1)
    led.value(0)
    print(led.value())
    utime.sleep(1)
```

### e-paperの描画

サンプルコードがあるので購入した型番に合わせたコードを取得。

スイッチサイエンスの商品ページからリンクのあるメーカーページ
[2.13inch e-Paper E-Ink Display Module (B) for Raspberry Pi Pico, 250x122 pixels, Red / Black / White, SPI Interface | Pico-ePaper-2.13-B](https://www.waveshare.com/pico-epaper-2.13-b.htm)
これを見ると `Pico-ePaper-2.13-B` という型番のようだ。

[Pico_ePaper_Code/python at main · waveshareteam/Pico_ePaper_Code](https://github.com/waveshareteam/Pico_ePaper_Code/tree/main/python)
レポジトリ内の `Pico_ePaper-2.13-B_V4.py` を Thonny に貼り付け実行。e-paperに描画出来ることを確認する。

ちなみに `Pico_ePaper-2.13-B.py` は動作しなかった。

### 日本語の表示

このレポジトリをダウンロード。
https://github.com/Tamakichi/pico_MicroPython_misakifont

Thonny の 表示→ファイル で Raspberry Pi Pico W のファイルを閲覧、操作できるようになるので、misakifont/ を Raspberry Pi Pico Wに転送。

![CleanShot 2024-05-11 at 11.13.21@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8961/35f8208b-c342-0e79-bca4-9788fe015b50.png)

先ほどダウンロードした Pico_ePaper-2.13-B_V4.py の `if __name__=='__main__': ` から下の部分を以下のコードと差し替え。

```python
def jpredchar(fd, epd, x, y):
    for row in range(0,7):
        for col in range(0,7):
            if (0x80>>col) & fd[row]:
                epd.imagered.pixel(col + x, row + y, 0x00)

def jpblackchar(fd, epd, x, y):
    for row in range(0,7):
        for col in range(0,7):
            if (0x80>>col) & fd[row]:
                epd.imageblack.pixel(col + x, row + y, 0x00)

def jpredtext(str, x, y, mf, epd):
    for c in str:
        d = mf.font(ord(c))
        jpredchar(d, epd, x, y)
        x = x + 9

def jpblacktext(str, x, y, mf, epd):
    for c in str:
        d = mf.font(ord(c))
        jpblackchar(d, epd, x, y)
        x = x + 9



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 = MisakiFont()
    str="はろーわーるど"
    jpredtext(str, 50, 50, mf, epd)

    str="日本語の表示テスト"
    jpblacktext(str, 50, 65, mf, epd)

    epd.display()
    
```

実行すると日本語表示が出来ました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8961/0a0382f6-8e01-b9ad-c507-ddaefdc27b45.png)


差し替え済みのコードは以下に置いてあります。

<https://gist.github.com/kenji0302/5562cb757d5ae34b102ea1da1819fc47>

## 次は

画像表示とか~~フォントサイズの拡大~~、ネットワーク越しに取得したデータの表示などをやりたい。

もっと大きいフォントサイズでの表示はこちらに記事を作成。
[Raspberry Pi Pico W で e-paper に日本語を表示する その2 #micropython - Qiita](https://qiita.com/kenji0302/items/8da4c075dff974d1dc6f)


## 参考文献

- [初めの一歩！ラズパイPicoマイコン×PythonでLチカ入門 | マルツオンライン](https://www.marutsu.co.jp/pc/static/large_order/zep/m-z-picoled-da1)
- [Pi Pico （W）で有機ELディスプレイに日本語表示（メモ） – FRONT](https://wisteriahill.sakura.ne.jp/CMS/WordPress/2023/04/30/pi-pico-setup-micropython-memo-2/)