ESP-01M(ESP8285) も 2.05V まで粘るぽい

 2ドルでポチって届いた ESP-01M(ESP8285) ですが、データシート の Electrical Specifications によると 公称作動電圧は 2.5〜3.6V ということになっているものの、その少し上にある ADC の説明には

The working power voltage range of ESP8285 is between 1.8V and 3.6V, while
the unit of vdd33_const is 0.1V, therefore, the effective value range of
vdd33_const is 18 to 36.

などと、なんか 1.8V でも動いてしまうようなことを臭わせる記述があります。


 ESP8266 の後継ながらも、世代としては ESP32 よりも新しいぽいということで、ESP32 同様に、2.0V とかで動いてしまい そうな気がするじゃありませんか?
 もし 2.0V 付近で動いてくれれば、乾電池×2直列 の範疇になるので、Bluetooth が不要な用途において、ESP32 と同様に(ESP-WROOM-02よりも)使いやすいモジュールということにになりそうです。


 これは実際に電測してみるしかありませんね。


http://dl.ftrans.etr.jp/?8c0bc0b5d91d47deb7fe2359a4016743f70d61a2.png


 こんな風な、電測のみに特化した回路で実験してみます。

#include <ESP8266WiFi.h>

const char *ssid = "<Set Your SSID>";
const char *pass = "<Set Your Password>";
const char *sendWriteKey = "<Set Your WriteKey>";

const char *sendServer = "api.logoole.etr.jp";

const int adcPin = 0;
const int RA = 30000;
const int RB = 10000;

void send(float Value, float Voltage) {
    WiFiClient  client;
    Serial.print("connecting to ");
    Serial.println(sendServer);
    
    if(client.connect(sendServer, 80))  {
      static int SEQ = 0;
      String postData = "SEQ=" + (String)SEQ;
      postData.concat("&VALUE=" + (String)Value);
      postData.concat("&VOLTAGE=" + (String)Voltage);

      String postMethod;
      postMethod.concat("POST /");
      postMethod.concat(sendWriteKey);
      postMethod.concat(".post HTTP/1.1\n");
      postMethod.concat("Host: ");
      postMethod.concat(sendServer);
      postMethod.concat("\n");
      postMethod.concat("Content-Type: application/x-www-form-urlencoded");
      postMethod.concat("\n");
      postMethod.concat("Content-Length: ");
      postMethod.concat(postData.length());
      postMethod.concat("\n\n");

      postMethod.concat(postData);
      postMethod.concat("\n\n");

      client.print(postMethod);
      client.flush();

      Serial.print(" ");
      Serial.println(postData);

      SEQ++;
    }
}

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  Serial.println();

  Serial.print("WiFi connecting to ");
  Serial.print(ssid);
  WiFi.begin(ssid, pass);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("WiFi connected");
  Serial.print(" IP:");
  Serial.println(WiFi.localIP());
}

void loop() {
  // put your main code here, to run repeatedly:
  float value = analogRead(adcPin);
  float voltage = 1.048576F * value * (RA+RB) / RB / 1024;

  send(value, voltage);
  delay(1000);
}

※ESP8266WiFi.h を include してますが、ボードは「Generic ESP8285 Module」を選択のこと


 ESP32 の時 とほぼ同じ方法で実験してみますね。
 1秒おきに電池電圧を計測して Logoole へ HTTP-POST 送信、という、なかなかヘビーな処理内容です。


 ADC の分解能は10ビット(analogRead() の最大値は、なぜか 1023 じゃなく 1024)で、フルスケールは 1.0V とデータシートに記載ありましたが、実測では 1.024^2(=1.048576) と解釈したほうが妥当な感じだったので、そのような前提で電池電圧を計算しています。
 ちなみに私の固体では ±0.05V 内の誤差でした。


 ESP32 のときには電池に秋月NiMHを投入しましたが、今回も限界まで放置する予定で過放電させる気マンマンなため、普通のアルカリにしましょうか。


http://dl.ftrans.etr.jp/?260ae42e32494718b629aa69c644ba30e630cffe.jpg http://dl.ftrans.etr.jp/?ceaf1ab4545b49c98b42ab53e3abca770b0228ed.jpg


 賞味期限が 04-2005 の MADE IN JAPAN な新品アルカリ電池が出てきました。
 これの一体どこが「普通のアルカリ」だよ?って異論は聞き入れません。
 惜しげなく使い切ってしまいましょう。


 〜 25時間経過 〜


http://dl.ftrans.etr.jp/?69d22619fb994cf1979bcaa595904a524b349daa.png


 電池電圧は 2.1V くらいになりましたが、未だ快調に作動中・・・
(テスターとの誤差は、この電圧域でも ±0.05V の範囲内)


 また続報を書きます。


(追記)2017/11/12 02:30
 電池電圧が 2.05V ←→2.04V 付近をウロウロし始めた頃からシリアル出力に文字化けが始まりました。
 WiFi を使わなければ、もう少し粘る気もしますが、ほぼ、ESP32 と同じ特性と判断してよさそうです。


 analogRead() の生値だと 500←→499 という風なので、上記のとおり 1/4 に分圧しての場合だったら 500 を割ったら電池終了という判断で良いんじゃないかな?
 ちなみに、電池を OFF/ON しても起動できなかったので、いったん動き出したものは 2.05V 付近まで粘るものの起動には最低でも 2.5V くらい必要なんだと思います。


 ESP32 のときと違って ENピン が内部でプルアップされているぽく、どうやって自殺(自分で自分を PowerOff)させるのか
 この辺また精査してみたいと思います。


(追記)2017/11/12
 続きを書きました
 ESP-01M 電源電圧を自己測定して過放電防止