Copyright 2020 Moddable Tech, Inc.
改訂: 2024年9月10日
ILI9341 LCDコントローラは、16ビット/ピクセル(RGB565LE)ディスプレイを動作します。ディスプレイは最大240ピクセル幅、320ピクセル高さです。
ILI9341ドライバは、128 x 128ピクセルの正方形ディスプレイで16ビット/ピクセルのILI9163Cディスプレイコントローラでも正常に動作します。
プロジェクトにILI9341ドライバを追加するには、そのマニフェストをインクルードします:
"include": [
/* other includes here */
"$(MODULES)/drivers/ili9341/manifest.json"
],
CommodettoまたはPiuを使用する場合、マニフェストのconfig
オブジェクトのscreen
プロパティをili9341
に設定して、ILI9341をデフォルトのディスプレイドライバにします。タッチ入力がない場合は、タッチドライバ名を空の文字列に設定して無効にします。
"config": {
"screen": "ili9341",
"touch": ""
},
注: manifest_piu.json
マニフェストにはILI9341がインクルードされています。したがって、manifest_piu.json
を使用するプロジェクトは、自分でそれをインクルードする必要はありません。
ILI9341ドライバは、入力として多くの異なるピクセルフォーマットをサポートしています。16ビットカラーのピクセルはドライバのネイティブフォーマットであり、最も一般的に使用されます。mcconfig
を使用してビルドする際には、コマンドラインでピクセルフォーマットをrgb565le
に設定します:
mcconfig -m -p esp -f rgb565le
ILI9341ドライバが直接サポートする他のフォーマットには、8ビットグレー(gray256
)、8ビットカラー(rgb332
)、および4ビットグレー(gray16
)があります。
さらに、4ビットカラー(clut16
)もサポートされています。デフォルトのカラーテーブルはありません。アプリケーションはカラーテーブルを設定する必要があります。Pocoを使用する場合、カラーテーブルはコンストラクタの辞書内のclut
プロパティとして渡されます。Piuを使用する場合、カラーテーブルはmain.cct
という名前のResource
から自動的にロードされます。また、アプリケーションのclut
プロパティに明示的に設定することもできます。スクリプトからカラーテーブルを変更する実例については、Piuのclutのサンプルを参照してください。
ほとんどのプロジェクトでは16ビットRGBピクセルを使用しますが、他のピクセルフォーマットも有用です:
- アプリケーションが低い色解像度のディスプレイでどのようにレンダリングされるかをテストするため
- ROM内のカラー画像リソースのサイズを削減するため
- RAMの使用量を削減するため(小さいサイズのピクセルは小さいレンダリングバッファを使用します。例えば、4ビットのグレーピクセルは16ビットのRGBピクセルよりも75%少ないRAMを使用します)
defines
オブジェクト内で、ピクセルのwidth
とheight
を宣言します。
"defines": {
"ili9341": {
"width": 128,
"height": 128
}
}
オプションのregisters
プロパティは、ILI9341のデフォルトのレジスタ初期化を上書きするために使用されます。レジスタプロパティはドライバのソースコードの一部としてCでコンパイルされるため、ドライバと同じ#define定数にアクセスできます。そのため、以下のようにkDelayMS
、MODDEF_ILI9341_FLIPY
、およびMODDEF_ILI9341_FLIPX
が使用されています。レジスタコマンドのリストは、値が0の擬似レジスタkDelayMS
で終了します。
"defines": {
"ili9341": {
/* other properties here */
"registers": [
"0xCB, 5, 0x39, 0x2C, 0x00, 0x34, 0x02,",
"0xCF, 3, 0x00, 0xC1, 0X30,",
"0xE8, 3, 0x85, 0x00, 0x78,",
"0xEA, 2, 0x00, 0x00,",
"0xED, 4, 0x64, 0x03, 0x12, 0x81,",
"0xF7, 1, 0x20,",
"0xC0, 1, 0x23,",
"0xC1, 1, 0x10,",
"0xC5, 2, 0x3e, 0x28,",
"0xC7, 1, 0x86,",
"0x36, 1, (0x48 ^ (MODDEF_ILI9341_FLIPY ? 0x80 : 0)) ^ (MODDEF_ILI9341_FLIPX ? 0x40 : 0),",
"0x3A, 1, 0x55,",
"0xB1, 2, 0x00, 0x18,",
"0xB6, 3, 0x08, 0x82, 0x27,",
"0xF2, 1, 0x00,",
"0x26, 1, 0x01,",
"0xE0, 15, 0x0F, 0x31, 0x2B, 0x0C, 0x0E, 0x08, 0x4E, 0xF1, 0x37, 0x07, 0x10, 0x03, 0x0E, 0x09, 0x00,",
"0xE1, 15, 0x00, 0x0E, 0x14, 0x03, 0x11, 0x07, 0x31, 0xC1, 0x48, 0x08, 0x0F, 0x0C, 0x31, 0x36, 0x0F,",
"0x11, 0,",
"0x29, 0,",
"kDelayMS, 0"
]
}
}
defines
オブジェクトにはspi_port
、およびDC
とCS
のピン番号を含める必要があります。RST
ピンが提供されている場合、コンストラクタが呼び出されたときにデバイスがリセットされます。cs_port
、dc_port
、またはrst_port
プロパティが提供されていない場合、それらはデフォルトでNULLになります。
"defines": {
"ili9341": {
/* other properties here */
"cs_pin": 4,
"dc_pin": 2,
"rst_pin": 0,
"spi_port": "#HSPI"
}
}
hz
プロパティが存在する場合、SPIバスの速度を指定します。デフォルト値は40,000,000 Hzで、これはILI9341がサポートする最大SPI速度に近い値です。
ILI9341ドライバは非同期SPIトランザクションを実装しており、スループットを最適化し、送信中に必要なCPU時間を最小限に抑えます。送信されるピクセルを保存するために追加のRAMを必要としないように、ILI9341ドライバはスクリプトによって提供されるバッファから直接送信します。これは、ILI9341の send
呼び出しで提供されるバッファが、次の send
、continue
または end
の呼び出しが戻るまで変更されないままである必要があることを意味します。
PocoまたはPiuを使用してILI9341の非同期操作を有効にするには、レンダーバッファ内のピクセル数が2本のフルスキャンライン以上である必要があります。これはデフォルトなので、スクリプトはILI9341コンストラクタを直接呼び出す場合にのみこれを考慮する必要があります。レンダーバッファ内のピクセル数を設定するには、ILI9341コンストラクタに渡される辞書の pixels
プロパティにピクセル数を設定します。
ILI9341ドライバは、command
メソッドを使用してスクリプトがディスプレイコントローラに直接コマンドを発行できるように、PixelsOutインターフェイスを拡張します。データ引数なしでコマンドを送信するには:
// 反転オン
screen.command(0x21);
データ引数を持つコマンドを送信するには、引数を ArrayBuffer
に入れます:
// 90度回転
screen.command(0x36, Uint8Array.of(0x60).buffer);