マンションのオートロックを自動で解錠するVer2
前回作ったもの(下記事)から引っ越しにより改修を加えたので改修箇所を中心に記事にします。
主な改修点
ラズパイが話せるようになった
LINE通知できるようになった
イベント検知で駆動できるようにコードを書き換えた
GPIOからシャットダウン・起動できるようになった
全体像
全体像
動画Ver
ソースコード(GitHub)
GitHub - tech0x86/raspi3B-doorOpen: auto lock unlocker
ラズパイが話せるようになった
OpenJtalkを利用して任意の音声を話せるようになりました。
jtalk.shのシェルスクリプトをpythonからコールしてます。
jtalk.sh
#!/bin/bash
tempfile=`tempfile`
option="-m /usr/share/hts-voice/mei/mei_happy.htsvoice \
-x /var/lib/mecab/dic/open-jtalk/naist-jdic \
-ow $tempfile"
echo "$1" | open_jtalk $option
aplay -q $tempfile
rm $tempfile
main.py
import subprocess
def jtalk_script(message):
subprocess.run([PATH_JTALK +" "+message],shell=True)
・参考
Raspberry Pi(ラズパイ)を音声合成で日本語をしゃべらせてみた!(OpenJTalk) | りけろぐ
・
LINE通知できるようになった
LINE Notifyで来訪等を通知できるようになりました。
TOKENは下記コマンドでOSの環境変数化しています。
export LINE_TOKEN=XXXX
main.py
import requests
LINE_NOTIFY_TOKEN = os.environ.get("LINE_TOKEN")
LINE_NOTIFY_API = "https://notify-api.line.me/api/notify"# line に通知する
def send_line_message(notification_message):
headers = {"Authorization": f"Bearer {LINE_NOTIFY_TOKEN}"}
data = {"message": f" {notification_message}"}
r = requests.post(LINE_NOTIFY_API, headers = headers, data = data)
print(r)
time.sleep(1)
・参考
Pythonで、LINEにメッセージを通知する方法【LINE NOTIFY】 | ラズパイの実
イベント検知で駆動できるようにコードを書き換えた
前作の無限ループで状態をチェックするのもあまりスマートではないため、割り込み関数的な処理に変更。(以下の関数)
GPIO.add_event_detect(PIN_CDS, GPIO.RISING, callback=light_detected, bouncetime=5000) # 割り込み関数
ただ、誤作動が結構ある。。
GPIOからシャットダウン・起動できるようになった
プログラムがフリーズ等してもタクトスイッチを押すことでOSを安全にシャットダウン・起動できるようになった
下記ファイルの最終行に追記
/boot/config.txt
dtoverlay=gpio-shutdown
回路上でGPIO 3 (ピン番号 5) と GND (ピン番号 6)を短絡する
・参考