PCの画面をESP32搭載の小型液晶ディスプレイにWi-Fi経由でストリーミングするシステムを、Maker「tuckerPi」氏が製作しGitHubで公開した。変更があったピクセルだけを送信するフレームディフィング(差分検出)により、135×240ピクセルの小さな画面でも5〜60fpsの表示を実現する。
使用するハードウェアは、AliExpressなどで入手できるTENSTAR製「T-Display ESP32-D0WD」。ST7789ドライバーを搭載した1.14インチ液晶(135×240ピクセル)とESP32がセットになった開発ボードで、Wi-FiとBluetoothに対応する。電源は3.7VのLiPoバッテリーを使用でき、ボードには充電回路が内蔵されている。
システムはPC側で動作するPython製の送信プログラムと、ESP32側で動作するArduino製の受信プログラムで構成される。送信側はOpenCVとmssライブラリでスクリーンキャプチャーを取得し、受信側はTFT_eSPIライブラリで液晶を制御する。
帯域を節約するため、送信側では前フレームとの差分を検出し、変更があったピクセルだけを送信する。さらにランレングス符号化(同じ色が連続するピクセルをまとめて圧縮する方式)を併用し、状況に応じて効率の良い方式を自動選択する。macOSのスクリーンキャプチャーにはカーソルが含まれないため、カーソルを合成する機能も備える。
コマンドラインオプションで対象モニターの選択、目標フレームレート、ピクセル変化の検出感度などを調整できる。感度を高く設定すると送信するピクセル数が減り、ネットワーク帯域を節約できる。レイテンシーは良好なWi-Fi環境で100ms未満とされている。
tuckerPi氏は製作の動機について、うまく動くか試してみたかったことと、その過程で学びたかったからだと説明している。ソースコードはGitHubで公開されており、リモート監視用ダッシュボードやサブディスプレイ、IoTディスプレイ用途などへの応用が考えられるとしている。