« グローバリゼーション・パラドックス | トップページ | サンノゼ主張(LAXを行くの巻) »

2017.03.20

Dive ESP8266 to Deep Sleep Mode(2)

Free_dive_3shadow


ESP8266の醍醐味は消費電力削減のためのDepp Dive Mode。雑誌トランジスタ技術2016年9月号でESP8266の特集をやってくれたのを契機に、何回もトライしてみましたが、今日まで失敗の毎日。ESP8266はESP32が現れ、なんかスポットライトも小さくなってきている印象。

Blynk Communityでの投稿もみてみた。Vccの測定方法が判るなど、参考になる部分もあるけれど、なんか私の捜している解はみつからず。

これまで、ESP8266のIO16とRSTを20kΩ抵抗でPull Upすることには成功。しかし、ESP.deepSleep()でDeep Sleepモードに突入するものの、以降、センサー情報をBlynkサーバに継続送信することに失敗の毎日。

デバック文を随所に埋め込み、シリアルモニターに出力されるテキストをにらみながら、試行錯誤を重ねた結果、原因が判明。というか、ここか?、ここか?
とソースを少しずつ変更していった結果、わかったことは、
・ESP.deepSleep()はsetup()の中に記述するもの
・そうするとloop()内の処理は実行されない。
・すると、loop()内に記述しているBlynk.run()が実行されない。
・すると、センサー情報をBlynkサーバに送信しているBLYNK_READ()が実行されない。
結論、いままでのやりかたではだめ。
Blynk.run(),BLYNK_READ()を活用した記述を使えない。

どうする?

改善。
BLYNK_READ()の中の記述を分解し、BLYNK_READ()の中で使っているBlynk.virtualWrite()を抽出。新しい関数ReadSensor()を定義し、抽出箇所をこの関数の中にまとめて記述。なおかつ、このReadSensor()は、SimpleTimerライブラリでsetup()内で実行契機を与えるように変更。あわせて、物理的にもJumper Pinを探しだし、Jumper線の長さを自分で整え、IO16とRSTをJumper Pinでの接続に変更し、プログラムの書き込みとリセットもスムーズに、見た目もスッキリ感UP。


成功!!!!
これまでは、loop()内で繰り返し、おおよそ1秒感覚で送信しないと失敗していたのですが、これが、60秒間隔で送信しても成功しました。

ブラボー!!!
家の中で、小躍りしてしまいました。

教訓
やりたいことが抜本的に異なるのであれば、過去の成功に執着せず、ことの本質を見極め、大胆に変更する勇気をもつべし。その方が、全体の見通しも格段によくなり、構成もキレイなプログラムに仕上がる。

|

« グローバリゼーション・パラドックス | トップページ | サンノゼ主張(LAXを行くの巻) »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/3769/65044565

この記事へのトラックバック一覧です: Dive ESP8266 to Deep Sleep Mode(2):

« グローバリゼーション・パラドックス | トップページ | サンノゼ主張(LAXを行くの巻) »