WiFiコールベル あなたごはんよ!の製作

投稿日 2026年01月07日
更新日 2026年01月14日 テスト機能の追加

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が点灯に変わる(応答確認)ので、呼んだ側がボタンを押せば終了です
呼出しと応答を別々のボタンで行うこともできます
相手とつながっているか確認(テスト)することもできます
(この動画では5秒ディレーは実装されていません。)

電源は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、ブザーが搭載されています。一方をボタンA、LEDA、ブザーAとし、もう一方をボタン2、LEDB、ブザーBとします。LEDAは緑、LEDBは赤です。ブザーAの音色は低く、ブザーBは高くしてあります。それぞれ別々に同時双方向で動作します。双方向とは、奥さんがご主人を呼ぶことも、ご主人が奥さんを呼ぶこともできるということで、ハンドシェイクするので呼んだ側は相手が応答したことを知ることができます。

基本は奥さんがボタンAを押すと、ご主人のLEDAが点滅し、ブザーAが鳴る(これでご主人が呼ばれていることを知る)ということですが、ご主人がそれに気づいてボタンAを押せば、LEDAが点灯に変わりブザーAが止まります。ほぼ同時に奥さん側のLEDAも点灯に変わって、ご主人が応答したことがわかります。このように奥さんとご主人は簡単なハンドシェイクを行います。そのハンドシェイクをふたつのボタン(AまたはB)で別々に同時に行うことができます。なお、呼び出していることが相手に伝わるまで5秒のディレーを入れてあります。この5秒の間に相手と繋がっているかテストすることができます。

もうすこし、具体的に説明します。

初期状態(電源を入れた直後やRESETスイッチを押した場合)、LEDが消灯しており、ブザーが鳴っていない状態が初期状態です。

ハンドシェイク開始
(これは奥さんがご主人を呼び出す例ですが奥さんとご主人を入れ替えても同じです。 ボタンAでもBでも同じで、同時でも動作します。)
奥さん:ご主人を呼び出すためにボタンAを押す
   LEDAが点滅する
   (ここでご主人が応答する前にもう一度ボタンAを押すと取り消すことができる)
ご主人:(5秒後に) LEDAが点滅し、ブザーAが鳴る
   呼び出されていることに気づき、応答するためにボタンAを押す
   LEDAが点灯に変わりブザーAが止まる
奥さん:点滅していたLEDAが点灯に変わり、ご主人が応答したことがわかる
   ボタンAを押す
   LEDAが消灯する
ご主人:LEDAが消灯し奥さんが認識したことがわかる
ハンドシェイク終了

次に、
ふたつのボタンでハンドシェイクすることもできます。
つまり一方のボタンで呼出し、もう一方のボタンで応答する方法です。
奥さんがボタンA(またはB)で呼出した場合、ご主人はボタンB(またはA)で応答します。
逆にご主人がボタンA(またはB)で呼出した場合、奥さんはボタンB(またはA)で応答します。

ハンドシェイク開始
(これは奥さんがご主人を呼び出す例ですが 奥さんとご主人を入れ替えても同じです。ボタンAまたはBを入れ替えても同じです。)
奥さん:ご主人を呼び出すためにボタンAを押す
   LEDAが点滅する
   (ここでご主人が応答する前にもう一度ボタンAを押すと取り消すことができる)
ご主人:(5秒後に) LEDAが点滅し、ブザーAが鳴る
   呼び出されていることに気づき、応答するためにボタンAを押す
   LEDAが消灯し、ブザーAが止まる
    LEDBが点滅する
奥さん:(5秒後に) LEDAが消灯する。
    LEDBが点滅し、ブザーBが鳴る
   ご主人の応答を認識したのでボタンBを押す
   LEDBが点灯に変わりブザーBが止まる
ご主人:LEDBが点灯に変わり、テスト奥さんが認識したことを知る
   ボタンBを押す
    LEDBが消灯する
奥さん:LEDBが消灯する
ハンドシェイク終了

以上のように双方向で使えるコールベルと言えます。使い方は自由です。

接続テスト

相手のコールベルとつながっているかどうかテストすることができます。

奥さんがボタンAを押しLED1が点滅してご主人を呼び出している状態で、5秒以内かご主人が応答する前にボタンBを押すと、ご主人のコールベルが自動的に応答を返し、奥さんのLEDAが点灯に変わります。ここでボタンAを押すとLEDAが消灯します。これでテストは終了です。これはボタンBでも同じです。逆にご主人から奥さんのコールベルとつながっているかをテストすることもできます。5秒以内であれば相手のコールベルは鳴らないので、相手に気づかれずにテストすることができます。テストはボタンAかBの一方で行えば十分です。

実装

内部の様子
電源は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)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA