MSP2807(ILI9341 + XPT2046 + SDカード)向け・配線を中心にした実装ガイド
このモジュールは、Raspberry Pi Pico と ILI9341 液晶(MSP2807)を安定して動作させるための軽量 MicroPython ドライバです。
特に MSP2807 のように 3つの SPI デバイス(ILI9341 / XPT2046 / SDカード)を搭載した複合モジュールでは、配線と SPI チャネル設計が最重要となります。
- Raspberry Pi Pico / Pico W
- MSP2807(2.8インチ ILI9341 + XPT2046 + SDカード)
- ILI9341 SPI LCD モジュール全般
- MicroPython
MSP2807 には以下の 3 デバイスが搭載されています:
| デバイス | 用途 |
|---|---|
| ILI9341 | 液晶表示 |
| XPT2046 | タッチパネル |
| SDカード | BMP画像などのファイル読み込み |
Raspberry Pi Pico には SPI0 / SPI1 の 2チャネルしかないため、
どのデバイスをどのチャネルに割り当てるかが安定動作の鍵になります。
| デバイス | SPIチャネル | クロック | 理由 |
|---|---|---|---|
| ILI9341 | SPI1 | 4 MHz | 描画を高速・安定化するため単独チャネル |
| XPT2046 | SPI0 | 200 kHz | タッチ座標取得の安定性を優先 |
| SDカード | SPI0(XPT2046と共有) | 1 MHz | 画像読み込み、タッチと共有 |
- 描画とタッチを同じ SPI にすると CS 切り替えが多くて遅くなる
- SD → ILI9341 の描画は 1ライン読み込みのため頻繁に切り替えが発生
- Pico の RAM では BMP を保持できず、SD からのストリーミング描画が必須
- そのため ILI9341 は SPI1 に単独配置するのが最も安定
Fritzing で作成した配線図を以下に掲載しています。
まず配線図を参照し、Pico 側のピン番号を正しく接続してください。

| 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 |
| 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 | 割込み |
| SDカード | Pico GPIO | 説明 |
|---|---|---|
| SD_CS | GP5 | SDカード CS |
| SD_MOSI | GP3 | SPI0 TX(共有) |
| SD_MISO | GP4 | SPI0 RX(共有) |
| SD_SCK | GP2 | SPI0 SCK(共有) |
- 関数ベースの軽量ドライバ
- SPI1 専用設計
- RGB565 バッファ描画に対応
- 基本描画(点・線・矩形・塗りつぶし)
- テキスト描画(外部フォント方式)
/lib/daichamame_ili9341.py
/fonts/(外部取得フォント)
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)lcd.clear() # 画面クリア
lcd.print(0,0,"ili9341 サンプル",0xffffff) # 文字を表示
lcd.line(50, 50,100,100,0xff00ff) # 線を描く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) # 簡易ボタン関数
MIT License



