espeink の挙動

とりあえず、全体がまだ良くわかっていないけれども、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 に他のブラウザからアクセスしてみたのが以下。

WiFi_connection

 

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|Ž‚.ì.’r’blŽbŒònnžlnnœâì.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("★ソース画像", "★出力画像");

?>