ハピタス登録で1,000円分になるURL
文字列をディスプレイに出力したい
こないだRaspberryPiに接続したディスプレイに文字列を出力したい。完成図はこう。
部品はこれ。
前回文字列を画像にできることは分かったので、その画像をこのディスプレイのサイズで出力すればいいわけだ。
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からシェルスクリプト(引数あり)を実行するには subprocessの引数でshell=Falseにするらしい。
実行してみる。
$ 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にするにはどうすればいいんだ?
画像の次元を合わせる?必要があるのかも。
ググって埒が明かない時は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チカ+現在のドル円数値がディスプレイに出る。
こりゃ応用効くぞ。色々試す。