🔖
ラズパイPicoで書き込める電子ペーパー用の画像を生成する
Switch ScienceさんのSSX製品2.13インチ e-Paper ディスプレイモジュール用の画像をPythonで生成する1例を紹介します。個人的にはe-inkというものがどういうものか分かっておらず、本当に電源無しで表示を維持できるのか確認したかったので、この製品で試してみることにしました。
画像生成以外の部分の手順についてはSWITCHSCIENCE MAGAZINE!の『aspberry Pi Picoと電子ペーパーの使い方』に従えばOKです。1つ悩んだところは、電子ペーパーとアダプタ基板との結合部分がしっかりと固定するまで挿せなかったことです。そこまで力を入れなくても挿し込めるくらいで動作には問題無いようでした(逆に強く差し込むと壊れるパターンかなと勝手に思っています)。
画像のコードは次のような感じです。例によって、Zennのメディアキットからダウンロードしたロゴ画像とzxingライブラリを使用しています。zxingライブラリのビルド方法については、次の記事を参考にして下さい。
import cv2
import numpy as np
import zxing
from PIL import Image
size = (212, 104)
qrSize = (50, 50)
bg = Image.new('RGBA', size, (255, 255, 255, 255))
logo = Image.open('./zenn-logo/logo.png')
logoSize = (size[0], round(logo.size[1] * (size[0] / logo.size[0])))
logo = np.array(logo)
logo = cv2.resize(logo, logoSize, interpolation = cv2.INTER_AREA)
logo = cv2.cvtColor(logo, cv2.COLOR_RGBA2BGRA)
logo[:, :, [1, 2]] = 0
logo = Image.fromarray(logo)
bg.paste(logo, (0, 0), logo)
qrCode = zxing.write_barcode(zxing.BarcodeFormat.QR_CODE, "https://zenn.dev/")
shape = qrCode.shape
qrCode = qrCode[3:shape[0]-3, 3: shape[1]-3]
qrCode = cv2.resize(qrCode, qrSize, interpolation = cv2.INTER_AREA)
qrCode = Image.fromarray(qrCode)
bg.paste(qrCode, (size[0] - qrSize[0], size[1] - qrSize[1]))
bg = bg.convert('RGB')
bg.save('./zenn-logo.bmp')
実行すると、次のような画像ができます。
電子ペーパーが赤、白、黒しか表示出来ないので怒られるかもしれませんがロゴマークを赤に色替えしています。ラズパイPicoで書き込むと電子ペーパーの表示は次のように切り替わります。
次の動画で確認出来るように、QRコードの読み取りも出来ました。
これくらいの用途なら紙の方が断然優れているのに、e-inkには『なんか役立つもの作れそう!』と感じさせてくれる不思議な力がありますね。
Discussion