スマートメーター?を作る(工作編)

※Arduinoの環境構築とボードへの書き込み部分はすっ飛ばしていきます。

組み立て

部品がそろったので、組み立てていきます。
回路はSeeed RecipeにあるNodeMCU(ESP8266)のレシピを参考にしました。

ESP8266 IoT Energy Monitor

なお、ThingSpeakを利用するとWEB上から出力データが閲覧できるようになります。
ThingSpeakを使用しない場合は、プログラムのコメントアウト部分を解除することで
簡単にArduinoのシリアルモニタにデータ出力をできるようになっています。

ESP8266-EnergyMonitor-Z

NodeMCUそのままでは配置が違うので、ESP-WROOM-02で動くように作り替えました。
表面にESP-WROOM-02を載せるため、裏面にスズメッキ線と半田ブリッジで配線しています。

電源に関しての注意

電源は3.3Vが必要なのですが、FT232RLからでは電流が不足し起動に失敗することがあります。
そのため、別途電源を取る部分が必要となってきます。
自分はRaspberry Pi Zeroの3.3Vから取って問題なく動いています。

計測プログラム

プログラムはレシピ作成者のwhatnick氏がgithubに公開しているソースを使用します。

ESP8266 Energy Monitor Real Power

主に修正が必要な場所は以下の3ヵ所です。

String apiKey = "XXXXXXXXXXXXXXXX";
const char* ssid = "xxxxxxxxxxxxx";
const char* password = "xxxxxxxxxxxxxxxx";

apiKeyにはThingSpeakの書き込みできるAPIキーを記入し
ssid/passwordには利用する環境のWifiアクセスポイントのSSID、パスワードを記入します。

DeepSleep機能

IO16とJP1の部品を実装しておくと、より省電力のDeepSleep機能を使うことができます。
DeepSleep機能を使う場合はJP1にジャンパピンをつけてショートさせ
プログラムの最下部にあるdelay(20000);を以下のように書き換えます。

ESP.deepSleep(20 * 1000 * 1000 , WAKE_RF_DEFAULT);
delay(1000);

※USB充電器から電源を取った場合、DeepSleep時の消費電力が少なすぎるため
電源の供給が止まり、DeepSleepから目覚めないことがあります。
DeepSleepで電源供給が止まった場合は、通常のdelay(20000);に戻して下さい。

次回は取り付け編です。