【ラズパイピコ】Raspberry Pi Pico Wでインターホン呼出しをスマホにLINE通知(スピーカー2階増設の代用)
来客により自宅インターホンの呼び出しボタンが押されて室内機から音が流れても、気付かないことがありました。
室内機が設置されている1階リビング以外の場所(特にドアを締め切った2階の部屋)にいると音が聞こえない場合があるので、違う方法で通知したいと考えました。
今回の記事ではRaspberry Pi Pico Wを利用することで、インターホン呼び出しをLINEでスマホ通知にて受け取り、どこにいても気付けるようにしました。
この方法であれば、外出中でも電波が届く所ならインターホンが鳴ったことがリアルタイムでわかります。
インターホン呼び出し出力によりRaspberry Pi Pico WからLINE通知させる手順
以下の手順で作業を行えばインターホンの呼び出しボタンが押された際にスマホ等にLINE通知が来るはずです。
配線作業等があるので注意は必要ですが、作業自体は難しくありません。
Raspberry Pi Pico Wの初期設定
本作業で使用するRaspberry Pi Pico Wです。
OSがない安価な商品ですが、Wi-Fi機能が備わっているものになります。
パソコンにてRaspberry Pi Pico Wにファームウェアを書き込み、プログラミング言語「MicroPython」を使用できるようにします。
プログラミングの開発環境である「Thonny」をパソコンにインストールし、ソースコードを書き込める準備を行います。
Raspberry Pi Pico Wの初期設定については以下の記事をご参照下さい。
LINE通知用のLINE Notifyの設定
LINE通知させるためLINE Notifyの公式ページで設定が必要です。
ログインしてトークンを発行するためには「PC版サイト」にてログインする必要があります。
LINE Notifyにてトークンを発行する方法については以下の記事をご参照下さい。
インターホン室内機とRaspberry Pi Pico Wの配線接続
インターホン室外機の呼び出しボタンが押されると、室内機のA接点回路が繋がります。
そのA接点回路にRaspberry Pi Pico Wの3.3V出力と、任意の入力用GPIOを接続することで、呼び出しボタンが押されたことをRaspberry Pi Pico Wに認識させます。
その為の配線接続作業を行いますが、電気的な危険を伴う作業なのでご注意下さい。
インターホン室内機と接続できたRaspberry Pi Pico WにはUSBケーブルで電源供給できるようにしておきます。
インターホン室内機のA接点とRaspberry Pi Pico Wを配線で接続する方法については以下の記事をご参照下さい。
お試しソースコードでインターホン呼び出しからのLINE通知確認
上記の準備が整った状態で、インターホンの呼び出しボタンが押されるとLINE通知が来るソースコードを試してみたいと思います。
以下のソースコードをコピーしてThonnyにペーストし、Raspberry Pi Pico Wに「main.py」のファイル名で保存します。
(至らない点もあると思いますがご容赦下さい。)
import machine
import utime
import network, urequests
SSID = 'SSIDを入力'
password = 'passwordを入力'
token = 'トークンを入力'
led= machine.Pin('LED', machine.Pin.OUT)
sw = machine.Pin(16, machine.Pin.IN, machine.Pin.PULL_DOWN)
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, password)
line_header = {
'Content-Type' : 'application/x-www-form-urlencoded',
'Authorization': 'Bearer' + ' ' + token }
line_message = 'message=' + 'visitor'
while(not wlan.isconnected()):
print('connecting...')
utime.sleep(1)
print('connected.')
presw = 0
nowsw = 0
while(True):
nowsw = sw()
if presw == 0 and nowsw == 1 :
led.on()
for num in range(3):
req = urequests.post('https://notify-api.line.me/api/notify', headers = line_header, data = line_message)
req.close()
utime.sleep(0.5)
led.off()
presw = nowsw
print(line_message)
utime.sleep(0.5)
elif presw == 1 and nowsw == 0 :
presw = 0
print('presw = 0')
utime.sleep(3)
else:
led.on()
utime.sleep(0.5)
led.off()
utime.sleep(0.5)
print('wait')
utime.sleep(0.5)
※5~7行目は書き換えが必要です。
「SSIDを入力」には使用するWi-FiのSSIDを入力して下さい。
「passwordを入力」には使用するWi-Fiのパスワードを入力して下さい。
「トークンを入力」にはLINE Notifyで発行したトークンを入力して下さい。
いづれも前後の「’」(ダッシュ、プライム)は残します。
Raspberry Pi Pico WにUSBケーブルで電源を供給すると以下の動作を行うはずです。
このコードでは、電源供給するとWi-Fi接続を開始し、接続が完了すればRaspberry Pi Pico WのLEDが点滅して待機状態に入ります。
その状態でインターホンの呼び出しボタンが押されると数秒間LEDが点灯し、それとほぼ同じタイミングでLINE NotifyからLINE通知が来るはずです。
メッセージ内容も任意で設定できるので、今回は「visitor」としています。
一回の通知では気付けない場合があるのではないかと思い、このコードでは一回の呼び出しにつき連続で3回の通知が来るようにしています。
このコードではWi-Fi接続が不安定になる等の問題によりダンマリしてしまうことがあり、その場合にはLEDが点灯や消灯のままになっているはずなので、電源供給を一度止めてから再投入することで復帰すると思います。
「try-except」文を利用してWi-Fi状態を監視し、切断された場合に再接続する等の工夫をすると上記の問題は解決するかもしれません。
必要に応じて改良してみて下さい。
まとめ
Raspberry Pi Pico Wを利用して、自宅インターホンの呼び出しボタンが押された際にLINE通知が来るようにしてみました。
室内機の呼び出し音が届かない場所にいてもスマホを持っていれば来客に気付けるようになりました。
LINE通知を受け取れる環境があれば、外出中でもインターホンが鳴ったことがわかります。
コメント