Help us understand the problem. What is going on with this article?

M5StackでJPEGの画像表示に手間取った話(micropython)

More than 1 year has passed since last update.

TL;DR

  • M5StackでJPEG画像が表示できず詰まってた話。
  • 原因はJPEGの形式がグレースケールだったからというなんともな話。
    • 残念ながら対応してないっぽい
  • バージョンはmicropythonのfirmware4.0.0で起こってました。
  • Arduinoでは試していないです。

ことの始まり

M5Stackのfirmwareをmicropythonに入れ替えまして、コードをガシガシと書いていこうと思いとりあえず液晶に何か表示がしたいと思い簡単にスクリプトを書いてみたところこれが動かなくて七転八倒してました。

書いたコード

main.py
from m5stack import lcd
import uos

uos.mountsd()
lcd.clear()
lcd.image(0, 0, "/sd/text.jpg", 0, lcd.JPG)

この様にmicrosdカードにjpegの画像を置いてそれをlcd上で表示するという非常にシンプルなコードです。しかし、これが動かない。

試したけど効果がなかったこと

  • firmwareが書き込めているのか試してみる
    • そもそもpythonが動いているのか?
      • ターミナルからつないでみたらちゃんと動いてた
  • lcdが壊れていないか確認する
    • lcd.printを利用して表示する
      • 表示出来た
  • OSのバージョンを片っ端から試してみる
    • エラーがどこに出てるか解らなかったので闇雲に
      • githubにあった3.9.8, 3.9.9, 4.0.0をそれぞれ試す
        • 効果なし

試したら効果があったこと

  • 画像を変えてみた
    • 変更した画像は表示ができた

ということで、入れてた画像が悪かったのですが、何が悪かったのか見た目には解らなかったです。どちらも同じjpegに見える…というわけでidentifyコマンドを使って比較をしてみました。

sh-3.2$ identify images/image.jpg
images/image.jpg JPEG 550x370 550x370+0+0 8-bit sRGB 293925B 0.000u 0:00.000
sh-3.2$ identify images/text.jpg
images/text.jpg JPEG 320x240 320x240+0+0 8-bit Gray 256c 10369B 0.000u 0:00.000

怪しそうなのはsRGBとGrayの辺りですね。
というわけで、ImageMagickを使ってに変換をかけてみました。

$ convert text.jpg -type truecolor text_true.jpg

変換後のファイルをsdに置いて実行したところ無事表示することが出来ました。

まとめ

なんだかんだで表示が出来たのですが、まさかこんなところでハマるとは思っても見なかったです。カラー液晶がせっかくあるんだから、最初からカラーにしておけば引っかからなかったかもしれないなぁと思うと非常に残念

kk2170
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away