このレポジトリは、クランプ式電流センサーのためのコード一式をまとめたものです。エッジ側の ESP32 のための Arduino のコードとサーバ側の Python のコードの両方を含んでいます。データの通信には MQTT を利用しますので、Mosquitto 等の Message Broker の準備が必要になります。なお、こちらのコードは以下のブログ記事とリンクしたものになります。
https://note.com/ds_kotaro/n/nfaf4f6f1344e
主なディレクトリは、以下の通りです。コードはサーバ側かエッジ側か、あるいは分析用のノートブックかでディレクトリを分けています。
このディレクトリには、エッジ側のコードを配置しています。基本的には Arduino IDE で power_sensor_mqtt.ino を開いて、コンパイルすれば OK です。WiFi や MQTT等の各種の設定は、同じディレクトリにある Parameters.h にて行います。Arduino IDE のインストール等については、他に詳しいサイトがありますので、適宜参照して下さい。
このディレクトリには、サーバ側のコードを配置しています。 基本的には Python のコードで、次のようにして実行することで、エッジ側からのデータを CSV へロギングすることができます。
./recorder.py config.ini
あるいは
python3 recorder.py config.ini
MQTTに関する設定は、同じディレクトリにある config.ini にて行います。Python の環境構築に関しても、幾つもブログ記事等がありますので、ぜひそちらを参照して頂ければと思います。基本的には Python をインストールした後で、次のような感じにすれば OK なはずです。
Linux の場合:
python3 -m venv venv
source ./venv/bin/activate
pip install -r requirements.txt
Windows の場合:
python3 -m venv venv
./venv/scripts/activate
pip install -r requirements.txt
こちらのディレクトリには、Jupyter Notebook を配置しています。
ESP32 のコードで使用している「フィルタ係数の計算」や「取得したデータの可視化」に使った Notebook を置きました。
プログラムを動かす際には、まず次のパラメータを決めて下さい。
- mqtt_client_id
- mqtt_topic_base
client_id は、デバイスの名前で複数のデバイスを区別するために使います。基本的には何でもかまわないですが、仮にここではデバイスが2つあるとして、"x1", "x2" という名前をそれぞれ付けることにします。
また、mqtt_topic_base を仮に "home/data/power" としておくことにすると、ESP32 の方の設定ファイル(Parameters.h)は次のような感じになります("x1" として名前を付けた方)。
const char* wifi_ssid = "xxxxx";
const char* wifi_password = "xxxxx";
const char* mqtt_client_id = "x1";
const char* mqtt_topic_base = "home/data/power";
const char* mqtt_endpoint = "xxx.xxx.xxx.xxx";
const int mqtt_port = 1883;
const char* mqtt_user = "xxxxx";
const char* mqtt_password = "xxxxx";
このように設定すると、実際に ESP32 が MQTT でデータの送信するトピックは自動的に "home/data/power/x1" という風に設定されるようになります。また、データを受信する側の設定ファイル(config.ini)は、次のような感じになります。
[info]
client_id = x1
[mqtt]
topic_base = home/data/power
endpoint = xxx.xxx.xxx.xxx
port = 1883
user = xxxxx
password = xxxxx
このように設定したとき、recorder.py は "x1" として名前を付けたデバイスから送信されたデータのみを受信するようになります。その他の MQTT のパラメータについては、一般的なものと一緒ですので、詳細は省略します。
設定ファイルで設定できるのは、ソフトウェア周りのものだけですので、ハードウェアの構成を変更する際には、PowerSensorMQTT.h の以下の辺りを適宜修正して下さい。
const int baud_rate = 115200;
const int pin_ref = 2;
const int pin_ch1 = 3;
const int pin_ch2 = 4;
const float R = 51.0;
const float I_ratio = 2000.0; // Ratio of currents
const float V_mean = 100.0; // AC voltage in Japan
例えば、同じクランプ式の電流センサーでも検出する際の電流比が異なる場合がありますので、ご注意下さい。
基本的にこちらのコードは自由にお使い頂くことができますが、直接・間接を問わず、こちらのコードに起因する事故・損害等については一切責任を負うことができませんので、各自の責任の範囲内でご利用下さい(感電の可能性のある電圧ですので、十分に注意して作業して下さい)。