前回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)ピクセルの数字が合ってないと、うまく表示できません。
表示した画像です。
うまくいきました。