HSES-LCD24に文字を表示させる(4) 画像表示とNetLCD公開

HSES-LCD24の販売再開しました。あとNetLCDというプログラムをgithubで公開しました。URLはhttps://github.com/h-nari/NetLCD。中身は今回の記事のプログラムです。

160819a3今回は画像を表示させる機能を追加させたのだが、プログラムの公開方法に悩み、githubで公開することにし、プログラムを整理し、ドキュメントなども書いてたら、時間がかかってしまった。

HSES-LCD24のディスプレーは320×240画素で、1画素16bitなので1画面で 320x240x2byte = 153,600byte必要になる。これだとパラメータで渡すのは無理そうだ、そもそも153kbyteも空容量がESP8266にありそうにない。

WebServerのファイルアップロード機能が使えるのではないかと考え、探すと、サンプルプログラムがあった。SDWebServer.inoだ。これの93行あたりにあるhandleFileUpload()という関数に必要な情報が詰まっている

void handleFileUpload(){
  if(server.uri() != "/edit") return;
  HTTPUpload& upload = server.upload();
  if(upload.status == UPLOAD_FILE_START){
    if(SD.exists((char *)upload.filename.c_str())) SD.remove((char *)upload.filename.c_str());
    uploadFile = SD.open(upload.filename.c_str(), FILE_WRITE);
    DBG_OUTPUT_PORT.print("Upload: START, filename: "); DBG_OUTPUT_PORT.println(upload.filename);
  } else if(upload.status == UPLOAD_FILE_WRITE){
    if(uploadFile) uploadFile.write(upload.buf, upload.currentSize);
    DBG_OUTPUT_PORT.print("Upload: WRITE, Bytes: "); DBG_OUTPUT_PORT.println(upload.currentSize);
  } else if(upload.status == UPLOAD_FILE_END){
    if(uploadFile) uploadFile.close();
    DBG_OUTPUT_PORT.print("Upload: END, Size: "); DBG_OUTPUT_PORT.println(upload.totalSize);
  }
}

これらの機能を利用して、画像表示機能を追加、その他の機能も整理してプログラムをgithubに公開した。ある程度、汎用性があるプログラムだと思うのでNetLCDと名付けた。リンクはNetLCD

ESP8266-Ardonoのスケッチにあわせて、Pythonのライブラリも公開している。特に画像は、PIL(Pillow)ライブラリのImageオブジェクトを描画するインターフェースを作ったので、それを使うのが便利。 PIL側で図形や文字を描画して表示することもできる。これだと日本語も表示可能だ。

PC側でサンプルプログラム drawTest.pyを動作させ、HSES-LCD24に表示させた動画を以下に貼る。

Leave a Reply

メールアドレスが公開されることはありません。