ESP-01用のリレーモジュールを使ってみました。5Vなどを3.3Vに変換する回路、リレー、リレーを駆動する回路などが搭載されたモジュールです。ESP-01と組んで、安価なスマートリレーを作れます。OTAに対応したMQTTプログラムを作り、HomeKitから使ってみました。
ESP-01用リレーモジュール
ESP-01モジュールをArduino IDEでプログラムしてHomeKitから使いました。
ESP-01用の各種モジュール
ESP-01は、安価で気軽に使えるので気に入りました。さらにAliExpressやAmazonを探してみると、これを使ったリレーモジュールや、温度・湿度センサモジュールが販売されています。いずれも安価です。
このうち、ESP-01を使った温度・湿度センサーは、同じくらい安価なZigbeeセンサが簡単に入手できるので、わざわざDIYする必要はないと考えました。
一方で、リレーモジュールは、応用の可能性があります。なので試してみることにしました。リレーモジュールは、例えばここでは、ESP-01とのセットで送料込み419円で販売されています。安いです。
ソフトウェア
リレーモジュールをESP-01とセットを購入しても、リレーはぴくりとも動作しないはずです。ESP-01に適切なプログラミングを施さないと何も動作しないという、かなり難易度の高い商品です。格安のWi-Fiスマートリレーだと思って買って、苦労している人がいるのではないかと心配です。
インストールすべきプログラムは、githubなどで公開されています。それを探して、ESP-01にダウンロードすると、AndroidやiPhoneのアプリからリレーをOn/Offできるようです。おそらくはWeb APIで動作するプログラムが配布されているのだと思います。そのAPI経由で、Home AssistantやHomebridgeにも接続できるはずです。
でもここでは、用意されたプログラムは使用せずに、いつものようにMQTTベースのプログラムを作成してHomeKitから使用したいと思います。リレーOn/Offのように少ない情報量を転送するなら、HTTPで動かすよりもMQTTで動かしたほうが、オーバーヘッドが少なく、効率よく高速に動作するはずです。また、HomebridgeとMQTTThingプラグインを使用すれば、MQTTで動作するスイッチアクセサリを簡単に作ることが可能で、HomeKitからすぐに利用できます。
回路図
こちらのgithubサイトでは、回路図が公開されていました。実物と照らし合わせて合致していますので、多分これがリレーモジュールの回路です。
回路図からは、以下が読み取れました。
- ESP-01の電源は3.3Vで、搭載リレーも3.3V動作ですが、5Vで動作するように電圧変換回路が用意されています。変換チップの仕様を調べたところ、5V以上、最大15Vまで対応しているようです。高い電圧を使用すると、3端子レギュレータで熱として消費されるだけなので、普通は5Vで使うことになるかと思います。
- リレーは機械式の3.3Vです。240V10Aまで制御できます。
- リセットスイッチがついています。ESP-01のRSTピンをGNDに接続します。
- リレーはESP-01のGPIO0に接続されています。
- ESP-01とリレー駆動回路の間にはフォトカプラーがついています。ただESP-01とリレーで電源もGNDも共通なので、効果がよくわからないです。もしかしたら、以前は5Vリレーを使っていて、それを制御するために用意された回路なのかもです。ご存知の方いらしたら教えていただけると助かります。
- ESP-01のCH-PD、GPIO0はプルアップされています。なので、ESP-01でも、ピンをプルアップする必要はなく、すぐに動作します。
- モジュールの上には、赤色LEDが搭載されています。リレーが動作すると点灯します。
回路図から読み取れる一番大事な情報は、ESP-01のプログラムの中で、GPIO0をHigh/Lowにセットすれば、リレーがOff/Onするということです。
ESP-01を接続する
前回の記事では、ESP-01搭載の青色LEDをMQTTで点灯・消灯するプログラムを、ESP-01に組み込みました。
このプログラムでは、On/Offするだけの機能を持った電球アクセサリを実装していました。今回は、On/Offするだけの機能を持ったスイッチアクセサリを実装します。なので、ほとんど同一のソースコードで対応できます。
そこで、前回のプログラムが入ったままのESP-01をリレーモジュールに取り付けました。このプログラムでは、OTA経由でのプログラム更新機構も動作しているので、変更箇所は、後からWi-Fi経由で書き換えれば良いと考えました。
プログラムを変更する
そこで、Arduino IDEでこのプログラムを変更しました。とはいえ、GPIO1を制御していた部分を、GPIO0に書き換えるだけです。その変数名もblueLEDからrelayに変更したので、結局ハイライトした4行を変更しました。これをOTA経由でESP-01に書き込みました。
#include <EspMQTTClient.h>
#include <ArduinoOTA.h>
EspMQTTClient *client; //instance of MQTT
const char SSID[] = "xxxxxxxx"; //WiFi SSID
const char PASS[] = "XXXXXXXX"; //WiFi password
char CLIENTID[] = "ESP8266_8465"; //something random 何でも良いです
const char MQTTADD[] = "192.168.xxx.xxx"; //Broker IP address
const short MQTTPORT = 1883; //Broker port
const char MQTTUSER[] = "";//Can be omitted if not needed
const char MQTTPASS[] = "";//Can be omitted if not needed
const char SUBTOPIC[] = "mqttthing/esp8266";
const int relay=0;
void setup() {
pinMode(relay,OUTPUT);
client = new EspMQTTClient(SSID,PASS,MQTTADD,MQTTUSER,MQTTPASS,CLIENTID,MQTTPORT);
}
void onConnectionEstablished() {
ArduinoOTA.setHostname("ESP8266_OTA");
ArduinoOTA.setPasswordHash("3294................105f4241e");
ArduinoOTA.begin();
client->subscribe(SUBTOPIC, onMessageReceived); //callback for subscription
}
void onMessageReceived(const String& msg) {
if(msg.compareTo("true")==0) digitalWrite(relay,LOW);
else if(msg.compareTo("false")==0) digitalWrite(relay,HIGH);
}
void loop() {
ArduinoOTA.handle();
client->loop();
}
GPIOを変更した以外は、前回の記事と同じです。MQTTトピックスをサブスクライブして、そこに送られるメッセージに従って、リレーをOn/Offします。
HomeKitから使う
今回も、Raspberry Pi上のMosquittoとHomebridgeを利用して、HomeKitから操作できるように設定します。HomebridgeからMQTTに対応するためにMQTTThingプラグインを使用します。
この環境で、Homebridgeの設定ファイルに以下の記述をすると、MQTTメッセージでOn/Offするスイッチアクセサリを定義できます。(これもハイライトしたtypeとnameを変更しただけです)
{
"type": "switch",
"name": "ESP01REL",
"topics": {
"setOn": "mqttthing/esp8266"
},
"accessory": "mqttthing"
}
この結果、iPhoneやMacのホーム.appに、スイッチアクセサリが現れます。タップまたはクリックすると、On/Off状態が切り替わり、これに連動してリレーがOn/Offします。下の写真では、リレーモジュール右上の赤色LEDが点灯/消灯していることがわかります。
Macのホームで操作した際の動画も撮影しましたのでご覧ください。ホームのボタンをクリックすると、リレーが動作して、赤色LEDが点滅します。リレーの動作音も録音されてます。
使いどころ
このリレーモジュールを何に使うかと考えると、使い所が難しいです。例えば、壁スイッチ、照明器具、プラグなどに組み込んで、100V電源をOn/Offし、スマート照明やスマートプラグを安価にDIYすることも可能です。ただ、市販の製品、
がありますので、そちらを使った方が簡単です。価格も何倍も違うわけではありません。
その一方で、
- 100ボルト以外の電源のOn/Offをしたい
- センサーやネットワークと連携したOn/Off動作を実現したい
などの場合には、ハードウェア作成の手間が省けるので、利用価値が高いかと思います。例えば、
では、12Vブザーを鳴らすHomeKit対応のセキュリティシステムをDIYしました。このリレーモジュールを使えば、ハードウェア工作無しで実現できたと思います。
またこちらでは、
石油ファンヒーターの延長ボタンにフォトリレーを接続して改造しました。このリレーモジュールを使えば、フォトリレー周辺の配線作業を省略できたと思います。
3.3Vでも動作する
このリレーモジュールは、5Vで動作するように電圧変換回路が組み込まれています。ただ、リレーも3.3V用ですので、3.3Vの電源(ACアダプターなど)が用意できれば、変換なしで動作します。実際にESP-01の3.3Vに電源供給したところ、問題なくリレー動作しました。電圧変換回路は発熱して電力ロスしますので、可能ならば3.3V動作させるのが良いと思います。こちらの記事では、下の写真のようにジャンパー線を追加して、3.3V動作するように改造しました。
まとめ
ESP-01用のリレーモジュールを使い、MQTTメッセージによりOn/Offするプログラムを作成しました。OTAにも対応しています。MQTTThingプラグインを入れたHomebridgeにより、HomeKitからスマートリレーとして操作できました。
今回使った製品の他に、リレーを2個、または4個搭載する製品もあるようです。リレーが多数必要な際には、使ってみたいと思います。
コメント