ESP-WROOM-02でTFTに画像を表示する

今日のニャンコ その1


Adafruit_ILI9341ライブラリのサンプルスケッチ(spitftbitmap.ino)を使えば、簡単に画像データを表示すること ができますが、
事前にSDカードに画像データファイルを準備しておく必要があります。

そこで、何回かに分けてネット上に公開されている画像データを取り込んで表示する方法を紹介します。
最終的にはこのページで公開されている「猫友日めくりカレン ダー」を表示してみます。

残念ながら「猫友日めくりカレンダー」は2018年12月末で休刊となりました。
長い間、楽しませていただきました。ありがとうございます。


概略は以下のようになります。


@画像データをネットからダウンロードする。
A画像データを変換/整形する。
B画像データをESP8266にアップロードする。
C画像データをESP8266で表示する。

さすがにESP8266単体で画像データをネットからダウンロードする事は難しいです。
そこで、画像データをネットからダウンロードするためにRaspberryPi(あるいはその互換ボード)を使います。
今回は互換ボードのOrangePiを使っています。
ダウンロードするプログラムはpythonで書きました。
以下のコードを「SaveImages.py」で保存してください。
#! /usr/bin/env python
# -*- coding:utf-8 -*-
import sys
import urllib2
import datetime


if __name__ == '__main__':
    argv = sys.argv  # コマンドライン引数を格納したリストの取得
    argc = len(argv) # 引数の個数

    if argc == 1:
      print "usage:"+argv[0]+" FilePath"
      sys.exit()

    NowDate = datetime.datetime.now()
#    print NowDate.day
    url = 'http://www.neko-tomo.net/main-ph/main_{0:d}.jpg'.format(NowDate.day)
#    print 'url='+url
    opener = urllib2.build_opener()
    img = opener.open( url )

    fname = argv[1]
#    print 'fname='+fname
    localfile = open( fname, 'wb')
    localfile.write(img.read())
    img.close()
    localfile.close()


以下のコマンドで画像データをダウンロードすることができます。
$ sudo python ./SaveImages.py /tmp/imageSrc.jpg
$ ls -l /tmp/imageSrc.jpg
-rw-r--r-- 1 root root 136438 Dec 28 07:32 /tmp/imageSrc.jpg

TFTに表示できる画像ファイルは最大240ドット*320ドットの無圧縮BMP形式のファイルです。
そこで、画像データの画像サイズとファイル形式を、画像編集ソフトのImageMagickを使って変換します。
また、FTPクライアントも使いますので一緒にインストールしておきます。
$ sudo apt-get install imagemagick ftp

$ convert /tmp/imageSrc.jpg -geometry 320x240 -compress none /tmp/imageDst.bmp
$ identify /tmp/imageSrc.jpg
/tmp/imageSrc.jpg JPEG 392x413 392x413+0+0 8-bit sRGB 58.6KB 0.010u 0:00.000
$ identify /tmp/imageDst.bmp
/tmp/imageDst.bmp BMP 228x240 228x240+0+0 8-bit sRGB 164KB 0.010u 0:00.010

これで最大240ドット*320ドットのBMP形式のファイルができます。
次回はこの画像ファイルをESP8266にアップロードします。

続く....