[ESP32]IoTマイコンを動かしてみる9 -LCD ILI9341 SPI実装編‐

前回下準備を完了したILI9342 TFT LCDを実際に動かしてみる。


SPIの配線

Fritzingのパーツは似たようなのを下記サイトから拝借。

ESP32でSPIを使うときはどのピンでも使ってよいわけではなく(厳密に言うとどのピンでも使えるようだが)、3系統のSPIモジュールのどれかを使う。

ESP32-WROOM32では1系統は内部FLASHに接続されていて使えないので、実質使えるのはVSPIかHSPI。

Adafruitのライブラリを使うときはコンストラクタ(Adafruit_ILI9341())にMOSIとかMISOとかのピンナンバーを与えないとデフォルトでHardwareSPIを使うみたい。

しかし参考リンクを参照するとVSPIが使われている。

もしかしてVSPIもHSPIもAdafruitライブラリ側からするとHardwareSPIなのか?

そしてESP32はHardwareSPIを要求されるとデフォルトでVSPIを使う。みたいな感じか?

試してみよう。

ILI9341 TFT LCDとの配線

HSPIを使うとすると下記のような対応。

ILI9341 TFT LCD ESP32
VCC 3.3V
GND GND
CS IO15 (HSPI SS)
RESET IO16
D/C IO17
SDI(MOSI) IO13 (HSPI MOSI)
SCK IO14 (HSPI SCK)
LED 3.3V
SDO(MISO) IO12 (HSPI MISO)

RESETとD/Cは適当なGPIO(なんとなくSPI絡みのピンと連番をチョイス)。

Fritzingだとこう。

#Fritzingキレイにかけるようになりたい。。

SPIだと4本の配線だけで通信できるのがメリットだけどD/CとかRESETとかで結局パラレルのLCDとあんまり変わらない感じ。

動作確認

Adafruit_ILI9341のサンプル graphictestを試してみる。

サンプルコードの冒頭を下記の通り変更。

が、ダメ。

VSPIで配線し直し。

ILI9341 TFT LCD ESP32
VCC 3.3V
GND GND
CS IO5 (VSPI SS)
RESET IO16
D/C IO17
SDI(MOSI) IO23 (VSPI MOSI)
SCK IO18 (VSPI SCK)
LED 3.3V
SDO(MISO) IO19 (VSPI MISO)

結果的に参考リンクと同じ配線になる。

サンプルコードもTFT_CSのアサインだけ変更。

無事に動いた。

ちなみにシリアルモニタで確認するとベンチマークの結果が見れる。

冒頭の文字化けが謎。

サンプルプログラムの内容としてはsetupで上記の色々なサンプルを一通りベンチマークして、loopでひたするTextのテストを繰り返すもの。

考察

結局参考のリンク通りの配線で動いた。

やはり予想どおりデフォルトのHardwareSPIはVSPIが指定されていると考えて良さそう。

HSPIかVSPIかがよくわからなくてAdafruitライブラリのソースコードをガッツリ読んだが結局よくわからない。

多分ポイントはAdafruit_SPITFT.cppのコンストラクタの定義で、デフォルトのSPIデバイスを呼び出してますよーってところだと思う。

// We just call the hardware SPI instantiator with the default SPI device (&SPI)
SwitchScienceの解説を読むと、SPIクラスを新たにインスタンス化するとHSPI、そうでなければVSPIということらしい。
https://trac.switch-science.com/wiki/esp32_tips
Adafruitのライブラリで新たにインスタンス化されていると空目したのと、HSPI=HardwareSPIと思い込んでしまったことが混迷を招いた感。

まとめ

今回の教訓。先人の知恵を疑ってもしょうがない。

詳しい解説がなくてもとりあえずコピペしとけば動く。よく意味がわからなくても意味があってそうなっているもの。

しかし細かいところが気になるお年ごろ。

遠回りしたけれど実際試してみて腑に落ちる感じになったので良いでしょう。動いたし。

取り敢えず表示系が動かせたので、いよいよWeb周りに突入したい。

おやすみなさい。

余談

年末にこの記事の下書きをしたのだけど、Wordpressの不具合で更新できず。Wordpressのエディタがアップデートされたせいかソースコード表示用のSyntax Highligherのボタンの反応がすこぶる悪い。ストレスしかない。環境見直さねば。