過去の記事は下記となります。
Raspberry Piでパトランプを作成① 概要
これから5回に渡って、下記求める仕様の部分をどのように実現したか記載して行きます。
求める仕様
- アラートを音と光で伝えてくれる <- 今回はこちら
- snmptrapを受信
- 安定稼働
- 自前のコンパネにて設定変更が可能
音の部分
下記写真にある通り、USBスピーカをモノラル化して流用しております。
http://www2.elecom.co.jp/multimedia/speaker/ms-w11u/
組み込み系では、電流がどれ位流せるか、サウンド再生であれば
デコーダ等を検討する必要があるのですが、Raspberry PiはUSBデバイスをそのままつなげるので
とても楽です、但しあまりに大きな電流の流れる物は
保護回路により制限されるそうなのでご注意下さい。
制限値は基板のリビジョンによっても違いがあるそうです。
光の部分
コンセントに挿し夜になると光ってくれるインテリアライトを使いました
裏のコンセントプラグを引っこ抜いた部分でケーブル取り回しが良い感じです。
Raspberry Pi GPIOの電流制限に引っかからないように
IOポート一つに付きLEDを1個駆動します。(計2個)
中身の基板を流用したかったため表面実装部品等は全て取り去り
LEDを無理やり実装の上、ホットボンドで固定しました。
サウンドを再生しLEDを点滅させる
次回記述しますが snmptrapd より下記スクリプトをキックする事で挙動を実現しています。
失敗談
PythonでのRaspberry Pi GPIO制御用ライブラリ読み込みにお気をつけ下さい!
気づくのに丸1日掛かってしまいましたが
Raspberry Pi なので RPi <- iだけ小文字でした... orz
1 2 |
## 誤 import RPI.GPIO as GPIO |
1 2 |
## 正 import RPi.GPIO as GPIO |
処理の中心部分のみ記載しました、詳細はgithubへどうぞ
https://github.com/tktk19/Patlam-pi/blob/master/bin/trap_receive.py
class Alart(): def __init__(self): # GPIOの設定 GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) GPIO.setup(23, GPIO.OUT) GPIO.setup(24, GPIO.OUT) def __sound(self): # サウンド再生コマンドをバックグラウンドで実行します sound_file = os.path.join(patlam_pi.app.config['SOUNDDATA'], "ALARM.WAV") cmd = "/usr/bin/aplay " + sound_file + " &" os.system(cmd) def __light(self): __led_blink_count = patlam_pi.get_setting('LEDBlink') i = 0 while i < int(__led_blink_count): # LED2つを0.5秒間隔でUI設定回数分点滅させます GPIO.output(23, True) GPIO.output(24, True) time.sleep(0.5) GPIO.output(23, False) GPIO.output(24, False) time.sleep(0.5) i+=1 def fire(self): self.__sound() self.__light() if __name__ == '__main__': alart = Alart() alart.fire()
ソース
作成したプログラム及び、Raspberry Piの配線図、Raspbianへ実施した設定は下記を参照下さい。
https://github.com/tktk19/Patlam-pi
ムービー
8/25更新・掲載致します。