ESP8266を電池駆動すると電池の状態がモニタしたくなる。
ESP8266はADCとしてTOUTが一つだけついている。TOUTの入力を無効にすれば、電源電圧(3V3)端子に入ってくる電源電圧が測定できる仕組みがある。これを使用して電池運用中の電池の状態を監視ができる。
どうやるの?
- 電圧測定モードを電源電圧測定モードにする。 以下のコードはコードブロックの中に書いてもエラーになるので注意。(サンプルコード参照)
ADC_MODE(ADC_VCC);
- 測定したいところで、ESP.getVCC()を呼び出す。
int v3 = ESP.getVcc();
値の単位はmVであり、3.3Vであれば3300が返されます。
サンプルコード
#include <ESP8266WiFi.h>
// 電源電圧を測定するためにADCを使うことを宣言
// 本マクロは、コードブロック中に宣言できない点注意
// 本マクロ宣言後、analogRead(A0)は常に1024を返します。
ADC_MODE(ADC_VCC);
void setup() {
Serial.begin(9600);
}
void loop() {
// 電源電圧を取得します。
int v3 = ESP.getVcc();
Serial.println( ":>>"+String(v3));
delay(1000); // Wait for a second
}
注意点
電源電圧測定は、TOUTのADC機能と排他で設定されているため、この機能を使う場合にはTOUTのADC(0-1V)のanalogRead()は使用できず、常に1024が返されます。かつ、TOUTに信号が入力されると、電源電圧の測定値にぶれが出ると思われます(未検証)