atomlgfx は、ESP32 系基板で動く AtomVM から LovyanGFX を利用するためのライブラリです。
用途に応じて、2つの Elixir API を提供します。
LGFX- LovyanGFX に近い、日常的な描画向け API
AtomLGFX- スプライト、パレット、タッチ、JPEG、切り抜き、実行時設定などを含む広い API
どちらも AtomVM NIF を通じて同じ LovyanGFX 装置層を利用します。 旧 AtomVM Port、メールボックス通信、要求/応答組の解析経路はありません。
- 文字や基本図形の描画
- JPEG や RGB565 画像の描画
- スプライトとパレットの利用
- タッチ入力と較正
- 実行時のパネル・バス設定
- 複数の描画命令をまとめたバイナリーバッチ
- 高頻度処理向けの事前符号化バッチ
一般的な LCD 描画では LGFX を推奨します。
:ok =
LGFX.init(
panel_driver: :ili9488,
width: 320,
height: 480
)
:ok = LGFX.fill_screen(:black)
:ok = LGFX.draw_string("Hello AtomLGFX", 16, 16)
:ok =
LGFX.batch([
{:draw_line, 16, 48, 240, 48, :red},
:display
])構築時の既定設定だけを使う場合は LGFX.init/0 も利用できます。
同じ命令列を高頻度で繰り返す場合は、符号化を描画処理の外へ出します。
{:ok, batch} =
LGFX.encode_batch([
{:fill_rect, 10, 10, 100, 40, :red},
{:draw_string, "Hello", 20, 20}
])
:ok = LGFX.submit_batch(batch)
:ok = LGFX.submit_batch(batch)スプライト、パレット、タッチ、JPEG などの高度な機能には AtomLGFX を使います。
{:ok, handle} =
AtomLGFX.open(
panel_driver: :ili9488,
width: 320,
height: 480
)
:ok = AtomLGFX.init(handle)
:ok =
AtomLGFX.render_lcd(handle, [
{:fill_screen, :black},
{:set_text_color, :white},
{:draw_string, "Hello AtomLGFX", 16, 16},
{:draw_line, 16, 48, 240, 48, :red},
:display
])AtomLGFX.open/1 は BEAM Port を開きません。
実行時設定と Elixir 側の状態を識別するハンドルを作成します。
設定と実行時キャッシュはプロセス辞書に保持されるため、ハンドルは作成した
プロセス内で使用してください。不明なハンドルでの初期化は
{:error, :invalid_handle} を返します。
ネイティブ側の LCD 装置は単一実体です。
Elixir application
|
+-- LGFX
|
+-- AtomLGFX
|
v
AtomLGFX.Native
|
v
AtomVM NIF
|
+-- direct NIF calls
|
+-- binary batch
|
v
render_batch
|
v
native/device/
|
v
LovyanGFX
|
v
LCD / touch device
直接 NIF 呼び出しとバイナリーバッチで描画処理を二重実装せず、同じ LovyanGFX 装置層を利用します。
atomlgfx を利用するには、次の2つを同じ Git コミットから取得します。
- AtomLGFX ESP-IDF 部品を組み込んだ AtomVM ファームウェア
- Elixir 側の
atomlgfx依存
Git 依存として利用する場合:
defp deps do
[
{:atomlgfx,
git: "https://github.com/mnishiguchi/atomlgfx.git",
ref: "FULL_GIT_COMMIT_SHA"}
]
endAtomVM ファームウェアへの組み込み方法は ESP-IDF 部品 を参照してください。