ILI9341搭載MSP2807にPicoで画像表示

ILI9341搭載MSP2807にPicoで画像表示

前回ILI9341搭載MSP28072にラズベリーパイピコで、文字や簡単な画像を表示しましたが、今回はラズベリーパイPico(MicroPython)でJPEGやpngの画像を、rawファイルに変換して表示してみました。
しかし、MicroPythonではなくPython3を使うともっと簡単にいろんな文字や画像表示できるようです。

環境

● MSP2807
● ラズベリーパイピコ 
● Windowsパソコン 開発環境はThonny IDE

大まかな流れ

今回はマイクロパイソン用の(ILI9341ライブラリー)がインストール済みという環境で動かしています、もしインストールしてない場合は前回の記事を参考にインストールしてみてください。
下記が大まかな流れです

  • ILI9341ライブラリーはraw形式画像ファイルしか表示できない様なので、初めにパソコン上にあるJPEGまたはピング画像を、Python 3の画像処理ライブラリーpillowで、カラーRGB565 のrawファイルに変換します。
  • 次にソニーを使って前回作ったrawファイルをラズベリーパイピコにアップロードします。
  • 最後にI Li 9341 libraryを使って先ほどアップロードした画像を表示させます。

raw画像形式ファイル作る

私は画像ファイルデータの詳しいフォーマットはよくわかりませんので、分かる範囲内で簡単に説明して行きたいと思います。またraw形式画像ファイルも今回初めて存在することを知り、何も加工していないない画像データのようで、今回作るrawファイルはフォトショップなどで作ることができる汎用rawファイルと違ってカラーRGB565rawファイルのようです。
また、今回作るrawファイル画像形式のデータは、マイクロパイソンで作ることができませんPython3で作ることになります。

pillowインストール

まずはじめにPython3のpillowライブラリーをインストールしますインストールの方法です。
PillowとPILは共存出来ないとのことですので、PILをすでにインストールしてある方は注意してださい。
Thonny IDEで pillowライブラリをインストールする。
ツール」メニューを開き、「パッケージの管理」をクリックし、「pillow」を検索してインストールしてください。下図 インストールボタンでインストールします。

pip コマンドを使用して pillow をインストールすることもできるようですが今回は確認していません。
$ pip install pillow または  $ pip3 install pillow

rawファイル作る

下記rawファイルを作るプログラムはこちらのサイトで入手しました。
使い方
まずThonny IDEをマイクロパイソンモードではなく、Python3モードにして新しいフォルダーを作りそちらに移動して、下記のプログラムをimg2rgb565.pyとして保存します。
また、このプログラムは上記のpillowライブラリーが必要です。

# -*- coding: utf-8 -*-
"""Utility to convert images to raw RGB565 format."""

from PIL import Image
from struct import pack
from os import path
import sys


def error(msg):
    """Display error and exit."""
    print (msg)
    sys.exit(-1)


def write_bin(f, pixel_list):
    """Save image in RGB565 format."""
    for pix in pixel_list:
        r = (pix[0] >> 3) & 0x1F
        g = (pix[1] >> 2) & 0x3F
        b = (pix[2] >> 3) & 0x1F
        f.write(pack('>H', (r << 11) + (g << 5) + b))


if __name__ == '__main__':
    args = sys.argv
    if len(args) != 2:
        error('Please specify input file: ./img2rgb565.py test.png')
    in_path = args[1]
    if not path.exists(in_path):
        error('File Not Found: ' + in_path)

    filename, ext = path.splitext(in_path)
    out_path = filename + '.raw'
    img = Image.open(in_path).convert('RGB')
    pixels = list(img.getdata())
    with open(out_path, 'wb') as f:
        write_bin(f, pixels)
    print('Saved: ' + out_path)

次にフォトショップなどで200×300ピクセルぐらいのJPEGまたはpng画像を作り、その 画像をimg2rgb565.py と同じフォルダーに貼り付けます。
今回Eドライブのpillotestの中mytest.jpgに下図のように作りました。

Thonny IDがpython3モードであることを確認dして、img2rgb565.pyをクリックして立ち上げ、下記の命令を実行すると同じフォルダーの中にmytest.rawファイルが自動的に追加されます。
見えない場合はフィルダーをクリックしてください。

%Run img2rgb565.py mytest.jpg

次にThonny IDEをマイクロパイソンモードにします。
つぎにmytest.rawファイルをThonny IDEで、下記のようにラズベリーパイピコ本体に転送します。
mytest.rawを左クリックして、/にアップロードを押します。

画像表示

Thonny IDEでpicoは本体の下記プログラムを実行すれば同じフォルダーに入っているmytest RAWファイルが表示されます。

from machine import Pin, SPI
from xglcd_font import XglcdFont
from ili9341 import Display, color565
import utime
spiMSP     = SPI(0, baudrate=51200000, sck=Pin(6), mosi=Pin(7))
display = Display(spiMSP, dc=Pin(15), cs=Pin(13), rst=Pin(14))
font    = XglcdFont("fonts/Unispace12x24.c", 12, 24)

display.draw_image('mytest.raw', 10, 5, 220, 296)
def clup_12():
    utime.sleep(8)
    display.clear()

display.draw_image(‘mytest.raw’, 10, 5, 220, 296)ピクセルの数字が合ってないと、うまく表示できません。
表示した画像です。

うまくいきました。

タイトルとURLをコピーしました