あっきぃ日誌

ラズピッピブログのようなオタクブログのようななにか

WaveShareの昔の白黒電子ペーパーをCircuitPythonで動かす & Inky pHATの4色版を買った & ほか

はてなが11億円を流出させた今日このごろ皆さまいかがお過ごしでしょうか。このブログもはてダから数えて22年はてなのお世話になっていますが、なんとか乗り切ってサービスが続くことをお祈りしています……マジで。万一を思ってブログはエクスポートしましたが。フォトライフは含まれていないから、これのダウンロードは大変そうだなと思っているところです。フォトライフのエクスポートもほしい。

Inky pHATの4色版を買った

PimoroniのInky pHATが4色電子ペーパーになって初期ロットが出た後、しばらく売り切れが続いていましたが、最近やっと再入荷したので、ポチりました。4色の内訳は白黒黄赤と、3色の頃に色がついていたやつがひとまとめになった感じです。これのおかげで、3色モデルはディスコンとなりました。モノクロは売り切れになってhopefully back soon!らしいですが、ディスコンのような気がしています。

Inky pHAT (ePaper/E Ink®/EPD)

届いたのがこちら。1つだけ買うのも送料がもったいないと思いつつ、買うものもそんなになく、PiBow Zero2Wをチョイス。

Zero2Wは年末に増やして、HyperPixel 2.1 Roundの検証に残していたのが無事解決*1して解放されたので、そのままケースに詰めて雑用化しました。こう言うシンプルに一個載せて動かすの、これぞラズピッピという感じで良いですね。こう言うのでいいんだよね、こう言うので。

4色なのに、4色使っとらんやん。

Inky pHATの到着を待っている間にWaveShareの昔の白黒電子ペーパーをCircuitPythonで動かしてみた

さて前置きが長くなりましたが、Inky pHATをポチって届くまでの間に、電子ペーパーモジュール登場初期の頃に買った、WaveShareの白黒電子ペーパーモジュールをCircuitPythonで動かしてみることにしました。買ったのは2017年の夏頃でしたか。9年くらいになるのか……。

akkiesoft.hatenablog.jp

前にも試していたのですが、どうもCircuitPythonのどのライブラリでも動作せず、断念していました。というわけで、数年ぶりにリベンジ。

似たような2.13インチ(250 x 122px)で白黒電子ペーパーを扱えるSD1675ライブラリをベースにしつつ、電子ペーパーの型番(HINK-E0213-G01)からドライバーICがIL3895であることを特定して、データシートを眺めて、SPI通信のパラメーターをちょこちょこいじったところ、動作に成功しました。ウオオ。

出来上がったコードは、SSD1675ライブラリからフォークの形でリポジトリを生やして置きました。WaveShareの白黒電子ペーパーモジュールはバージョンでパネルが異なるっぽいので、V1が対象です。フレキケーブルにHINK-E0213-G01があったら使えます。

github.com

exampleのコードはuHAT Porter Picoに搭載されている前提で記述してありますが、ピンの位置をうまくやればPicoに直接接続しても使えるはずです。当たり前ですが。

嬉しくなって、これ用にuHAT Porter Picoをあてがおうとしたら、無線付きのやつがいなかったので、ミク絵を差し替えたバージョンを作っちゃいました。

GPIOも気合い入れてカラーよ。


まとまらない

最近のラズピッピいじりの雑多なブログでした。Inky pHATの初期のリビジョン(Rev.2)もCircuitPythonで動かしたくて挑戦したものの、こちらはなんかうまくいかず断念しました。SSD1675Bらしいので、SSD1675のライブラリをベースにデータシートをみて色々やりましたが、無念。画面焼けしてるけど、今度どこかで放出しちゃおうかしらん。

さて、さらに雑多な話をすると、Aitendo物理店舗行き納めをした時に買ったTFT液晶と、流れで秋月も立ち寄って買ったカラー有機ELディスプレイをRPiに載せる板も作りました。いちいちブレッドボードに載せるのも面倒ですからね。珍しくユニバーサル基板にケーブルを這わせました。両方作ってから、TFTの方がバックライトピンが多い以外同じ配列ということに気づきました……。2つも作らなくてよかったんや。

ところで、東急の列車位置を表示するやつ、JSONがアクセスできなくなって、いよいよ終わったかと思っていたら、URLが変わっただけだったらしく、最近何気なしにググったら上位に公式アプリが使っているUIのURLが出てきて、robots.txt入れてないんか……と思いながらURLを書き換えたら普通に動いてしまいました。新しいURLではnginxからサーブされていて、まあログを取ってる(取れる)でしょうねという感じはするので、展示物として復活させる予定はなしです。

*1:カーネル6.18にしかマージされなかったので、次のRPi OS大型アプデまでお預けになりました

OSunC2026川越に行ってきた

4/4とすでにだいぶ前の話ですが、春恒例の飲んだくれOSC(?)ことOSunC2026川越に参加してきました。ちゃんとマイカメラを振り回してきたので、写真でレポートです。

今年のビールはCOEDO!地ビールはうれしいですね!

写真は残ってたけど味は覚えてない、2樽目。樽2本もあったっけ(酔っ払い!)

慣れた手つきでビールサーバーが構築される様子🤣

今年から給湯室でガスが使えるようになったらしく、湯煎やら酒粕焼きやらが発生していました。

はとちゃんによる開会のご挨拶

プラレール展示と、私もラズピッピを持参。

私の発表のネタはRTL8127の10GbEネタでした。ブログで書いたネタをスライドにしただけなので、ブログで見た人は特に新鮮味はないと思います。

speakerdeck.com

時間が余ったら1GB RAMの話もしようかと思っていましたが、枠が余ることはなく、無事に閉会となりました。私は翌日から帰省だったので2次回はパスして帰宅しました。

Pimoroni HyperPixel 2.1 Roundの(自分が作った)ドライバーのバグを修正する

年末のこれの続き。

akkiesoft.hatenablog.jp

Pimoroni HyperPixel 2.1 Roundのドライバーを年末に直してみたら、コードがほぼそのままRaspberry Pi OSのドライバーとして採用されたわけですが、マージ後にリリースされたバージョンでディスプレイを動かしてみると、Pi 5では見なかったノイズが、PiZero 2WとかPi 3以前では発生していることに気が付きました(のちに、Pi 5でも若干ノイズがあることがわかりました)。

というわけで、「多分わたしがなんか見落としたんだと思うけど、ノイズっぽいのが出ちゃいまして……」というIssueを新規に立てて、放置していました。

github.com

PimoroniのPhilも「なんか見たことあるかも」とはコメントしてくれていたものの、Issueは放置が続いていました。が、最近になって、I have same issueな人が現れて、メンテナ氏も反応し始めたので、私も切り分けに乗っかっていくことにしました。しきりに「カーネル6.6では動いてたけど6.12では壊れてて!」ってコメントしてたんだけど、それね、5月にBookwormがカーネル6.12に移行してから、年末にわたしが直すまで、半年くらい「全く動かなかった」んだよね。でもなんかバグっててごめんね……。

さて、ノイズというのはこんなかんじのやつ。縦に線が入ったり、下のグラデーションにも波線があるようなやつです。これだったらまだ可愛いですが、この線が入っている箇所の本来の色が大量に使われる映像では、ものすごいノイズのある画面になって、使い物になりませんでした。

上はZero2Wですが、3A+だとさらにくっきりでした。

先述の通り、切り分けているうちに、Pi 5でもピンク色の部分でかすかにノイズがあることがわかりました。モデルによってバグってる色が違うのはダルい。

で、色々と原因の予想はしてもらっていたものの、改めて自分でも6.6系のコードと現在のコードを見比べてみた結果、普通に1つ移植漏れがあり、適用したらノイズが消え去りました。くっそ恥ずかしいね。

具体的には、DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGEのbus_flagsを渡すコードの追加が一式漏れていました。Google検索で勝手に出てくるGemini曰く以下のとおり。たしかに、これがあれば特定の色だけなんか変(多分ピクセルシフト)がなくせそうです。

DRM_BUS_FLAG_PIXDATA_DRIVE_NEGEDGEは、LinuxのDRM(Direct Rendering Manager)サブシステムにおいて、ディスプレイパネルやブリッジへのピクセルデータ(RGBデータ)の駆動タイミングを定義するフラグです。
(中略)
このフラグは、グラフィックコントローラ(CRTC)と表示パネル間のタイミング合わせが正しく行われるようにし、画面のチラつきやデータ破損(ピクセルシフト)を防ぐ役割を果たします。

移植漏れ修正後のPiZero2Wのテスト画面がこちら。きれいに映るようになりました。

現在はコードのプルリクを送って、レビュー中です。そっちがええならもうええで!ってところまでは来たので、マージ待ちです。

github.com

最初に6.6の書き方を何も考えずにそのまま持って行ったら、何だここの(効率の悪い)コードは?って突っ込まれて、そう言われましても……?と思いながらAIに聞いたら、確かに意味のない0代入とかif文が合ったので、そこをなくしてスッキリさせられました。なるほどなあ。でもじゃあ6.6のコードは何だったんだよというモヤりはあります。

HyperPixel 2.1 Roundは、OSCの展示ブースで定番のデモになっている、円形ディスプレイデジカメに使用しているわけですが、こちらは現在はカーネル6.6系に戻して運用中です。今回分の修正がマージされてリリースされれば、やっと最新カーネルで運用できるようになりそうです。やっとだぜ……というか、結局全部自分が実装することになろうとは思わなんでしたよ。

I have same issueニキ駆動のおかげで見直せたので、ニキに感謝。そして、機械翻訳+アルファの拙い英語に付き合ってくれたメンテナ氏にも感謝です。

Realtek RTL8127 NICのSFP+版も買ってみた

ややこれのつづき

akkiesoft.hatenablog.jp

RTL8127のPCIe3.0有効化ができなかったので、同チップだけど違う設計のNICならいけるのかなあなどと思いながら、ヤフオクあたりを雑に見ていたら、RTL8127にSFP+版があることに気が付きました。しかも1000円クーポンが使えたので思わず購入。4,700円でした。

たしかに、先駆者ののらねこさんがもうまとめていました。

note.com

そしてブツ。

違う設計というのはメーカー違いを想定していて、同じメーカーのコネクター形状のことではなかったんですが、SFP+があるならそっちのほうが良いですもんね。というわけで見た目とかはほぼ一緒です。ただ、SFP+のコネクターが大きいので、その分PCBも大きくなっていました。それでもどっちも小さいんですけどね。

Pi 5で動かした結果、RJ-45と同じくPCIe2.0の状態でiperf3をうごかして3.6Gbpsが出せました。そしてPCIe3.0は起動せずというのも変わらず。

あと、Windowsでもiperf3を動かして9.4Gbps出せることを確認しました。が、こいつ、電源を切ったPCのPCIeスロットに差し込んだ瞬間から緑のLEDが点灯だして、常用するには鬱陶しいですね。ケーブルつなぐ前なのに光ってるの、なんでなん。

発熱の方は、RJ-45よりもすこしぬるいかも?という印象です。指で触った体感だけで、ちゃんと測ってはいないですが。

ケーブルの方は、SFP+のRJ-45変換と、普通のDACが使えるところまで確認できました。コレだけ動くなら、たぶん光モジュールも行けるでしょう。

しかし、こんなに10GbEのNICを増やしてどうすんだ。スイッチのポートは足らないのに🤣