mochimochi000の日記

備忘録です

マンションのオートロックを自動で解錠するVer2

前回作ったもの(下記事)から引っ越しにより改修を加えたので改修箇所を中心に記事にします。

realtek.hatenablog.com

 

主な改修点

ラズパイが話せるようになった

LINE通知できるようになった

イベント検知で駆動できるようにコードを書き換えた

GPIOからシャットダウン・起動できるようになった

 

全体像

全体像

 

 

回路接写

動画Ver

youtube.com

 

ソースコード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)を短絡する

 

・参考

ラズパイでコードを書かずにシャットダウン・電源ボタンを作る - Qiita