はじめに
この記事では、リレーモジュールをRaspberry Pi、Arduino、ESP32から制御する方法をまとめます。最初は豆電球やLEDのような低電圧の負荷で、COM、NO、NCの動きとGPIO制御を確認します。リレーモジュールが使えるようになると既存機器のIoT化へ応用できますが、 初めてのリレーモジュールでいきなりコンセントのAC100Vを扱うのは大変危険です。 ここではまず、事故の起きにくい電子部品を使ってリレーモジュールを扱ってみます。
この記事で使うもの
まずは リレーモジュール と マイコンボード、それから ブレッドボード と ジャンパーワイヤ があれば試せます。いきなりAC100V機器をつながず、最初はLEDや豆電球で確認するのが安全です。
リレーモジュールを検索結果から選ぶときは、まず 5V駆動、1ch、High/Lowトリガーの仕様、フォトカプラ有無、端子台の形を確認します。Raspberry Pi で使う場合は GPIO が 3.3V なので、IN 端子が 3.3V 信号で反応するか、別電源の 5V と GND 共通で使えるかも見ておくと安心です。AC100Vを扱う用途では、リレー接点の定格だけでなく、ケース、絶縁、ヒューズ、端子処理まで別途考える必要があります。
リレーを動かしてみよう
図のように配線を組んで、実際にリレーを動かしてみました。皆さんも回路を組んで実際に遊んでみることをおすすめします。
- スイッチを通じてプラス5Vを、リレーモジュールのINへ繋ぐ
- DCマイナスは電源のマイナス端子へ繋ぐ
- DCプラスは直接プラス5Vを繋ぐ
上記のように配線したら、スイッチのオンオフを切り替えてみましょう。スイッチを切り替えるたびに、ウィンカーみたいなカチカチ音が聞こえたでしょうか?これはリレーのスイッチが切り替わる音です。この音が聞こえればリレーは正しく動作できてます。次はこの回路に豆電球を取り付けて光らせてみましょう。
豆電球をリレーで光らせよう
次に豆電球を用意して、リレー制御で光らせてみましょう。図のように電池と豆電球をリレーモジュールに繋ぎました。

COMとNOに豆電球を繋いだ場合、 スイッチをオンにすると豆電球が光り、スイッチをオフにすると消灯します。 つまり、スイッチをオンにすることでリレーモジュールのCOMとNOが導通します。
それでは、COMとNCに豆電球を繋ぎ変えてみましょう。今度は スイッチをオンにすると豆電球は消灯し、スイッチをオフにすると光る ようになりました。
ここまでの動作から次のことがまとめられます。
- COM(コモン)共通の端子
- NO(ノーマリーオープン)は、リレーコイルに電流が流れていない時にCOMとの間が開いている
- NC(ノーマリークローズ)は、リレーコイルに電流が流れていない時にCOMとの間が閉じている
Raspberry Piでリレーモジュールを使う
それではこれから Raspberry Pi を使って リレーモジュール を動かしていきます。
トリガーの仕様
今回使用したリレーモジュールのトリガー(IN)へ流す電流は、 5mA 程度あれば十分です。また電圧は 3〜5Vの範囲 で入力が可能です。 Raspberry Piの GPIOは1つあたり10mA程度 まで電流を出力できます。そして 全体で30mA程度 までとなります。また、 GPIOの出力電圧は3.3V です。 たくさんのリレーを繋ぐときは消費電流に気をつけましょう。今回はひとつだけの実験ですので、GPIOを直接リレーモジュールのトリガーへ繋ぎました。 ちなみに今回使用したリレーモジュールはジャンパピンが存在し、Low側にするとトリガー電圧を0〜1.5Vに変更できるようになっていました。
Raspberry Piとリレーモジュールの配線
こちらがRaspberry Piとリレーモジュールの配線図になります。GPIO17をリレーモジュールのトリガーへ繋ぎました。

豆電球をリレーモジュールで点滅させるPythonプログラム
リレーモジュールで豆電球を点滅させるプログラムをPythonで書いてみました。車のウインカーと同じような速さでスイッチがオンオフする演出をしてみました。
import RPi.GPIO as GPIO
from time import sleep
RELAY_PIN = 17
GPIO.setmode(GPIO.BCM)
GPIO.setup(RELAY_PIN, GPIO.OUT)
while True:
GPIO.output(RELAY_PIN, True)
sleep(0.35)
GPIO.output(RELAY_PIN, False)
sleep(0.35)
いかがだったでしょうか?うまくリレモジュールは動きましたでしょうか? リレーモジュールの仕組みが分かれば動かすのはとても簡単です。また、豆電球を光らすことができれば、考え方としてはAC100Vのコンセント制御にもつながります。ただし、AC100V側は感電や火災につながるため、ケース、絶縁、端子台、ヒューズ、接地などを含めて別物として考えた方が安全です。この記事の範囲では、まず低電圧の負荷で確実に動作を確認します。
Arduino(ESP32)でリレーモジュールを使う
ここからはArduinoの互換機であるESP32で、リレーモジュールをつかう方法を解説します。
リレーモジュールのおさらい
前半で紹介したリレーモジュールの使い方のおさらいです。

リレーモジュールの端子役割は次の通りです。
| 端子 | 意味 | 説明 |
|---|---|---|
| COM | コモン | 共通の端子 |
| NO | ノーマリーオープン | リレーコイルに電流が流れていない時にCOMとの間が開いている |
| NC | ノーマリークローズ | リレーコイルに電流が流れていない時にCOMとの間が閉じている |
| IN | トリガー | Highの入力信号を与えればリレーコイルが動作する |
| DC- | リレーコイルの電源 | GND |
| DC+ | リレーコイルの電源 | 5V |
上図の左側に制御したい機器をつなぎます。右側にはリレーコイル用の5V電源をつないで、マイコンボードのGPIOピンでIN端子を制御します。上図では、制御信号をSW(スイッチ)として表現してます。 リレーコイルを通電させた時の消費電流を測定してみると、 5Vで70mA程度 でした。
ESP32とリレーモジュールの配線
ESP32とリレーモジュールの配線です。リレーモジュールの使い方があいまいな方は、いきなり家電などのAC100Vを接続しないようにしてください。配線間違いを起こして機材が壊れる可能性がありますし、危険です。
ここではLEDを使って、ESP32内蔵の5V電源で動かしてみることにします。

「ウインカー風Lチカ」するソースコード
次のソースコードは、一定間隔でリレーモジュールをオンオフするだけのシンプルなプログラムです。
#include <Arduino.h>
/**
* @brief Relay <--> ESP32 の配線
* DC+ <--> 5V
* DC- <--> GND
* IN <--> GPIO14
* COM <--> 330Ω--LED--5V
* NO <--> GND
*/
#define TRG_PIN 14
void setup() {
Serial.begin(115200);
pinMode(TRG_PIN, OUTPUT);
}
void loop() {
digitalWrite(TRG_PIN, HIGH);
delay(350);
digitalWrite(TRG_PIN, LOW);
delay(350);
}
実際にESP32とリレーモジュールを配線して、上記のプログラムを実行した様子を下の動画でご覧いただけます。
リレーのオンオフされる音が、ウインカーにそっくりなんですよね。実際に、昔のウインカーはリレーで動かしていたため、あのような音になっていたそうです。今では電子制御らしく、わざわざスピーカーでウインカー音を鳴らしているのだとか。それにしてもウインカーの音ってなぜか心地よいですよね。癒されます♪
関連記事
関連アイテム
この記事と同じように低電圧の実験から始めるなら、検索結果では次の条件を優先すると選びやすいです。
| アイテム | 選ぶときの確認ポイント |
|---|---|
| リレーモジュール | 5V駆動、1ch、High/Lowトリガー、3.3V信号対応、端子台の作り |
| Raspberry Pi / ESP32 | GPIO電圧、5V電源の取り方、ピンヘッダ実装済みかどうか |
| 配線部品 | ブレッドボード、オス・メスのジャンパーワイヤ、低電圧の確認用LEDや豆電球 |
