Tinker Boardの基本的な使い方(その6・SPIを使う)

マイコンと周辺機器との通信方式として、SPIを使うことも多いです。
今回は、SPIで320×240ピクセルグラフィックディスプレイを操作する例を紹介します。

1.OSの更新

本記事執筆時点では、DebianのTinker OSの正式版としてバージョン1.8が公開されています。
ただ、1.8ではカーネルに不具合があり、SPI通信を正しく行うことができません。

この点は2.0.1βで修正されました。
Tinker BoardのサポートのページでOSをダウンロードしてインストールしなおします。

2.パッケージのインストール

PythonでSPI通信を行うために、「spidev」というパッケージをインストールします。
以下のコマンドを実行します。

curl https://bootstrap.pypa.io/ez_setup.py -o - | sudo python
curl https://bootstrap.pypa.io/get-pip.py -o - | sudo python
git clone git://github.com/doceme/py-spidev 
cd py-spidev
sudo python setup.py install

3.SPIのピン番号/バス番号

SPI通信の際に使うピン番号は、以下のようになっています。

物理ピン番号ピンの役割
19MOSI
21MISO
23SCK
24CS0
25CS1

また、SPIのバス番号は2番になっています。
spidevでSPIをオープンする際には、以下のようにバス番号に2を指定します。

spi = spidev.SpiDev()
spi.open(2, 0)

4.ディスプレイとの接続

HiLetgo 2.8 今回は、SPIの例としてカラー液晶ディスプレイを使いました。

コントローラとしてILI9341を搭載した320×240ピクセルのディスプレイです。

今回は2.8インチのものが使いましたが、2.4インチ2.2インチのものもあります。

Tinker Boardとディスプレイとの接続は、以下の通りです。

ディスプレイTinker Boardの
物理ピン番号
SDI19
SCK23
CS24
D/C18
RESET16
VCC1
GND9
LED2

5.プログラムを動作させる

PythonでILI9341を制御するライブラリとして、Adafruitから公開されているものを使いました。
ただ、そのままではTinker Boardでは動作しないので、幾分手を加えました。

まず、以下のコマンドを実行して、Pillow(Pythonで画像を扱うライブラリ)をインストールします。

sudo apt -y install python-pil

次に、ILI9341のライブラリとサンプルプログラムを以下からダウンロードします。

ili9341.zip

Zipファイルを解凍したら、以下のコマンドでサンプルプログラムを実行することができます。

sudo python gtest.py