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にも対応しているようなので。