[ブログ一覧]
 ● ブログトップページ
[ホームページリンク]
 ● ホームレコーディング 楽曲集/宅録/DTM
 ● 自作ギターエフェクター/ツール/パーツ
 ● A3サイズのNゲージ箱庭鉄道模型
[イチオシ記事]
 🚃 A3サイズ鉄道模型:タッチパネルTFT液晶による自動運転システムが完成!

Raspberry Pi Pico 2W (Arduino) でILI9341フルドットTFT液晶を試してみた

2025/08/09


Raspberry Pi Pico 2W (Arduino) でILI9341フルドットTFT液晶を試してみた
Arduinoで動かすボード選び

これまで、ギターエフェクトペダルや鉄道模型のコントローラには、使い方が簡単なArduinoを利用してきました。
主に使ってきたArduinoのボードは以下の2種類です。
XAIO ESP32C3にはWi-Fi機能があり、HTTPサーバーを組み込むことでブラウザからの操作も可能です。実際に、パラメータプリセット機能付きのギターエフェクトペダルを製作した際に活用しました。

XIAO ESP32CとArduino MEGA互換機

グラフィカルなUIを持つコントローラを作りたい

XAIO ESP32C3を使ったコントローラは、キャラクタディスプレイとタクトスイッチ、ロータリーエンコーダを組み合わせた構成で、必要な機能は満たしています。しかし、もう一歩進めて、よりインテリジェントでグラフィカルなUIを備えたコントローラを作ってみたいと考えています。

今回は、タッチパネル搭載のフルドットTFT液晶を使い、ハードウェア側で直感的に操作できるUIを実装してみます。

手頃な320×240ドットタッチパネルTFT液晶

Amazonで、320×240ドットのタッチパネル付きTFT液晶「MSP2807」を見つけました。価格は1,500円ほどで、コントローラICには「ILI9341」が採用されています。SPI接続でマイコンと通信でき、動作電圧は3.3Vです。
余談ですが、最近は何でもかんでもAmazonで売ってますね。すごっ。
Raspberry Pi Pico 2W (Arduino) でILI9341フルドットTFT液晶を試してみた
ボードは「Raspberry Pi Pico 2W」に決定

XAIO ESP32C3はi/o電圧が3.3VでTFT液晶駆動に適していますが、ポート数が少ないのが難点です。そこで、3.3V動作・コンパクトなサイズ・十分なポート数を条件に選んだのが「Raspberry Pi Pico 2W」です。従来のPicoからマイコンをアップグレードし、Wi-FiとBluetooth機能を追加した最新版で、拡張性も十分です。

Raspberry Pi PICO2 W

接続はシンプルにSPIだけ

TFT液晶とPicoの接続はSPIのみで可能です。ネット上には同様の組み合わせを試している事例もあり、それらを参考にブレッドボード上で配線しました。描画とタッチ座標の取得は共通のSPIバスで処理できます。以下は参考にさせていただいたページです。

使用ライブラリ

このTFTパネルを使うために必要なArduinoライブラリは簡単に見つかりました。
  • 表示用:「Adafruit_ILI9341」→ 簡単なAPIで文字や図形を描画可能。
  • タッチ用:「XPT2046_Touchscreen」→ タッチ位置の座標取得が容易。

割り込みを活用したシステム設計

Pico 2WでTFT液晶を試したところ、画面全体の描画転送に約80msかかることが分かりました(SPI通信計測)。ポーリングloop()内で常に描画するとCPU負荷が高くなるため、更新が必要なときだけ描画するイベントドリブン方式にします。

タッチパネルは、ハードウェアタイマーによる周期割り込み(約10ms)で状態を取得し、操作の取りこぼしを防ぐ構成にします。

既知の課題

ただし、この方法は、画面全体の描画転送(約80ms)の間は、タッチスクリーンの座標を取得できません。なぜなら、TFT液晶とタッチスクリーンが、同一のSPIで接続されているからです。別々のSPIに接続して、タッチスクリーンのSPI通信を割り込みで行う方法(描画転送の最中にタッチスクリーン取得を割り込ませる)を考えてみましたが、XPT2046_Touchscreenのライブラリが、割り込みセーフにはできていないため、動作できないようです。

今回はシビアな要求は行わず、このままの構造にしたいと思います。
Raspberry Pi Pico 2W (Arduino) でILI9341フルドットTFT液晶を試してみた
まとめと今後の展望

今回の試作で、CPU負荷を抑えたタッチスクリーン&TFT液晶描画の仕組みが確立できました。次は、ボタンやスライダーなど独自UIライブラリを作成し、その後、グラフィカル操作可能な鉄道模型自動運転コントローラに発展させたいと考えています。

こんな感じで動いてます

緑のLEDは、TFTドライバのILI9341のCS(チップセレクト、負論理)につながっています。
ボタンの構造体と処理関数を書き、ループで4つボタンを生成しています。押すと赤に反応します。





(2025/08/11 追記)

レイアウト状態をグラフィカルに表示

レイアウトのトラックをTFT液晶に表示してみました。信号、踏切ランプ、赤外線センサー、ポイント、スピードなど、レイアウトの状態をグラフィカルに表示できるようにしてみました。

方法としては、「GFXcanvas16」クラスの描画関数ですべてのオブジェクトをメモリ上のオフスクリーンに書いてから、「Adafruit_GFX」クラスの「drawRGBBitmap」関数で、TFT液晶へSPIを使ってビットマップ転送しています。

SPIの通信時間をオシロで計測してみましたが、全画面(320 x 240)を一度転送するのに、72.8msかかっています。

続きは↓のブログで見られます。


(2025/08/24追記)

今回のTFT液晶を使って、完成したシステムをまとめたブログは、以下から見られます。


レイアウト図TFT液晶表示








「鉄道模型」に関連するブログ



2025/08/09 21:03 | ブログ一覧

© 2025 Toshi Software