ED060SC4 のpin 9 と pin 10

ED060SC4のデータシートには、Pin9 と Pin10 はNC とありますが、作者の手書きの図には つながっているようです。

schema_esp

作者のサイトに行くと、どうやらED060SC4のリビジョン違いでNCになっているものとそうでないものがあるようです。FPCケーブルを見ると、そのpin がつながっていないものは、NC でつながっているように見えるものは新しいものかもしれません。

この違いで、作者はロジックアナライザで解析したそうです。

コネクタの位置でいうと、以下の部分です。

aaa

とりあえず、PCB上では配線しておいて、E-ink のものを見て判断するしかないようです。NC のものであればカットすればよいはずです。

aaaa

今のところの理解では、ED060SC4 のリビジョン2であればこのpin は作者のようにつなげば良いはずです。それにしても、このあたりの配線、via が多くなってしまいました。0.3mm 幅でもう少し綺麗に配線しないとですね。自動配線に頼りっぱなしで。

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 Versionmake可否make問題点実際の挙動備考
0.9.2X   
0.9.3X   
0.9.5OなしURL フェッチしない 
0.9.6_b1Xunknown type name ‘uint32_t’

unknown type name ‘uint16_t’

unknown type name ‘uint8_t’

 cgiwifi.c

io.h
1.0.0X同上  
1.0.1b1X同上  
1.0.1b2X同上  
1.0.1Oなし  
1.1.0Xeink.c で使われている

os_update_cpu_frequency

がこのSDKにない

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

conflicting types for ‘os_random’

 user/cgiwifi.c

user/io.h

include/espmissingincludes.h

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

※随時、更新予定。

 

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

smd 0603 の抵抗とコンデンサをぽちった

とりあえず、電子工作のディープな世界に足を突っ込む意気込みとして、SMD の 0603 タイプの抵抗とコンデンサをぽちりました。両方あわせて、9750個もあるのでまぁ死ぬまで持ちそうです。購入店は、いつもお世話になっているパーツ屋さん。ここは好評価で、来るのも速いので。

HTB1S.SQIpXXXXcXXFXXq6xXFXXXx

こんな感じで、本になっているんですね。

HTB1VyOWIpXXXXXSXFXXq6xXFXXXz

そして、まず作るのは、バックブーストの1セル用の電圧回路を作ってみようと思います。

TPS63000 と、TDK のコイルもあわせてゲット。

http://www.tdk.de/company/inductors_coils/e531_vlf4012a.pdf

https://strawberry-linux.com/pub/tps63000.pdf

プリント基板を作成する一歩目のお題としてはライトなので、これをESP8266 向けに設計してみようかと思います。ESP13 もあわせてゲット。大きさは、telec のWROOM02 と同じなので、こっちをこれからメインに使用していこうかと。

ESP8266 でADC 増設するには?

ESPシリーズは、全機種ADC が1ポートなので、アナログ値を読むには何かしら工夫しないといけないのですが、その方法を模索したいと思います。新しい課題です。

 

調査第一段階では、以下のものがあるようです。

ESP8266 Analog Input Expander Library for MCP3021 A/D Conveters

https://github.com/AllAboutEE/ESP8266-MCP3021-Library

これは、tindie で作っているヒトがいるようです。

ESP8266 Analog Inputs Expander (Version 2)

https://www.tindie.com/products/AllAboutEE/esp8266-analog-inputs-expander/

初期リリース版は、4つのMicrochip MCP3021を使っているようですが、Version2では、1ICとなっているようです。このIC は4チャンネルのやつだと思うのですが、型番がよくわかりません。MCP3304 か、MCP3008のTSSOP パッケージかな?ちょっとお尋ね申すことに。

 

とりあえず、回路は簡単そうなので部品を入手して模索してみたいと思います。

ESP13 と BackBoost のPCBを作成中

Eagle の勉強と、PCB をプリントに出すため、まずはお手ごろな素材を元に勉強中。

 

コンセプト

・Lion の1セルに、充電ができて、過充電、過放電保護がある

・充電は、マイクロUSB からできる

・1セルから3.3v を効率よく、安定して作るため、backboost 回路を入れる

・自分が持っている、UART のシリアル変換を直接挿せるようにする

・ケースに入れる都合上、幅を2cm x 6.5cm 未満とする

・UART の PIN は自動的にリセットがかかるよう、DTR からの信号を処理する回路を埋め込む

・バッテリーや、3.3V 出力など後に計測したいので、PINを出しておく

・DeepSleep は必ず使うので、配線しておく

・ブレッドボードに挿せる様、PIN を出しておく

・なるべく安くする

・レゴブロック風のものをジョイントすると機能が拡張できるようにしたい。

 

といういうな、お題を掲げて作っています。

まだ、途中ですが、以下のようなものができてきました。

1

安くあげるため、USB と充電回路(保護付き)は既成のモジュールを使うことに、90円くらいのものです。

この基板をノギスや、スキャナで取ってeagle のライブラリを作成。ここが面倒でした。また、ESP12Eと、ESP13(WROOM-02)と大きさを比べると、ESP13の方が小さく、組み込みやすそうです。

2

今回の目玉である、バックブースト回路は表に載せました。ブレッドボードに指せば裏側に回る予定。真ん中のパッド部分はスルーホールを横に作って、裏側の胴箔に熱伝統させる予定です。

3

裏面に部品が回せるのを知ったので、(Mirrorすれば良いだけですが、、、)上記のような配置にしました。まだ配線は仮なので、これから変わります。

4

左には、UARTのPINを直接させるようメスピンヘッダーをつけます。順番は逆配列にしないとブレッドボードに挿した時LEDとか見えませんので、後に変更予定です。

 

5

回路図は、離れたところにある配線をどうやるのかわからず、あれこれググりました。これはラベルでやるようですが、いまいち良くわかっていません。とりあず、つなぎたいところに、配線を伸ばしNAMEをつけて、ラベルみたいなのは、シンボルがあったので、それを使っています。supply2.lbr というのにありました。たぶんもっといいやり方があるのでしょうが、良くわかりません。機能は満たしているので、今はこれでよしとします。

 

先人たちの回路図を見ると、機能ごとに分離して、見やすくする工夫をしているようです。なので上記のような感じにしてみました。その後、あれこれと思案し、以下のようになっています。まだ途中。

 6

ブレッドボードに挿すPINは最低限のものにしたけれども、案外空きスペースがなくなって来ているので、複雑な回路だと2階建てにする感じになりそう。

 

▼まとめ

・回路図は見やすくするため、機能ごとにわける。

・離れたところを配線するため、NAMEを使い、ラベルをつける

・ラベルは回路図だけに出るライブラリ(supply2.lbr )があるのでそれを使う

・裏面に部品を配置するには、Mirror を使う。

・実際の部品で仕様がわからないものは、スキャニングして大きさを算出。ノギスで実物を計測。

・独自ライブラリを作るには、3ステップ。

New > Library

Package 作成(左から5番目のアイコン)で、PCB基板に実際に付く図形を書く

Simbol 作成で、回路図上で見える図とPINを書く

Device 作成し、上記を対応づけ。Connect でPIN対応づけできる

・部品の配置の際、ルーラをドキュメントレイヤーに置いておくと便利(Metric ruler のLIB)

 

▼不明なこと

・離れたとこにある配線のやりかた。見やすいラベルを同時付け、対応づけるには?

・ESP13のUARTでリセットを自動的に行う回路。いろいろあるようです。現在3種類のやり方を模索。モノがまだ来ていないので着たら検討。

・ESP13 と ESP12のピンの対応づけ表がほしい。 EN は CHPD で、TOUTは、ADCに対応していると考えればよい?

・ESP13はGNDが2つ増え、合計3つ。なので、PIN数がESP13の18PINに対し、ESP12は、16PINということなのか?

 

▼調査すること

・幅、2cmx長さ5cm、暑さ5mmくらいのお値打ちLIONを探す。

・どっかの記事で、ADCはダイオードをかませば、GPIOのピン数分読めるというような英文記事を見たが、あれは本当か?

ESP8266 でADC 増設その2

前回、ADC のアナログ入力を増設する方法として以下を調査していました。

ESP8266 でADC 増設するには?

作者に聞いてみたところ、Version2のICには、MAX11609EEE+ を使っているとの事。16ピンQSOP で、DigiKey で336円くらいのものです。

MAX11609EEE+

datasheet

データシートを見てみると、これは8チャンネルあるようです。通信は、I2Cでいけるようです。

MAX11609EEE

とりあえず、8チャンネルもいらないので、4チャンネルのMAX11607 というのを試しに使ってみようかと思っています。

Aliexpress で価格を調査すると、4ch8ch も値段がほとんど変わらないようです。1個400円ちょい。

 

他にも、I2C で ADC はいろいろあるようで、たとえば、TIの4チャンネルなんかの ADS7924IRTER は供給量も多いようです。

 

標準で付いている、ADC も工夫すればGPIO 分のアナログリードができるようなのでそれを試してみてから考えたいと思います。

ダイオードをつけて、計測前にGPIO x ピンをHigh にしてADC 値を読むという原理です。 Lua のサンプルコードでそんなロジックが書いてありました。なるほどーですね。

 

で、手持ちのダイオードがなぜか見つからず、ジャンクのマザーボードからチップダイオードを採取してユニバーサル基板につけたところまで今、作業が進んでいます。