WiFiコールベル あなたごはんよ!の製作
投稿日 2026年01月07日

WiFiを使用した屋内WiFi環境用コールベル
ESP8266を使用し、UDPを使用したソケット通信を行う
プッシュボタン、LED、ブザーを2ペア搭載 双方向のコール(ハンドシェイク)ができる
コールベルというと来客を知らせるためにホテルのフロントや飲食店のレジ前に設置する卓上ベルのことですが、ここでは一般家庭の少し離れた部屋間で使うことを想定した屋内WiFi環境用コールベルです。WiFiを使用しているので、ルーターのWiFi電波が届く部屋であれば、どこでも設置できます。インターホンとは違い会話はできませんが、用途に応じてLEDランプを点灯させ、ブザーを鳴らすことができます。奥さんがキッチンから書斎のご主人を呼び出したり、ベッドで寝ている人がナースコールのように使えます。最近はルーターのWiFi電波が家中に行き届いているのが普通ですから、接地場所を選ばないと言えます。
使用したマイコンはESP8266です。Arduino互換でWiFiを搭載している便利なマイコンです。ArduinoはWiFi関連のサンプル・スケッチ(プログラム)が豊富ですので、WiFi通信部分はそれほど苦労なく作れます。今回のコールベルにはプッシュボタン、LEDランプ、ブザーを2ペアー装備していますので、それぞれに意味づけして、相手を双方向で呼び出すことができます。たとえば一方のボタンは「ごはんですよ」と、奥さんが書斎のご主人を呼び出すことに、もう一方のボタンは書斎のご主人が、「ちょっと来てくれる」と奥さんを呼ぶなどと意味づけしたりして使用します。一方を「すぐに来て」、もう一方を「10分以内に来て」などと意味づけして使ってもよいでしょう。
設定
WiFiコールベルには、使用する環境のWiFiルータのSSIDとパスワード、IPアドレスを設定しなければなりません。ここでは二台のWiFiコールベルの一方をAとし、もう一方をBとします。
例えば、以下の例のように同じWiFiルータ下の場合はSSIDとPWDは同じで、IPアドレスだけを異なるものにします。
A側
SSID "aterm-8a46w3-g 設置されているルータに合わせる
PWD "621a7v8cd8266" 設置されているルータに合わせる
WiFiルータのIPアドレス 192.168.1.1 設置されているルータに合わせる
ネットマスク 255.255.255.0 環境に合わせる
自分の IPアドレス 192.168.1.224 使われてなさそうなアドレスを使用
相手の IPアドレス 192.168.1.225
B側
SSID "aterm-8a46w3-g 設置されているルータに合わせる
PWD "621a7v8cd8266" 設置されているルータに合わせる
WiFiルータのIPアドレス 192.168.1.1 設置されているルータに合わせる
ネットマスク 255.255.255.0 環境に合わせる
自分の IPアドレス 192.168.1.225 使われてなさそうなアドレスを使用
相手の IPアドレス 192.168.1.224
IPアドレスは固定方式になっていますので、屋内で使用しているパソコンなどで使われていないIPアドレスを設定します。この例のように最後の桁(第4オクテット)を255までの大きい値にすればほとんど他と重なることはないでしょう。なお、UDPのポート番号は5000を使用しています。
WiFiルータは設定にもよりますが、通常AP(アクセス・ポイント)モードまたはブリッジ・モードでつながっている場合は、SSIDが異なっていてもつながります。たとえば、電波が弱い部屋に補助的にWiFiルータを設置している場合などではそのSSIDに合わせます。A側とB側が異なるSSID/PWDでも構いません。
使用する前に、以上のようにESP8266のファームウェアにこれらの情報を書き込まなければなりません。WiFiコールベルには書き込み器は内蔵されていないので、書き込み器を用意して、Arduino IDEから書き込みます。書き込み器は一般的なUSB-RS232変換モジュールを使用してCOMポートから書き込みます。WiFiコールベルの蓋を開ければ書き込み用のソケットが用意されているのでTXDとRXDをつなぎます。内部のENボタンを押しながらRESETボタンを押して、書き込みモードにします。
使い方
実演動画
まずRESETボタンを押します WiFiにつながったらLED、ブザーが2秒間鳴ります
ボタンを押す(呼出し)と相手のLEDが点滅しブザーが鳴ります
相手がボタンを押す(応答)と、ブザーが止まり、LEDが点灯に変わる(応答確認)ので、呼んだ側がボタンを押せば終了です
呼出しと応答を別々のボタンで行うこともできます
電源はDC5Vから12VくらいのACアダプタで供給します。電流容量は500mAもあれば十分です。内部のレギュレータで3.3Vに変換しています。
電源を入れてしばらく(5秒くらい)待つとLEDが点灯しブザーが鳴り、2秒後消灯しブザーが止まります。この時点でWiFiに接続されています。これで初期状態です。LEDが点灯せずブザーも鳴らない場合はWiFi接続に失敗しています。その場合はSSIDやPWDが合っているか、他で同じIPアドレスが使われていないか、WiFi電波が来ているかを確認します。
RESETボタンを押すことによりいつでもWiFiコールベルを初期状態にし、WiFi接続をやり直すことができす。RESETボタンを押した場合も、LEDが点灯しブザーが鳴り、2秒後消灯しブザーが止まり、WiFiに接続された状態になります。
WiFiコールベルには二組のボタン、LED、ブザーが搭載されています。一方をボタン1、LED1、ブザー1とし、もう一方をボタン2、LED2、ブザー2とします。LED1は緑、LED2は赤です。ブザー1の音色は高く、ブザー2は低くしてあります。それぞれ別々に同時双方向で動作します。双方向とは、奥さんがご主人を呼ぶことも、ご主人が奥さんを呼ぶこともできるということで、ハンドシェイクするので呼んだ側は相手が応答したことを知ることができます。
基本は奥さんがボタン1を押すと、ご主人のLED1が点滅し、ブザー1が鳴る(これでご主人が呼ばれていることを知る)ということですが、ご主人がそれに気づいてボタン1を押せば、LED1が点灯に変わりブザー1が止まります。ほぼ同時に奥さん側のLED1も点灯に変わって、ご主人が応答したことがわかります。このように奥さんとご主人は簡単なハンドシェイクを行います。そのハンドシェイクをふたつのボタン(1または2)で別々に同時に行うことができます。
もうすこし、具体的に説明します。ここで奥さん側をA、ご主人側をBと表現します。
また、同じ操作でBからAを呼び出すこともできます。
初期状態(電源を入れた直後やRESETスイッチを押した場合)、LEDが消灯しており、ブザーが鳴っていない状態が初期状態です。
ハンドシェイク開始
(これはA側がBを呼び出す例ですがA/B入れ替えても同じです。 ボタン1でも2でも同じで、同時でも動作します。)
A側:Bを呼び出すためにボタンを押す
LEDが点滅する
(ここでB側が応答する前にもう一度ボタン1を押すと取り消すことができる)
B側: LEDが点滅し、ブザーが鳴る
呼び出されていることに気づき、応答するためにボタンを押す
LEDが点灯に変わりブザーが止まる
A側:点滅していたLEDが点灯に変わり、Bが応答したことがわかる
ボタンを押す
LEDが消灯する
B側:LEDが消灯しAが認識したことがわかる
ハンドシェイク終了
次に、
ふたつのボタンでハンドシェイクすることもできます。
つまり一方のボタンで呼出し、もう一方のボタンで応答する方法です。
A側がボタン1(2)で呼出した場合、B側はボタン2(1)で応答します。
逆にB側がボタン1(2)で呼出した場合、A側はボタン2(1)で応答します。
ハンドシェイク開始
(これはA側がBを呼び出す例ですが A/B入れ替えても同じです。ボタン1/2を入れ替えても同じです。)
A側:Bを呼び出すためにボタン1を押す
LED1が点滅する
(ここでB側が応答する前にもう一度ボタン1を押すと取り消すことができる)
B側:LED1が点滅し、ブザー1が鳴る
呼び出されていることに気づき、応答するためにボタン2を押す
LED1が消灯し、ブザー1が止まる
LED2が点滅する
A側:LED1が消灯する。
LED2が点滅し、ブザー2が鳴る
Bの応答を認識したのでボタン2を押す
LED2が点灯に変わりブザー2が止まる
B側:LED2が点灯に変わり、Aの認識を知る
ボタン2を押す
LED2が消灯する
A側:LED2が消灯する
ハンドシェイク終了
以上のように双方向で使えるコールベルと言えます。使い方は自由です。
実装

内部の様子
電源はDC5Vから12VのACアダプタ
内部のレギュレータで3.3Vに変換
コールベルの機能はESP8266のWiFi通信機能を利用し、お互いのIPアドレスとUDPポートを介したソケット通信てメッセージをやり取りすることで実現しています。家庭内に設置されているWiFiルータのSSIDとパスワードで、ルータとのコネクションをとります。その後の通信はコネクションレスのUDPでメッセージのやりとりを行います。WiFi電波が届く範囲であれば使用することができます。異なるルータが設置されている場合は、同一ネットワークになるように設定されていなければなりません。
設定でも説明しましたが、プログラムのソースコードには、以下の設定が必要です。括弧 () 内は例。
FiFiルータ SSID (atermxxxxxxxx) ルータに合わせる
WiFiルータ Password (123456789) ルータに合わせる
WiFiルータのIPアドレス(192.168.1.1)
自分のIPアドレス (192.168.1.224) 固定IP 使われていないアドレスを使用
相手のIPアドレス (192.168.1.225) 固定IP 使われていないアドレスを使用
ネットマスク (255,255,255,0)
UDPポート番号 (5000) 任意
WiFiのUDPを使用した双方向通信はArduinoのスケッチ例を参考にすれば簡単に作ることができます。ハンドシェイクのアルゴリズムは手順をステート番号などにして、ステートマシンを設計することになります。
ボタンとLED、ブザーは2組です。これはESP8266の使えるGPIOが6本しかないためです。他のESPであればもっと増やすことができます。ブザーが無くてよい場合は、ボタンとLEDを3組にできます。今回は以下のようにしました。
const int SW1 = 16;
const int LED1 = 12;
const int BUZZER1 = 14;
const int SW2 = 4;
const int LED2 = 13;
const int BUZZER2 = 5;
ESP8266の場合これらのGPIOポート以外は使えません。BUZZERは、使用したブザーが矩形波を与える必要があるのでPWMで使っています。二つのブザーの周波数は高低異なるようにしています。
このようなコールベルのような機器は製品化されて販売されていると思いますが、ESP8266などを有効利用する一例として取り上げました。当局では、母屋と離れが分かれていますので重宝しています。このようなコールベルを使えば簡単に相手を呼び出すことができます。
(JF1VRR)


