前回は RaspberryPi pico の MicroPython を VScode の Pymakr で使う環境を導入しました。MicroPython ならライブラリがいろいろ公開されていますので応用度が高いです。ここでは、以前購入した 小型 TFT を pico に接続して MicroPython のライブラリを導入して描画してみます。
TFT LCD ILI9341
ILI9341 は LCD コントローラですが、320x240 の TFT LCD と一体化したモジュールとして各社から発売されていてクローンがたくさんあります。大体1500~2000円くらいで買えます。
(本当は別のボードに接続してドライバを試すために購入したのですが、電源電圧が合わずにレベルコンバータを用意しようとして置いたままでした)
こちらで購入したものは SPI 接続で 9pin 仕様の製品になります。ピンの仕様がここに記載したものと異なる可能性もあるので、入手にはご注意ください。
左側に 9pin、右側に 5pin 出ています。5pin は付属の SD ソケット用ですが、今回は使用しません。
結線
RaspberryPi pico に ILI9341 モジュールを接続します。電源(Vcc,GND) と SPI (SCK,MOSI) の他に CS,RESET,DC/RS をGPIO として接続します。モジュールからの出力は受け取る必要がないので MISO は未接続です。
ILI9341 | RaspberryPi pico | ||
1 | VCC | 36 | 3V3 OUT |
2 | GND | 33 | GND |
3 | CS | 17 | GP13 |
4 | RESET | 19 | GP14 |
5 | DC/RS | 20 | GP15 |
6 | SDI(MOSI) | 10 | GP7 (SPI0_TX) |
7 | SCK | 9 | GP6 (SPI0_SCK) |
8 | LED | 36 | 3V3 OUT |
9 | SDO(MISO) | N/C |
サンプルプログラム
MycroPython 向けに ILI9341 ライブラリが公開されているので、こちらを使用させていただきます。GitHub より clone します。
git clone https://github.com/rdagger/micropython-ili9341
Pymakr 向けの作業用ディレクトリを作成し、clone したソースから ili9341.py と xglcd_font.py を持ってきます。また fonts/ ディレクトリから1つフォントソースを持ってきます。フォントソースは C の配列で記述されているのですが、Pymakr が 拡張子 *.py しか認識できないので、(あまり望ましくないですが)リネームしておきます。
mkdir example-ili9341 cd example-ili9341 mkdir fonts cp -a ../micropython-ili9341/{ili9341.py, xglcd_font.py} ./ cp -a ../micropython-ili9341/fonts/Unispace12x24.c fonts/Unispace12x24.py
描画プログラム main.py を作成します。
from machine import Pin, SPI from xglcd_font import XglcdFont import ili9341 spi = SPI(0, baudrate=51200000, sck=Pin(6), mosi=Pin(7)) display = ili9341.Display(spi, dc=Pin(15), cs=Pin(13), rst=Pin(14)) font = XglcdFont("fonts/Unispace12x24.py", 12, 24) display.draw_text(10, 10, "Hello world!", font, ili9341.color565(255, 255, 0)) display.draw_circle(50, 70, 30, ili9341.color565(0, 255, 255)) display.fill_rectangle(100, 100, 80, 50, ili9341.color565(255, 0, 255))
1~3 行目は モジュールのインポートです。machine は MicroPython 内蔵、xglcd_font と ill9341 は先ほどコピーしたライブラリを参照しています。
5行目は SPI インスタンスの生成です。周波数(baudrate)、クロックピン(sck)、出力ピン(mosi) を指定しています。ピンの番号は先ほどの配線の GPIO番号 (GPnn) に一致します。
6行目は ili9341 の Display 関数を呼び出してモジュールを表示できるようにします。SPI インスタンス、DC/RS ピン(dc)、CSピン(cs)、RESETピン(rst) をそれぞれ指定します。
7行目は XglcdFont インスタンスを生成します。フォントファイルはテキストとして読み込みます。
9~11行目はそれぞれテキスト文字列(黄色)、円(水色)、塗りつぶし長方形(マゼンダ)を描画します。color565(R,G,B) 関数で 16bit カラーを表します。
実行
VScode で example-ili9341/ を開き、ファイルが揃っていることを確認します。
pico と USB で接続し、最下段の "Pymakr Console" を押して端末として接続します。"Upload" を押してファイルをアップロードします。
アップロード完了と共に main.py が実行され、TFT LCD に表示が出たら成功です。
ライブラリが公開されていたので SPI のコマンドを送り込むまでもなく、割と簡単に表示までたどり着きました。
参考
- https://github.com/rdagger/micropython-ili9341
- http://www.lcdwiki.com/2.2inch_SPI_Module_ILI9341_SKU:MSP2202
- http://helloraspberrypi.blogspot.com/2021/03/rpi-picomicropython-ili9341-spi-display.html
コメント