CR2032 コイン電池で動く ESP8266 ロガーを作ってみた(Running ESP8266 by one coin cell)

投稿者: | 2016/09/16

Built an ESP8266 Wi-Fi logger which runs by one CR2032 coin cell.  Theoretically the battery can last up to 4 months if it periodically operate one HTTP communication an hour.

Wi-Fi というのは電気を食うので、コイン電池で動かすには難ががあると考えられていますが、試みとして、ESP8266 をコイン電池 CR2032 ひとつで動かす Wi-Fi ロガーを作ってみました。応用として、土壌水分センサーを取り付け、鉢植えの監視をさせてみたいと考えています。リチウム充電池や AC 電源ではやや不安ですが、CR2032 であれば発火等の危険が少ないかな、というのが応用の背景です。(電気二重層キャパシタは内部抵抗が小さいので、短絡させないように注意が必要ですが。)

電気二重層キャパシタを搭載してみる

コイン電池(リチウム一次電池)CR2032 は内部抵抗が大きいので、そのまま ESP8266 を動かそうとすると電圧降下が気になります。そこで、電気二重層キャパシタを 2つ並列に入れてみました。

試作ボード上の、他の搭載部品としては、

  • 動作モニタ用の LED。GPIO2 から点滅制御できます
  • deep-sleep 復帰回路。IO16 ピンを RST 端子に繋ぐことで、deep-sleep 後に自動回復します
  • リセットスイッチ。deep-sleep 中にボタンを押すと、スリープから手動でも回復できます
  • 外部電源端子と切替スイッチ
  • 電流測定用のプローブ端子。0.1Ωの抵抗器を入れてありますが、短絡もできます

動作確認

さて。無事にコイン電池だけで動作するのでしょうか?  まず、先日の起動時間測定プログラムを改造して、最後に

import esp
esp.deepsleep(1000000 * 60)  # 60秒の deep-sleep

を追加しました。これにより、以下のシーケンスを繰り返すようになります。

  1. Wi-Fi の接続
  2. HTTP リクエスト
  3. 60秒の deep-sleep
  4. 復帰

なお、DHCP は使わずに手動で IP アドレスを設定するようにし、HTTP サーバーは LAN 内にあるローカルのものを使って評価してみます。

ボードに搭載した電流プローブを使って、オシロで電流プロファイルを見てみました。次のような感じです。

黄色い線(?)が消費電流で、青い線がそれを時間軸で積分したものです。定常電流はだいたい 80mA で、積算電流は 0.15C(クーロン = アンペア秒)くらいのようです。

CR2032 の端子間電圧はおおむね 3.0V ですが、HTTP リクエスト後に deep-sleep に入る直前の電池端子間電圧は 2.74V くらいまで低下します。かなり厳しい数値ですが、HTTP リクエストは正しく動作し、また deep-sleep から 60秒で復帰します。(なお、蛇足ですが ESP8266 の SDK では deepsleep の API に 32ビットの unsigned int を与えるようになっているらしく、最大の deep-sleep 時間は 4294秒程度なります。)

なお、DHCP を使ってリモート(海外の)HTTP サーバーで評価してみたところでは、一回の動作で必要な積算電流は 0.5C くらいになるようです。(動作時間が  1.4秒ではなく 4秒近くになるため)

どれくらいの間、CR2032 で動作可能か

さて。問題は CR2032 でどれくらいの期間、動作が可能か、というところかと思います。Wikipedia によると、CR2032 の電池容量は 225mAh となっています。またパナソニックの資料でも 220mAh となっているので、これをクーロンに換算すると 810C(クーロン)程度となります。単純計算すると、上記の 0.15C のサイクルの 5400回分となりますので、一日に 24回程度の動作(通信間隔 1時間)であれば、7.5ヶ月程度は動作できる計算になります。

しかし、ここで問題になるのは CR2032 の放電特性と ESP8266 の低電圧特性です。

コイン電池の放電特性

CR2032 の容量 225mAh は小さな放電電流で定義されているものと考えられます。実際に Energizer 社の資料(PDF)によると、標準負荷は 15kΩとなっています。今回の使い方では、80mA 程度の電流が流れますから、負荷に換算すると40Ω程度となります。(実際には電気二重層キャパシタからのバックアップがありますが。)

資料の 100Ω 負荷のグラフを見ると、今回測定した端子間電圧 2.74V はそれに近いような印象です。また Energizer 社の資料にはパルス放電負荷の一例として、2.0V 終止電圧としたときの 165mAh というグラフがあります。今回の使い方でも、同じくらいの電池容量になると考えると、実際には 5ヶ月(165 / 220 * 7.5)程度というところでしょうか。(なお、後述の通り deep-sleep 時の消費電流が 16uA 程度ありますので、それを加味すると 4ヶ月程度、となります。計算式は省略します。)

ESP8266 の低電圧特性

さて。上記で CR2032 の終止電圧を 2.0V で見ていましたが、ESP8266 のデータシートを見ると、電源電圧は 3.0〜3.6V とありますので、かなり絶望的な印象です。しかし実際の評価では 2.7V 程度まで電圧が下がっても ESP8266 が動いているように見えますので、手持ちの電源装置を使って実測評価してみました。

その結果、ハードリセットを伴う場合でも 2.1V 程度の電圧があれば起動し、また、deep-sleep からの復帰であれば 2.0V 程度でもギリギリ復帰できそうな感触を得ました。(半導体部品ですので、ロット差や個体差はあると思います。また、将来のシリコンリビジョンでは特性が変わる可能性もあります。)

なお、電圧 2.0〜2.1V でも、きちんと Wi-Fi 接続して HTTP の応答を得られています。ESP8266 の低電圧特性は、データシートの公称値よりもかなり良い印象です。

deep-sleep 時の消費電流

ESP8266 のデータシートでは、deep-sleep 時の消費電流は 10uA とうたわれています。私のボードで実測したところでは、16uA 程度であることを確認しました。deep-sleep だけであれば、CR2032 で 1年半くらい動作する計算です。

結論

実際には、実環境で評価してみないとなんとも言えませんが(ギャフン)、今回試作した ESP8266 ロガーでは、CR2032 のコイン電池でも数ヶ月程度は動作する可能性があります。今後、新品の CR2032 を使って何ヶ月くらい動作するか、フィールド評価してみたいと思います。

今日はここまで。