前回の改良で、バッテリーをダイソーの300円モバイルバッテリー(2000mAh)に変えて長時間駆動化を計りましたが、ベランダの温湿度計はBlynkに加えてthinger.ioにもデータを上げていることもあってか、思っていたよりも早くバッテリーが切れて1日ぐらい放置されていました。
やっぱりバッテリーが切れそうになったことがわかる仕組みが欲しい...と、いうことで、やってみることにしました。
ESP8266の電源電圧の測り方
ESP8266で電源電圧を計るにはグローバルスコープに次のコードを書いて
ADC_MODE(ADC_VCC);
計りたい場所で次のコードを書きます。
ESP.getVcc()
モバイルバッテリーで電源を供給している場合でも、ボードのレギュレーターで電圧変換された値が取得できますが、バッテリーが減ってくる状況がモニターできずにいきなり電源が断たれるため実用的ではありません。
バッテリーが減ってくる状況をモニターするには、ESP8266モジュールに直接電源を供給できる3V台のバッテリーを使用する必要があります。
ちょうど100均で1.2V(単三1300mAh)のニッケル水素電池が売られているのを見つけたので、これを3つ使うようにしてみました。
電圧のモニターと通知の仕方
電圧のモニター(表示)にはLabeled Value Widget、通知にはNotification Widgetを使用して次のような感じでレイアウトしてみました。
Labeled Valueの設定
Notificationの設定
スケッチの追加
前回のスケッチに以下のコードを加えました。
・電圧閾値と通知メッセージの定義、ADCモードの設定
// Voltage
#define LIMIT_VOLTAGE 3.0
#define TEXT_VOLTAGE "Low Battery!"
ADC_MODE(ADC_VCC);
・電圧チェック関数
/*
* Check VCC
*/
void checkVcc() {
float vcc = ESP.getVcc() / 1024.0;
// Push Notification
if (vcc < LIMIT_VOLTAGE) {
Blynk.notify(TEXT_VOLTAGE);
}
Blynk.virtualWrite(V8, vcc);
BLYNK_LOG2("Voltage:", vcc);
}
電圧チェック関数をsendSensor()関数内で呼び出せば、温度や湿度を計測するタイミングで電圧も計測して電圧が閾値より低下すると通知されるようになります。
おわり