今更なんですが、Raspberry Pi PicoでDVI出力をしてみました。あと、Pico2でもCircuitPythonのPRがMergedになったので、ナイトリー版でも触りました。
購入したのはスイッチサイエンスさんのやつ。アリエクとかでも転がってますが、Pico2を買ったときに合わせ買いしました。
Raspberry Pi Pico用DVIアダプタ基板 — スイッチサイエンス
スイッチサイエンスさんのボードも、オープンハードのPico-DVI-Sockがベースになっていて、ピン割り当ては互換です。
あそぶ
例によってCircuitPythonで触ったのですが、CircuitPythonはPicoDVIというのが用意されているので、初期化とフレームバッファの用意ができれば、あとはdisplayioで遊べるといった感じです。
たとえば、これはなんか雑にビットマップを出すやつ。もともとST7789向けに会たものですが、ST7789の部分をすげ替えるだけで動きます。べんりだね。
import board # display from displayio import release_displays, Group, OnDiskBitmap, TileGrid import picodvi import framebufferio release_displays() # Display setup fb = picodvi.Framebuffer( width=320, height=240, color_depth=8, clk_dp=board.GP14, clk_dn=board.GP15, red_dp=board.GP12, red_dn=board.GP13, green_dp=board.GP18, green_dn=board.GP19, blue_dp=board.GP16, blue_dn=board.GP17) display = framebufferio.FramebufferDisplay(fb) # splash splash = Group() display.root_group = splash bitmap = OnDiskBitmap("/test.bmp") tile_grid = TileGrid(bitmap, pixel_shader=bitmap.pixel_shader) splash.append(tile_grid) while True: pass
こんな感じで表示できました。実は、これを表示できるまでに、ピンソケットを逆向きにつけてしまい、ハンダをやり直したらそれでも表示できず、パターンを破壊したかとドキドキしたりしたのですが、単にCircuitPython9.2.0のAlphaでPicoDVIが壊れているだけでした。焦った。
しかしこう、ディスプレイを設定したらdisplayio以降は同じで良いとすると、前に作ったアレとかアレもDVIで出せるよなと気付き、いつもの田園都市線の在線アプリをやろうとしたのですが、残念ながらPicoではメモリ不足で動きませんでした。きびしい。
Pico2ならいける
Picoで試した時点では、Pico2のPicoDVIは未実装の状態だったのですが、昨日見たらちょうどマージされていました。
マージ後のバイナリはまだリリースされていないので、Absolute NewestでS3に飛んで、PR9617とつくuf2ファイルをダウンロードします。9.2.0 Alpha 2352以降のリリースがでているようなら、それでいいです。
Pico2に環境を用意して、コードを書き換えて実行したら……きたーっ!
きたーっ!のはいいんだけど、終電後だからもう電車こねーじゃんというわけで翌朝再度実行。よかった、ちゃんと動いてた。
しれっとWIZnetのEthernetHATを使用していますが、例によってGPIOポートが重複したので、HATである意味を破壊して、違うところにつなぎ替えています。ピン番号かぶりは難しいわね。
Pico的には320x240のdepth16で出力していますが、どの画面でも代替出せるので、普段使っている32インチ4Kモニターにも出せるし、ベッドのところで死蔵してる前使ってた27インチモニターにも出せます。
なにが良いって、Picoなのでどんな大画面に出そうが0.6Wとか言う低消費電力で動く(カリカリに節電チューニングしたZeroWより低い)し、起動は一瞬なので、表示内容によってはSBCで無駄にリッチなサイネージを作るより、Picoで良い可能性すらでてきますよね。
HSTX
Pico2ではHSTX(High-Speed Serial Transmit)ポートというものが追加されているそうで、出力特化の用途に使うと早くて良いそうです。
そのポートがまさに今回のDVI用ボードで使われていたGP12〜GP19の8個で、絶対これDVI拡張で使われることを意識して配置しただろって感じがしました。CircuitPythonのPico2向けPicoDVIでもこのHSTXで転送されているみたいです。画面書き換えのベンチマークとかでもできればよいのでしょうが、わたしにはわからんのでそのあたりは割愛します。
シメ
DVI出力が思ったより楽しくて、さすがにちょっとテンションが上りました。