ESP-01用リレーモジュールをHomeKitから使う

DIYする

ESP-01用のリレーモジュールを使ってみました。5Vなどを3.3Vに変換する回路、リレー、リレーを駆動する回路などが搭載されたモジュールです。ESP-01と組んで、安価なスマートリレーを作れます。OTAに対応したMQTTプログラムを作り、HomeKitから使ってみました。

ESP-01用リレーモジュール

ESP-01モジュールをArduino IDEでプログラムしてHomeKitから使いました。

ESP8266 (ESP-01) をArduino IDEで使う(1: Lチカ編)
これまで、ESP32を使ってHomeKitで動作するアクセサリをDIYしてきました。ESP32の下位モデルにESP8266があります。シンプルなアクセサリならばESP8266でも作れますし、市販のスマートプラグ、スイッチ、センサー類にはES...

ESP-01用の各種モジュール

ESP-01は、安価で気軽に使えるので気に入りました。さらにAliExpressやAmazonを探してみると、これを使ったリレーモジュールや、温度・湿度センサモジュールが販売されています。いずれも安価です。

このうち、ESP-01を使った温度・湿度センサーは、同じくらい安価なZigbeeセンサが簡単に入手できるので、わざわざDIYする必要はないと考えました。

Zigbee温度湿度センサー (675円)をHomeKitで使う
Zigbeeを使った安価な温度湿度センサを入手しました。AliExpressで送料込みで648円でした。Zigbee2MQTTで問題なく認識され、HomeKitから使用することができました。以前、安価な磁気接触センサを紹介しました。 これと...

一方で、リレーモジュールは、応用の可能性があります。なので試してみることにしました。リレーモジュールは、例えばここでは、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に組み込みました。

ESP8266 (ESP-01) をArduino IDEで使う(3: MQTT編)
前回、ESP8266を搭載したESP-01を、Arduino IDEでプログラミングできるよう設定し、OTAによりプログラム更新しました。今回は、MQTTメッセージをパブリッシュ、サブスクライブしてみます。OTAも引き続き有効にします。 以...

このプログラムでは、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することも可能です。ただ、市販の製品、

中性線なしで使えるZigbee壁スイッチをHomeKitで使う
AliExpressでZigbee方式の壁スイッチを買いました。Zemismartという会社の物理スイッチ方式の製品です。設置したところ、中性線の配線無しでLEDシーリングライトをon/offでき、またZigbee2MQTTとHomebri...
Zemismartの薄型Zigbee壁スイッチをHomeKitで使う
Zemismartから出ている新しいZigbee壁スイッチを取り付けました。旧製品と同様にZigbee2MQTTにリンクしてHomebridge経由でHomeKitから使えました。薄型でシンプルでかっこいいです。 Zemismartの新しい...
Zigbee壁スイッチモジュールをHomeKitで使う
Zigbeeで動作する壁スイッチモジュールを使ってみました。本来は、ヨーロッパ・中国規格の壁スイッチに組み込んで、スマートスイッチ化するためのモジュールです。既存の壁スイッチをそのまま流用するので、違和感がないです。 壁スイッチモジュール ...
Sonoffの日本市場向けZigbeeスマートプラグをHomeKitで使う
SonoffのZigbeeスマートプラグを使ってみました。Zigbee2MQTTでサポートされているので、Homebridgeのプラグインを使って、HomeKitからすぐに利用できました。技適もPSEマークも付いていて日本市場に対応してます...

がありますので、そちらを使った方が簡単です。価格も何倍も違うわけではありません。

その一方で、

  • 100ボルト以外の電源のOn/Offをしたい
  • センサーやネットワークと連携したOn/Off動作を実現したい

などの場合には、ハードウェア作成の手間が省けるので、利用価値が高いかと思います。例えば、

HomeKitでスマホ通知機能付きセキュリティシステムを作る
人感センサ、扉開閉センサなどのHomeKitアクセサリに連動するセキュリティシステムをHomebridge / HomeKitで作りました。HomeKitで定義されているSecurity Systemsカテゴリのアクセサリとして動きます。家...

では、12Vブザーを鳴らすHomeKit対応のセキュリティシステムをDIYしました。このリレーモジュールを使えば、ハードウェア工作無しで実現できたと思います。

またこちらでは、

石油ファンヒーターを改造して「延長」ボタンを自動で押す
石油ファンヒーターには、消し忘れ防止機能があり、運転開始後3時間で消火してしまいます。これを回避するためには、「延長」ボタンを押す必要があります。これが面倒なので、ファンヒーターの中にESP32を組み込んで、人の代わりに延長ボタンを押しても...

石油ファンヒーターの延長ボタンにフォトリレーを接続して改造しました。このリレーモジュールを使えば、フォトリレー周辺の配線作業を省略できたと思います。

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個搭載する製品もあるようです。リレーが多数必要な際には、使ってみたいと思います。

コメント

タイトルとURLをコピーしました