min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

RaspberryPiに繋いだTFTディスプレイST7735(160x128)に文字列を出力する → 大成功

ハピタス登録で1,000円分になるURL

その買うを、もっとハッピーに。|ハピタス

 

文字列をディスプレイに出力したい

こないだRaspberryPiに接続したディスプレイに文字列を出力したい。完成図はこう。

 

部品はこれ。

前回文字列を画像にできることは分かったので、その画像をこのディスプレイのサイズで出力すればいいわけだ。

min117.hatenablog.com

 

TFT液晶はコレST7735サイズは128 x 160なので画像サイズもコレにする必要あり。

Amazonだと単体で2,205円もしよるのでメルカリで買ったほうがいいかも。

 

既存の画像サイズを確認するにはidentifyコマンド

まずは現時点でディスプレイ投影に成功している画像picture01A.jpgのサイズがどうだったか思い出さねばならない。

既存の画像サイズを調べるidentifyコマンドを使うするには imagemagick をインストールすればいいらしい。

$ sudo apt-get -y install imagemagick

 

$ identify /home/pi/Desktop/picture01A.jpg

160x128で画像出力すればこのディスプレイに映るらしいことは分かった。

 

文字列を160x128の画像にする

$ convert -size 160x128 -background white -font /usr/share/fonts/ipa-pgothic/ipagp.ttf -pointsize 30 label:aテストです2 ./mytxt2font-test02.jpg

中央揃えにしたい。gravityオプションを追加する。

$ convert -size 160x128 -background white -gravity Center -font /usr/share/fonts/ipa-pgothic/ipagp.ttf -pointsize 30 label:aテストです2 ./mytxt2font-test02.jpg

おし。

 

文字列を画像にするシェルスクリプト.shにしちゃう

引数にとった文字列を画像にするシェルスクリプトmytxt2jpg.shを作る。

$ vim mytxt2jpg.sh

実行してみよう。

$ sh mytxt2jpg.sh 'テストドル円140円です'

これはうまくいってるぽいぞ。

文字列のはみ出しや折り返し対応は後でやる。

 

※ 画像サイズの指定はここの記事が参考になった。

 

為替ドル円データを画像に落とす

ここまでできれば、以前に作った最新のドル円データを取ってくるpythonスクリプトで取得した今日のドル円を画像に落とすことができる。

 

まずはpythonスクリプトで最新のドル円データを取ってくる。

$ python3 myKINRI45Arg.py 20230101

足元ドル円は140.6円。また円安が加速してる。日本終わってるな。

この140.6円という文字列をさっきのシェルスクリプトに食わせればいいわけだから、pythonスクリプト食わせる処理を入れてやる

このへん参照。

subprocessを使うらしい。

冒頭でimport subprocessして…

 

subprocess.run(["./mytxt2jpg.sh",'ドル円\n'+recentTODAY2+'円'], shell=False)

してpythonからシェルスクリプト実行する処理を追記。

pythonからシェルスクリプト引数あり)を実行するには subprocessの引数でshell=Falseにするらしい。

teratail.com

 

実行してみる。

$ python3 myKINRI45Arg.py 20230101

 大成功!

この.pyをcronで定期実行すると最新のドル円が常に160x128の画像に落ちるわけだ。

 

RaspberryPiでTFTディスプレイに出力させる

この画像Aを↑のドル円画像に差し替えてみよう。

こないだ作ったTFT液晶に画像を表示させるmyTFT.pyを改造する。

$ vim myTFT2JPYUSD.py

実行する。

$ python3 myTFT2JPYUSD.py

ありゃ。エラーになった。must be in mode RGB ってことは画像が何かおかしいのか?画像情報を調べるにはidentifyコマンドを使う。

$ identify pictureJPYUSD.jpg

$ identify picture01A.jpg

8-bitの直後の文字列GrayだとTFTにうまく映らないらしい。sRGBにするにはどうすればいいんだ?

 

画像の次元を合わせる?必要があるのかも。

qiita.com

 

ググって埒が明かない時はChatGPT

いま(2023/5/27)の我々人類には強力な武器がある。ChatGPTに聞けばいい。

raise ValueError("Image must be in mode RGB or RGBA") になるんだけど、画像をRGBにするにはLinuxでどうすればいいだろう

いや、Pythonじゃなくて、シェルスクリプトのconvertコマンドでRGBにしたいのよ。

convertコマンドでRGBモードで画像を出力にはどうするの?

示してくれたコマンドを実行したけどRGBにならないみたい。こんな感じ。どうしてだろう?(Gray のところが sRGB になるようにしたい

[fedora PT3]$ identify pictureJPYUSD.jpg pictureJPYUSD.jpg

JPEG 160x128 160x128+0+0 8-bit Gray 256c 3802B 0.000u 0:00.000

[fedora PT3]$ convert pictureJPYUSD.jpg -colorspace RGB pictureJPYUSD.jpg

[fedora PT3]$ identify pictureJPYUSD.jpg pictureJPYUSD.jpg JPEG

160x128 160x128+0+0 8-bit Gray 256c 3797B 0.000u 0:00.000

[fedora PT3]$

 

ついにRGB化成功

$ convert pictureJPYUSD.jpg -colorspace RGB -type turecolor pictureJPYUSD_rgb.jpg

$ identify pictureJPYUSD_rgb.jpg

おっっしゃ! -type truecolor 付けてやっとsRGBになった!

 

これをラズパイで表示させてみると…

やった!

これでドル円が140円より下がる(円安になる)赤色でLチカ現在のドル円数値がディスプレイに出る。

 

こりゃ応用効くぞ。色々試す。

 

min117.hatenablog.com

qiita.com