Skip to content

Latest commit

 

History

History
167 lines (126 loc) · 5.22 KB

MSP2807.md

File metadata and controls

167 lines (126 loc) · 5.22 KB

MicroPython ILI9341 Driver for Raspberry Pi Pico

MSP2807(ILI9341 + XPT2046 + SDカード)向け・配線を中心にした実装ガイド

このモジュールは、Raspberry Pi Pico と ILI9341 液晶(MSP2807)を安定して動作させるための軽量 MicroPython ドライバです。
特に MSP2807 のように 3つの SPI デバイス(ILI9341 / XPT2046 / SDカード)を搭載した複合モジュールでは、配線と SPI チャネル設計が最重要となります。


1. 対応デバイス

  • Raspberry Pi Pico / Pico W
  • MSP2807(2.8インチ ILI9341 + XPT2046 + SDカード)
  • ILI9341 SPI LCD モジュール全般
  • MicroPython

2. SPI 配線とチャネル設計

MSP2807 には以下の 3 デバイスが搭載されています:

デバイス 用途
ILI9341 液晶表示
XPT2046 タッチパネル
SDカード BMP画像などのファイル読み込み

Raspberry Pi Pico には SPI0 / SPI1 の 2チャネルしかないため、
どのデバイスをどのチャネルに割り当てるかが安定動作の鍵になります。


2.1 SPI 割り当て

デバイス SPIチャネル クロック 理由
ILI9341 SPI1 4 MHz 描画を高速・安定化するため単独チャネル
XPT2046 SPI0 200 kHz タッチ座標取得の安定性を優先
SDカード SPI0(XPT2046と共有) 1 MHz 画像読み込み、タッチと共有

2.2 なぜ ILI9341 を SPI1 に分離するのか

  • 描画とタッチを同じ SPI にすると CS 切り替えが多くて遅くなる
  • SD → ILI9341 の描画は 1ライン読み込みのため頻繁に切り替えが発生
  • Pico の RAM では BMP を保持できず、SD からのストリーミング描画が必須
  • そのため ILI9341 は SPI1 に単独配置するのが最も安定

3. 配線(MSP2807 → Raspberry Pi Pico)

Fritzing で作成した配線図を以下に掲載しています。
まず配線図を参照し、Pico 側のピン番号を正しく接続してください。 ili9341

ili9341


3.1 ILI9341(SPI1)

ILI9341 Pico GPIO 説明
CS GP9 SPI1 CSn
RST GP13 リセット
DC GP8 データ/コマンド切替
DIN GP11 MOSI SPI1 TX
CLK GP10 SPI1 SCK
LED VCC バックライト(常時点灯)
DO GP12 MISO SPI1 RX

3.2 XPT2046(SPI0)

XPT2046 Pico GPIO 説明
T_CLK GP18 SPI0 SCK
T_CS GP17 任意の GPIO
T_DIN GP19 MOSI SPI0 TX
T_DO GP16 MISO SPI0 RX
T_IRQ GP20 割込み

3.3 SDカード(SPI0 共有)

SDカード Pico GPIO 説明
SD_CS GP5 SDカード CS
SD_MOSI GP3 SPI0 TX(共有)
SD_MISO GP4 SPI0 RX(共有)
SD_SCK GP2 SPI0 SCK(共有)

4. モジュールの特徴

  • 関数ベースの軽量ドライバ
  • SPI1 専用設計
  • RGB565 バッファ描画に対応
  • 基本描画(点・線・矩形・塗りつぶし)
  • テキスト描画(外部フォント方式)

5. インストール

/lib/daichamame_ili9341.py
/fonts/(外部取得フォント)

6. 使い方(基本)

6.1 初期化例

import daichamame_ili9341
import fontloader
fnt=fontloader.FontLoader("/font/shnm8x16r.bdf") # 東雲フォントのBDFファイルを読み込む
shnmfont=fnt.load_font()
lcd=daichamame_ili9341.ili9341(font_array=shnmfont,font_size=16,rotate=0)

6.2 描画例

lcd.clear() # 画面クリア
lcd.print(0,0,"ili9341 サンプル",0xffffff) # 文字を表示
lcd.line(50, 50,100,100,0xff00ff) # 線を描く

7. API リファレンス

  • reset() # HWリセット
  • sw_reset() # SWリセット
  • sleep_in() # スリープイン
  • sleep_out() # スリープアウト
  • init_scroll() # スクロール定義初期化
  • set_scroll(tfa,vsa,bfa) # スクロールエリア定義
  • scroll(num) # スクロール
  • clear(color) # 指定色で初期化
  • display_off() # ディスプレイオフ
  • display_on() # ディスプレイオン
  • print(x,y,buf,color,bgcolor,ratio,bold) # 文字を表示
  • line(sx,sy,ex,ey,color) # 線を描く
  • rect(x,y,width,height,color) # 四角形を描く
  • draw_icon(x,y,buf,color,size,bgcolor,ratio) # アイコン(32x32 or 16x16)を描く
  • draw_bitmap(file) # ビットマップ画像ファイルを表示
  • read_touch_position() # タッチした座標を取得
  • add_button(x,y,w,h,label,color,bgcolor) # 簡易ボタン関数

8. 使用例

ライン描画

ili9341

BMP描画

ili9341

ボタン描画

ili9341

9. ライセンス

MIT License