espeink の現在の調査状況

とりあえず、問題点となるポイントが絞れてきました。

設定を終えて、再度起動するときに以下のようになります。

deep sleep 60s

þárl.lœž|.Œlà|....Œ.lì.b|Ž‚.ì.’r’bŒ.bŒònnžlnnœâì.b.pŒŽlrlrlpònà....‚.l......b.nâ|.Œll..ŽbŒònnî.lŒŽl`...nn.l`...nrŽ’’n...lœ.lpònà....rŒœœâà....b.nâ|.ŒŒŽ.à.bŒònnî...l`...nnlŒl`...nrŽ’’n..rŒ’`.`òn...žàb‚nlŒ.Œònnî..Ž.lpònà....rŒœœâàl’..b.nâ|.ìì쌎bŒònnî.lŒ.l`...nnlŒl`...nrŽ’’n..‚òl`..r’’n..‚òl`.är.Datasource http://192.168.1.17/server/espbm.php
mode : sta(18:fe:34:9b:99:a3)
add if0
scandone
add 0
aid 4
pm open phy_2,type:2 0 0
cnt 

connected with JunkHackAP, channel 6
dhcp client start...
ip:192.168.1.24,mask:255.255.255.0,gw:192.168.1.1
Wdt. This takes too long. Go to sleep.
rm match
pm close 7 0 0/19987670
deep sleep 60s

.árl.lœž|.Œlà|....Œ.lì.b|Ž‚.ì.’r’bŒ.bŒònnžlnnœâì.b.pŒŽlrlrlpònà....‚.l......b.nâ|.Œll..ŽbŒònnî.lŒŽl`...nn.l`...nrŽ’’n...lœ.lpònà....rŒœœâà....b.nâ|.ŒŒŽ.à.bŒònnî...l`...nnlŒl`...nrŽ’’n..rŒ’`.`òn...žàb‚nlŒ.Œònnî..Ž.lpònà....rŒœœâàl’..b.nâ|.ìì쌎bŒònnî.lŒ.l`...nnlŒl`...nrŽ’’n..‚òl`..r’’n..‚òl`.är.Datasource http://192.168.1.17/server/espbm.php
mode : sta(18:fe:34:9b:99:a3)
add if0
scandone
add 0
aid 4
pm open phy_2,type:2 0 0
cnt 

connected with JunkHackAP, channel 6
dhcp client start...
ip:192.168.1.24,mask:255.255.255.0,gw:192.168.1.1
Wdt. This takes too long. Go to sleep.
rm match
pm close 7 0 0/19987656
deep sleep 60s

þá

これは、DHCP でIP を取得するまえに、データソースのURL をフェッチしにいっているようで、WiFi のコネクトチェックがアボートしているので、URLにコネクトしていない状況です。どういうタイミングかはわかりませんが、極まれに以下のようになるときがあります。

deep sleep 60s

.árl.lœž|.Œlà|....Œ.lì.b|Ž‚.ì.’r’bŒ.bŒònnžlnnœâì.b.pìŽlrlrlpònà....‚.l......b.nâ|.ìllŽŽŽbŒònnî.lŒŽl`...nn.l`...nrŽ’’n..’lŽ.lpònà....rŒœœâà....b.nâ|.Œ.ŽŽŽbŒònnî...l`...nnlŒl`...nrŽ’’n..‚ŒŽ.l`òn...žàb‚nlŒ.Œònnî..Ž.lpònà....rŒœœâàlŒ..b.nâ|.ìlŽ.à.bŒònnî.lŒ.l`...nnlŒl`...nrŽ’’n..ò.œ.l.r’’n..ò.œ.lärlDatasource http://192.168.1.17:8266/server/espbm.php
mode : sta(18:fe:34:9b:99:a3)
add if0
scandone
reconnect
scandone
reconnect
scandone
reconnect
scandone
reconnect
scandone
reconnect
scandone
reconnect
scandone
reconnect
scandone
reconnect
scandone
add 0
aid 4
pm open phy_2,type:2 0 0
cnt 

connected with JunkHackAP, channel 6
dhcp client start...
No heap available, failed to malloc 440
No heap available, failed to malloc 440
Wdt. This takes too long. Go to sleep.
rm match
pm close 7 0 0/10213903
No heap available, failed to malloc 440
del if0
usl
sul 0 0
deep sleep 60s

.á

現在までで、SDK はとりあえず以下で調査しました。

SDK Version make可否 make問題点 実際の挙動 備考
0.9.2 X      
0.9.3 X      
0.9.5 O なし URL フェッチしない  
0.9.6_b1 X unknown type name ‘uint32_t’

unknown type name ‘uint16_t’

unknown type name ‘uint8_t’

  cgiwifi.c

io.h
1.0.0 X 同上    
1.0.1b1 X 同上    
1.0.1b2 X 同上    
1.0.1 O なし    
1.1.0 X eink.c で使われている

os_update_cpu_frequency

がこのSDKにない

  v1.1.0_15_05_26
1.1.1 X unknown type name ‘uint**_t’

conflicting types for ‘os_random’

  user/cgiwifi.c

user/io.h

include/espmissingincludes.h

1.1.2 X 同上   同上
1.2.0 X 同上   同上
1.3.0 X      
1.4.0 X      

※随時、更新予定。

 

SDK のバージョンがあがるごとに、廃止されたファンクションがあったり、引数が変わったりしたものがあったりと、それなりに対応が必要そうです。作者はおそらく、推測ですが0.9.5 あたりで作成しているかと思います。

 

esp-open-sdk の makefile を見ると以下のようにあり、まだ試すバージョンがあります。

VENDOR_SDK_ZIP_1.3.0 = esp_iot_sdk_v1.3.0_15_08_08.zip
VENDOR_SDK_DIR_1.3.0 = esp_iot_sdk_v1.3.0
VENDOR_SDK_ZIP_1.2.0 = esp_iot_sdk_v1.2.0_15_07_03.zip
VENDOR_SDK_DIR_1.2.0 = esp_iot_sdk_v1.2.0
VENDOR_SDK_ZIP_1.1.2 = esp_iot_sdk_v1.1.2_15_06_12.zip
VENDOR_SDK_DIR_1.1.2 = esp_iot_sdk_v1.1.2
VENDOR_SDK_ZIP_1.1.1 = esp_iot_sdk_v1.1.1_15_06_05.zip
VENDOR_SDK_DIR_1.1.1 = esp_iot_sdk_v1.1.1
VENDOR_SDK_ZIP_1.1.0 = esp_iot_sdk_v1.1.0_15_05_26.zip
VENDOR_SDK_DIR_1.1.0 = esp_iot_sdk_v1.1.0
# MIT-licensed version was released without changing version number
#VENDOR_SDK_ZIP_1.1.0 = esp_iot_sdk_v1.1.0_15_05_22.zip
#VENDOR_SDK_DIR_1.1.0 = esp_iot_sdk_v1.1.0
VENDOR_SDK_ZIP_1.0.1 = esp_iot_sdk_v1.0.1_15_04_24.zip
VENDOR_SDK_DIR_1.0.1 = esp_iot_sdk_v1.0.1
VENDOR_SDK_ZIP_1.0.1b2 = esp_iot_sdk_v1.0.1_b2_15_04_10.zip
VENDOR_SDK_DIR_1.0.1b2 = esp_iot_sdk_v1.0.1_b2
VENDOR_SDK_ZIP_1.0.1b1 = esp_iot_sdk_v1.0.1_b1_15_04_02.zip
VENDOR_SDK_DIR_1.0.1b1 = esp_iot_sdk_v1.0.1_b1
VENDOR_SDK_ZIP_1.0.0 = esp_iot_sdk_v1.0.0_15_03_20.zip
VENDOR_SDK_DIR_1.0.0 = esp_iot_sdk_v1.0.0
VENDOR_SDK_ZIP_0.9.6b1 = esp_iot_sdk_v0.9.6_b1_15_02_15.zip
VENDOR_SDK_DIR_0.9.6b1 = esp_iot_sdk_v0.9.6_b1
VENDOR_SDK_ZIP_0.9.5 = esp_iot_sdk_v0.9.5_15_01_23.zip
VENDOR_SDK_DIR_0.9.5 = esp_iot_sdk_v0.9.5
VENDOR_SDK_ZIP_0.9.4 = esp_iot_sdk_v0.9.4_14_12_19.zip
VENDOR_SDK_DIR_0.9.4 = esp_iot_sdk_v0.9.4
VENDOR_SDK_ZIP_0.9.3 = esp_iot_sdk_v0.9.3_14_11_21.zip
VENDOR_SDK_DIR_0.9.3 = esp_iot_sdk_v0.9.3
VENDOR_SDK_ZIP_0.9.2 = esp_iot_sdk_v0.9.2_14_10_24.zip
VENDOR_SDK_DIR_0.9.2 = esp_iot_sdk_v0.9.2

0.9.5 ~ 1.3.0 の間にまだあるので、それらをとりあえず全部試してみようかと。

コードの調査している部分は、

---- user_main.c
::
    httpclientFetch(myConfig.url, httpclientCb, httpclientHdrCb);
    
    einkDisplay(24*1024, tcpEinkNeedData, einkDoneCb);
::

です。古典的に、デバックにはシリアルプリントと delay を入れているんですが、コネクトしている部分がよくわからず、一体どこで、アクセスポイントに接続して、dhcp してIP をもらっているのかが良くわかっていません。このあたりは、C のデバックデックニックのスキルだと思いますが、もっと効率的なものはないでしょうかね。

 

原理的に、deep sleep から復帰したら、まずアクセスポイントにコネクトし、IP をゲットするまで delay させてからフェッチしたいんですが、そのdelay を入れるところがよくわかりません。

 

もう少し、簡単なアクセスポイントに接続するコードを書いて試してみようかと思います。部品とプリント基板を発注しようと考えていたんですが、もう少しソースコードを調査しないと動作しなさそうなので、来週以降に発注は持ち越しになりそうです。httpのtcp 経由じゃなく、ローカルのファイルシステム(espfs)に含まれる.bm ファイルは表示されている感じなので、表示することはできそうかなと思います。

 

さぁ、どこまで根気が続くかです。hack とは根気がいるものですね。推理と実験を繰り返し、1つづつ問題を把握しないといけませんが、問題を分解するのにスキルが足りていない部分は都度、勉強しながらとなるので、時間がかかります。

今のところ、このhack で勉強になったのは、基板を設計しお値打ちに作成する方法、open-sdk というものがあること、esptool にはpython 版と C 版があるということです。

 

▼まとめ

・作者はおそらく、0.9.5 か 1.0.1のSDK を使っていたと推測。

・esphttpd は、オリジナルがおそらく以下

https://github.com/OLIMEX/ESP8266/tree/master/esphttpd

・そして、最新のSDKなどにあわせて新しくなったものが以下にある

https://github.com/izhak2/esphttpd

・この単体をまず試してみようと思う。特に、新しいesphttpd は Makefile の書き方が参考になるし、新しいSDKにも対応しているようなので。

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("★ソース画像", "★出力画像");

?>

espeink make その4

続きをやっています。昨日、esptool は C 製のを使うことがわかったので今回は実際に ESP12 に書き込んでみます。

まだ、PCB ボードは作っていませんが、開発ボードにとりあえず書き込めるかやってみようと思います。

 

書き込む開発ボードは、以下のものです。他2台は、以前にあれこれやっている最中に3.3V 以上入れすぎて壊れたようです。2台は昇天しましたので、正常なのはこれと、あと未開封のが1つあります。

dev

 

さて、ソースディレクトリに移動し、make flash してみます。

HOPE:espeink junkhack$ make flash
esptool vb64eebd - (c) 2014 Ch. Klippel <ck@atelier-klippel.de>
opening port /dev/cu.SLAB_USBtoUART at 115200
opening bootloader
resetting board
trying to connect
trying to connect
Uploading 37632 bytes from firmware/0x00000.bin to flash at 0x00000000
.....................................
starting app without reboot
closing bootloader
Please put the ESP in bootloader mode...★再度、RST を GND に
esptool vb64eebd - (c) 2014 Ch. Klippel <ck@atelier-klippel.de>
opening port /dev/cu.SLAB_USBtoUART at 115200
opening bootloader
resetting board
trying to connect
trying to connect
Uploading 166264 bytes from firmware/0x40000.bin to flash at 0x00040000
...................................................................................................................................................................
starting app without reboot
closing bootloader
HOPE:espeink junkhack$ 

 

こんな感じになれば書き込みはOK なようです。

esptool(esptool-ck) が、ファームウェアが2つ書き込むのですが、2つ目の時にも再度書き込みモードを要求してくるようなので、RST pin をGNDに落としてブートモードにします。このあたりは、実際のPCB 基盤につけた状態だとどうなるのでしょうかね?要検討です。

 

続いて、html を mkespfsimage というツールを使って圧縮しそれを 0x12000 の領域に書き込むようです。これは、以下のコマンドを使って作ることができます。

$ make webpages.espfs

が、ここで問題が2つ発生。まず、osx だと、これを実行すると、昨日試したように、

HOPE:espeink junkhack$ make webpages.espfs
cd html; find | ../mkespfsimage/mkespfsimage > ../webpages.espfs; cd ..
/bin/sh: ../mkespfsimage/mkespfsimage: cannot execute binary file
usage: find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression]
       find [-H | -L | -P] [-EXdsx] -f path [path ...] [expression]
HOPE:espeink junkhack$

 

となってしまいfind の使い方が悪いよと、出てしまいます。make ファイルに書いてあるようにコマンドを実行してみますと

HOPE:espeink junkhack$ cd html/
HOPE:html junkhack$ find
usage: find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression]
       find [-H | -L | -P] [-EXdsx] -f path [path ...] [expression]

 

となります。osx の find は、引数を与えないとデフォルトでは出ない仕様のようです。なので、GNU の find を入れます。

$ brew install findutils --with-default-names

 

まず、1つ目の問題はこれでクリアです。しかし、まだ以下のようになります。

HOPE:espeink junkhack$ make webpages.espfs
cd html; find | ../mkespfsimage/mkespfsimage > ../webpages.espfs; cd ..
/bin/sh: ../mkespfsimage/mkespfsimage: cannot execute binary file

 

シェルが、mkespfsimage の、バイナリファイルを実行できないようです。このコマンドを再度 make してみます。

HOPE:mkespfsimage junkhack$ cd mkespfsimage

HOPE:mkespfsimage junkhack$ make clean
rm -f mkespfsimage main.o heatshrink_encoder.o
HOPE:mkespfsimage junkhack$ 

HOPE:mkespfsimage junkhack$ make
cc -I../lib/heatshrink -std=gnu99   -c -o main.o main.c
main.c:59:38: warning: passing 'char *' to parameter of type 'uint8_t *' (aka 'unsigned char *') converts between pointers to integer types with
      different sign [-Wpointer-sign]
                        sres=heatshrink_encoder_sink(enc, inp, insize, &len);
                                                          ^~~
../lib/heatshrink/heatshrink_encoder.h:97:14: note: passing argument to parameter 'in_buf' here
    uint8_t *in_buf, size_t size, size_t *input_size);
             ^
main.c:65:38: warning: passing 'char *' to parameter of type 'uint8_t *' (aka 'unsigned char *') converts between pointers to integer types with
      different sign [-Wpointer-sign]
                        pres=heatshrink_encoder_poll(enc, outp, outsize, &len);
                                                          ^~~~
../lib/heatshrink/heatshrink_encoder.h:102:14: note: passing argument to parameter 'out_buf' here
    uint8_t *out_buf, size_t out_buf_size, size_t *output_size);
             ^
2 warnings generated.
cc -I../lib/heatshrink -std=gnu99   -c -o heatshrink_encoder.o heatshrink_encoder.c
cc -o mkespfsimage main.o heatshrink_encoder.o
HOPE:mkespfsimage junkhack$

 

とりあえず、なんか警告は出ていますができたようです。Linux (Ubuntu)のgcc 4.8.2では以下のようになりました。

root@ub:~/work/espeink/mkespfsimage# rm mkespfsimage
root@ub:~/work/espeink/mkespfsimage# make clean
rm -f mkespfsimage main.o heatshrink_encoder.o
root@ub:~/work/espeink/mkespfsimage# 
root@ub:~/work/espeink/mkespfsimage# make
cc -I../lib/heatshrink -std=gnu99   -c -o main.o main.c
cc -I../lib/heatshrink -std=gnu99   -c -o heatshrink_encoder.o heatshrink_encoder.c
cc -o mkespfsimage main.o heatshrink_encoder.o
root@ub:~/work/espeink/mkespfsimage# 

 

osx では、gcc に以下を使っていたので出たようです。

HOPE:mkespfsimage junkhack$ gcc --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin13.4.0
Thread model: posix

 

とりあえず、警告は出ていますが、ビルドはされているようなので、スルーします。さて、これで2番目の問題も解決できたはずです。実行してみますと、以下のようになりました。

HOPE:espeink junkhack$ make webpages.espfs
cd html; find | ../mkespfsimage/mkespfsimage > ../webpages.espfs; cd ..
140medley.min.js (74%)
apconnect.bm (15%)
batempty.bm (13%)
connecting.html (95%)
icons.png (100%)
neterror.bm (16%)
style.css (73%)
wifi.tpl (54%)
HOPE:espeink junkhack$ 

HOPE:espeink junkhack$ ll
total 120
-rw-r--r--@  1 junkhack  staff   4946  9 24 21:27 Makefile
-rw-r--r--@  1 junkhack  staff   3261  9 23 15:34 Makefile.patch
-rw-r--r--@  1 junkhack  staff   4960  9 11 00:13 Makefile_org
-rw-r--r--@  1 junkhack  staff    207  9 22 22:32 README
drwxr-xr-x   6 junkhack  staff    204  9 24 21:31 build
drwxr-xr-x   4 junkhack  staff    136  9 24 21:31 firmware
drwxr-xr-x  10 junkhack  staff    340  9 22 22:32 html
drwxr-xr-x   5 junkhack  staff    170  9 22 22:32 icons
drwxr-xr-x  10 junkhack  staff    340  9 22 22:32 include
drwxr-xr-x   3 junkhack  staff    102  9 22 22:32 lib
drwxr-xr-x   9 junkhack  staff    306  9 26 22:08 mkespfsimage
-rw-r--r--   1 junkhack  staff    638  9 22 22:32 mkimg.php
drwxr-xr-x   4 junkhack  staff    136  9 22 22:32 server
drwxr-xr-x  24 junkhack  staff    816  9 22 22:32 user
-rw-r--r--   1 junkhack  staff  31024  9 26 22:17 webpages.espfs★
HOPE:espeink junkhack$

 

★のファイルが生成されていればOK です。

なるほど、これでesp12 の中に入っているweb サーバがこのファイルシステムの中のファイルを読んで表示しているんですね。

やっとこれでhtml が書き込めるはずです。以下のようになりました。

HOPE:espeink junkhack$ make htmlflash
if [ $(stat -c '%s' webpages.espfs) -gt $(( 0x2E000 )) ]; then echo "webpages.espfs too big!"; false; fi
stat: illegal option -- c
usage: stat [-FlLnqrsx] [-f format] [-t timefmt] [file ...]
/bin/sh: line 0: [: -gt: unary operator expected
esptool -cp /dev/cu.SLAB_USBtoUART -cb 115200 -ca 0x12000 -cf webpages.espfs -v
esptool vb64eebd - (c) 2014 Ch. Klippel <ck@atelier-klippel.de>
opening port /dev/cu.SLAB_USBtoUART at 115200
opening bootloader
resetting board
trying to connect
trying to connect
Uploading 31024 bytes from webpages.espfs to flash at 0x00012000
...............................
starting app without reboot
closing bootloader
HOPE:espeink junkhack$ 

 

書き込めてはいるようですが、最初の部分で stat の使い方が悪そうと出ています。おそらくこれは、ファイルがでか過ぎないかどうかを見ているんだと思いますが、とりあえずスルーします。

あとは設定とか、WiFi E-ink とそれを見に行くサーバの設定などとなるはずです。

 

▼まとめ

・ESP12 で動作するWEB は、圧縮されたファイルシステムの中のファイルを見に行く

・そのファイルは、mkespfsimage で heatshrink を使った圧縮で作成される

・osx の find はデフォルト引数なしだと、動作しないので、gnu 版を入れる

・mkspsimage コマンドは、再度コンパイルする。

・ESP12 への書き込みは、ファームウェアは、make flash で書き込む

・ESP12 へのhtml ファイルの書き込みは、make htmlflash を使う

・make htmlflash を使ったとき、ファイルサイズの大きさをチェックしているようですがこれがosx では、動作していない模様

・おそらく書き込みには、Linux を使ったほうが楽です。

 

まだ、良くわからないことがありますが、それは追って調査します。

▼良くわからないこと

・最初の起動時に、192.168.4.1 で mode(3) のステーションで起動してくるが、このときのwifi アクセスポイントに入るパスワードは?

・EPS12 が設定を終えれば、定期間隔でWEB サーバを見に行くが、この処理はどうやればいいのか?

 

推測では、画像のURL を指定すればいける気がします。その画像ファイルは、bm 形式のもので。このあたりは、もう少し調査しないと白黒言えませんが、なんとかいけそうな気がしてきましたので、部品を発注したり、基板を発注したりするかどうか考えて見ます。実際のボードとE-ink ディスプレイがないとこれ以上の確認はちょっと厳しいです。できなくはないですが、あとは現場合わせで楽しんでもいいかなぁと。