とりあえず、全体がまだ良くわかっていないけれども、E-ink とストリームするサーバが必要だということはわかったので、そのメモです。
ファームウェアの user/config.c 中にあるURL を以下のように書き換えて、ファームウェアをアップ。
---- user/config.c :: void configLoad() { int c; spi_flash_read(ESP_PARAM_SEC*SPI_FLASH_SEC_SIZE, (uint32 *)&myConfig, sizeof(MyConfig)); c=calcChsum(); if (c!=myConfig.chsum) { // os_strcpy(myConfig.url, "http://meuk.spritesserver.nl/espbm.php"); os_strcpy(myConfig.url, "http://192.168.1.17:8266/server/espbm.php"); } } ::
192.168.1.17:8266 は、とりあえずosx で起動しているapache です。
本来、mode が 3 で最初に起動するときは動作し、アクセスポイントに接続したら 192.168.4.1 でアクセスできるはずなんだろうけども、そのアクセスポイントに入るパスワードが良くわからず、ソースコード中でとりあえずアクセスポイントに接続するようにしてみた。そして、esp12 に他のブラウザからアクセスしてみたのが以下。
Datasource の URL にあるespbm.php はおそらく、.bm をストリームするものだと思うけれども、サンプルファイル中にはなく、とりあえず変換済みの.bm ファイルにリダイレクトするものを用意。具体的には、以下のようなもの。
<?php fpassthru(fopen("../html/apconnect.bm", "r")); exit(0); ?>
これが正しいのかどうかは、今のところ不明ですが、こうしてみると、シリアル通信は、以下のようになります。
★Reset 後の UART の内容 :: ets Jan 8 2013,rst cause:4, boot mode:(3,7) wdt reset load 0x40100000, len 31640, room 16 tail 8 chksum 0x70 load 0x3ffe8000, len 2572, room 0 tail 12 chksum 0x06 ho 0 tail 12 room 4 load 0x3ffe8a10, len 3528, room 12 tail 12 chksum 0x7d csum 0x7d rlDatasource http://192.168.1.17:8266/server/espbm.php mode : sta(18:fe:34:9b:99:a3) add if0 scandone reconnect scandone add 0 aid 5 pm open phy_2,type:2 0 0 cnt connected with JunkHackAP, channel 6 dhcp client start... No heap available, failed to malloc 440★ヒープがないとさ。IPがとれていない Wdt. This takes too long. Go to sleep. del if0 usl sul 3 0 rm mismatch pm close 7 0 0/17956334 deep sleep 60s★一回スリープするが、 .árl.l|.là|.....lì.b|.ì.rblbònnlnnâì.b.pìlrlrl.rònàbânbp.ü ★60秒後に起きた時には動作せず。
うーん、おしいところまではきていますが、何かがおかしいですね。
テストのために、ソースコードには以下の変更がしてあります。
1) 3.1V 以下でも動作するように定数を書き換え
2) 初回 mode(3) のアクセスポイントに入るパスワードが不明で、接続するよう設定してある
なんか、2の変更がまずそうかもしれません。
まぁ、でもここまでで、以下の事が、ぼやっとですがわかりました。
▼まとめ
・ESP12 から表示するURLは指定でき、そこから画像をストリームして表示しているだろう。
・ESP12 に表示させる画像は、別サーバから取得していることがわかった。
・初回ブートかどうかを判別させる、RTC_MAGICコード部分はうまく動作している
・初回アクセスポイントの設定に行ったとき、開発ボードのLED は光り、画像出力pin へはデータが流れているようだ。
▼不明なこと
・前回不明だったことがまだクリアされていない。
・最初の起動時に、192.168.4.1 で mode(3) のステーションで起動してくるが、このときのwifi アクセスポイントに入るパスワードは?
・EPS12 が設定を終えれば、定期間隔でWEB サーバを見に行くが、この処理はどうやればいいのか?
最初の部分は、ESP8266 の挙動を知れば解決できるかもしれないです。wifi_set_opmode(3); からリスタートがかかるときの挙動というか、サンプルにあるWEBサーバの挙動がどうなるか調査することに。
後者は、推測なのでなんとも言えないのですが、今のところ以下のように考えています。
・800×600 の画像を.bm の形式でストリームさせる。png を bm に変換させるサンプルスクリプトは、ソースコード中のmkimg.php がそれです。出力画像の部分をストリームさせればいいかと。どんなhttpヘッダーをつければいいのですかね?
<?php //Small script to convert an 800x600 png into a .bm file the //eink display can render from its internal espfs. function convertImage($file, $out) { $im=imagecreatefrompng($file); $of=fopen($out, "w"); for ($y=0; $y<600; $y++) { for ($x=0; $x<800; $x+=8) { $b=0; for ($z=0; $z<8; $z++) { $b<<=1; $c=imagecolorat($im, $x+$z, $y); if ((($c)&0xff)<0x80) $b|=1; } fprintf($of, "%c", $b); } } imagedestroy($im); fclose($of); } convertImage("icons/apconnect.png", "html/apconnect.bm"); //convertImage("★ソース画像", "★出力画像"); ?>