HSES-LCD24に文字を表示させる(4) 画像表示とNetLCD公開
HSES-LCD24の販売再開しました。あとNetLCDというプログラムをgithubで公開しました。URLはhttps://github.com/h-nari/NetLCD。中身は今回の記事のプログラムです。
今回は画像を表示させる機能を追加させたのだが、プログラムの公開方法に悩み、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に表示させた動画を以下に貼る。
最近のコメント