Copyright 2021-2022 Moddable Tech, Inc.
改訂: 2022年3月22日
このドキュメントは、Moddable SDKを使用してM5Paperを使用する方法、アプリのビルドとデプロイ方法、その他の開発リソースへのリンクについての情報を提供します。
M5Paperでアプリをビルドして実行するには、以下が必要です:
- Moddable SDKをインストールする
- ESP32ツールをインストールする
- (macOSユーザーのみ) 以下のmacOSセクションの指示に従う
- 以下のアプリのビルドとデプロイセクションの指示に従う
macOSでのM5PaperのUSBドライバの状況は少し厄介です。以下の手順を実行してください。
- macOS Big Sur以降を実行する
- このissueで参照されているドライバをインストールする
Moddable SDKには、M5Paperを最大限に活用する方法を示すいくつかのサンプルアプリケーションがあります。詳細はePaperブログの投稿を参照してください。
ホスト環境とESP32ツールをセットアップした後、以下の手順でM5Paperにアプリケーションをインストールします。
-
デバイスに付属のUSBケーブルでM5Paperをコンピュータに接続します。
-
mcconfig
を使用してアプリをビルドおよびデプロイします。mcconfig
は、マイクロコントローラおよびシミュレータ上でModdableアプリをビルドおよび起動するためのコマンドラインツールです。mcconfig
の完全なドキュメントはこちらで利用できます。mcconfig
を使用してM5Paper用にビルドするには、プラットフォーム-p esp32/m5paper
を使用します。例えば、epaper-photos
のサンプルをビルドするには次のようにします。cd $MODDABLE/examples/piu/epaper-photos mcconfig -d -m -p esp32/m5paper
examples readme には、画面の回転、Wi-Fiの設定など、他の一般的に使用される
mcconfig
引数に関する追加情報が含まれています。プラットフォーム
-p simulator/m5paper
をmcconfig
と共に使用して、M5Paperシミュレータ用にビルドします。
一般的な問題とその解決方法については、ESP32ドキュメント のトラブルシューティングセクションを参照してください。
以下が実装され、動作しています:
- EPDディスプレイドライバ
- GT911タッチドライバ
- SHT30温度/湿度センサー
- A / B / Cボタン
- RTC
注意: GT911タッチコントローラのI2Cアドレスは揺らぎがあります。実装ではアドレス0x14と0x5Dの両方を試みます。これはホストプロバイダのTouchコンストラクタで処理され、ドライバやユーザースクリプトでは処理されません。0x14が失敗すると、0x5Dで再試行する前に例外がスローされます。これに遭遇した場合は、xsbugでGoを押してください。
ディスプレイドライバはPoco PixelsOut
の実装です。これにより、Moddable SDKのPocoグラフィックスAPIとPiuユーザーインターフェースフレームワークの両方を使用することができます。
多くの既存のPocoおよびPiuの例はEPDで動作しますが、その多くは実用的ではありません。これらは高リフレッシュレートの小型カラーLCD用に設計されているため、低リフレッシュレートの大きなグレーディスプレイでは見た目が滑稽になることが多いです。このディスプレイ用に設計されたいくつかの例が必要です。
ディスプレイドライバは完全にJavaScriptで書かれています。すべてのハードウェアアクセスにEcma-419 IO APIを使用しています。パフォーマンスは優れており、ネイティブのM5Paperライブラリに組み込まれているEPDクラスよりも高速なことが多いです。その理由の1つは、Pocoが4ビットグレーピクセルに直接レンダリングできるため、ピクセルフォーマットの変換が不要になることです。もう一つの理由は、ディスプレイコントローラーへのSPI転送が一度に数千ピクセルのバルク転送で行われるため、4ピクセルずつ転送する場合に比べて転送されるビット数が半分以上削減されることです。
メモリ使用量も非常に低いです。ESP32メモリにはフレームバッファがなく、レンダリングされたピクセルは16ラインのレンダーバッファ(約8 KB)から直接ディスプレイに送信されます。
Pocoのcontinue
機能を使用すると、EPDパネルを一度だけリフレッシュしながら画面の複数の領域を更新することが可能です。これにより非常に効率的な更新が可能になります。つまり、転送されるメモリの量が最小限に抑えられ、長いパネルフラッシュが一度だけ発生します。Piuのballs
のサンプルはこれを実際に見るのに良い方法です。ボールの画像(その周りの空白部分ではなく)のみがディスプレイに転送され、4つのボールを囲む矩形のみがディスプレイパネルでフラッシュします。
ディスプレイコントローラの回転機能がサポートされており、0度、90度、180度、および270度の回転でオーバーヘッドなしの回転が可能です。
ディスプレイコントローラは、いくつかの異なる更新モードをサポートしています。最適なモードは描画されるコンテンツによって異なります。モードは各フレームで変更することができます。デフォルトのモードはGLD16
です。モードを変更するには、グローバルscreen
オブジェクトのconfig
メソッドを呼び出します。例えば:
screen.config({updateMode: "A2"});
新しいアプリをデバイスにインストールすると、前のアプリから画面に残っているアーティファクトが見えることがあります。これを取り除くためには、高品質モード(例:GC16
)で少なくとも1フレームを完全に描画してから、より高速な更新モード(例:A2
)に切り替えることが有効です。epaper-flashcardsのサンプルでは、ほとんどのアプリに適用できるパターンを使用しています:
onDisplaying(application) {
screen.refresh?.();
screen.configure?.({updateMode: config.firstDrawMode ?? config.updateMode});
if (config.firstDrawMode)
application.defer("onFinishedFirstDraw", config.updateMode);
this.showNextCard(application, 1); // render the initial screen of the app
}
onFinishedFirstDraw(application, mode) {
screen.configure({updateMode: mode});
}
このパターンを使用すると、デバイスごとのfirstDrawMode
およびupdateMode
設定をプロジェクトのmanifest.json
に適用できます:
"platforms": {
"esp32/m5paper": {
"config": {
"firstDrawMode": "GC16",
"updateMode": "A2"
}
}
}
ディスプレイドライバは、いくつかの異なるピクセルフィルターをサポートしています。これらのフィルターはピクセルの輝度を調整します。画像の最適化や特殊効果の適用に役立ちます。デフォルトのフィルターは「なし」です。フィルターは各フレームごとに変更できます。フィルターを変更するには、グローバルなscreen
オブジェクトのconfig
メソッドを呼び出します。例えば:
screen.config({filter: "negative"});
フィルターは16個の値を持つ Uint8Array
です。組み込みフィルターの代わりに独自のフィルターを設定するには、次のようにします:
let filter = new Uint8Array(16);
// ここでフィルターを初期化するコード
screen.config({filter});
Moddable SDKには、その多くの機能を使用する方法を示す150以上のサンプルアプリがあります。これらのサンプルの多くはM5Paperで動作します。
とはいえ、すべてのサンプルがM5Paperハードウェアと互換性があるわけではありません。例えば、一部のサンプルはM5Paperディスプレイと互換性のない特定のディスプレイおよびタッチドライバをテストするために設計されており、ビルドエラーが発生します。
Moddable SDKには、M5Paperを最大限に活用する方法を示すいくつかのサンプルアプリケーションがあります。詳細については、ePaperブログの投稿を参照してください。
Moddable SDKのすべてのドキュメントはdocumentationディレクトリにあります。documentation、examples、およびmodulesディレクトリは共通の構造を持っており、情報を簡単に見つけることができます。いくつかのハイライトは次のとおりです:
commodetto
サブディレクトリには、2DグラフィックスAPIを提供するビットマップ グラフィックス ライブラリであるCommodettoと、軽量レンダリング エンジンであるPocoに関連するリソースが含まれています。piu
サブディレクトリには、複雑で応答性の高いレイアウトを簡単に作成できるようにするユーザー インターフェイス フレームワークであるPiuに関連するリソースが含まれています。networking
サブディレクトリには、BLE、ネットワーク ソケット、およびHTTP/HTTPS、WebSockets、DNS、SNTP、telnetなどのソケット上に構築されたさまざまな標準の安全なネットワーキング プロトコルに関連するネットワーキング リソースが含まれています。pins
サブディレクトリには、サポートされているハードウェア プロトコル (デジタル、アナログ、PWM、I2Cなど) に関連するリソースが含まれています。市販の一般的なセンサー用の多数のドライバと対応するサンプル アプリも利用できます。
ご質問がある場合は、issue を開く ことをお勧めします。できるだけ早く対応し、他の開発者が支援を提供し、質問への回答から利益を得ることができます。多くの質問にはすでに回答されているため、新しいissueを開く前に以前のissueを検索してみてください。
私たちの活動をフォローする最良の方法は、Twitter (@moddabletech) をフォローすることです。新しい投稿に関するお知らせやその他のModdableニュースを私たちのブログで発表しています。