前回のデモプログラムでは ただRM57が抱えている、固定のHTTPファイルを単にWebブラウザに配信するだけで物足りなさを感じていました。RM57の処理した結果をHTTPファイルに反映させる必要があると考えました。まず、デモプログラムのファイルシステム(fsdata)にある、index.htmlを書き換えることで、動的なHTTPファイルを実現出来ないかと考えました。
ソースとなるHTMLファイルに書き換え領域を示すタグを仕込み、その領域をRM57で処理した結果で書き換えれば、多少の制約があるが程々のものができるのではないか、しかしデモプログラムのソースをチェックすると。fs.cにfs_read()はあるけれど、fs_write()がありません。安直にfs_read()でindex.htmlを読み込み、タグをRX57のプログラムで適当に編集した文字列で置き換え、fs_write()でこのファイルを更新してしまえば、当初のIOTの実現が達成されるのではと。。。
そうなると、ファイルシステム(fsdata)を動的なものに置き換える必要があります。以前、SDカードの読み込みをRM57で試していましたが、なかなかうまくいかず挫折していましたが、今回再度挑戦、、、長期戦を決断しました。
ファイルシステムをSDカードのファイルシステム FatFs に置き換えることで動的なファイルシステムを実装することにしました。
RM57は、豊富ペリフェラルを持ちSDメモリーカードに使用するSPIも単独で使用することができました。
後はひたすら、httpd.cの fs_read(),fs_open()を FatFsのf_read(),f_open()に置き換えることで生じる膨大なビルドエラーに対応しました。
あと、#define で LWIP_HTTPD_DYNAMIC_FILE_READ 、LWIP_HTTPD_DYNAMIC_FILE_READ を定義する必要があります。
なんとか、SDカードにあるHTMLファイルが Webブラウザに表示できるようになりました。 すると今度はWebブラウザからRM57を制御したくなりました。
今から十数年まえ、NetscapeのWebサーバでCGIを使っていた事を思い出すと、httpd.cのコメントにCGIの記載があることに気が付きました。
今度はCGIの実装に挑戦です。
このプログラムはWebブラウザで入力されたRGBの色の値をRM57に送り、LCDディスプレイにその色で描画するといったものですが。自己満足は十分に満たしたものとなっています。