Raspberry Piでトイレにクラシック音楽を流す
人がきたら音楽を流す装置をトイレに設置しました(割と好評)
- ケースはRaspberry Piの箱に100均で買った折り紙を貼って作成
- 本体のUSBでBluetoothスピーカーを充電
必要なもの
Raspberry Piと人感センサーの接続
下記ページを確認しながらRaspberry Piと人感センサーを接続
- https://developer.microsoft.com/en-us/windows/iot/docs/pinmappingsrpi
- https://www.mpja.com/download/31227sc.pdf
対応するピン同士をジャンパーワイヤで繋ぐ
人感センサー | Raspberry Pi | |
---|---|---|
+Power | <---> | 5V PWR |
GND | <---> | GND |
High/Low Output | <---> | GPIO18 |
人感センサーで音を鳴らすプログラムの作成
import pygame, os, random, time, RPi.GPIO pygame.init() pygame.mixer.pre_init(44100, 16, 2, 1024 * 4) pygame.mixer.init() pygame.mixer.set_num_channels(8) screen = pygame.display.set_mode((320, 240)) shutdown = False clock = pygame.time.Clock() files = [] active = False last_activated = 0 pin = 18 RPi.GPIO.setmode(RPi.GPIO.BCM) RPi.GPIO.setup(pin, RPi.GPIO.IN) # 入力を検知したあとに何秒間流すか timeout = 30 # 音楽の再生 def play_random_track(): global files # 再生リストがなくなったらmp3ファイルを検索してシャッフル if not files: files = [f for f in os.listdir('./') if f.endswith('.mp3')] random.shuffle(files) # 再生リストから一番最初の音楽をとってきて鳴らす pygame.mixer.music.load(files.pop(0)) pygame.mixer.music.set_volume(1.0) pygame.mixer.music.play() # メインループ while not shutdown: # 入力フラグ active = False # OSイベント処理 for e in pygame.event.get(): # 閉じるボタンやESCキーが入力されたらプログラムを終了する if e.type == pygame.QUIT or (e.type == pygame.KEYDOWN and e.key == 27): shutdown = True break # テスト用:Enterキーで音を鳴らせるようにしておく elif e.type == pygame.KEYDOWN and e.key == 13: active = True continue # 人感センサーからの入力 if RPi.GPIO.input(pin) == RPi.GPIO.HIGH: active = True # 入力があったときの処理 if active: # 入力時間を更新する last_activated = time.time() # 再生してないときは次のトラックを再生 if not pygame.mixer.music.get_busy(): play_random_track() # 最後の入力から一定時間(timeout秒)が経過したら音楽をフェードアウトさせる if (time.time() - last_activated) > timeout: if pygame.mixer.music.get_busy(): pygame.mixer.music.fadeout(5000) pygame.display.flip() clock.tick(5) # 処理負荷を抑える(1秒間に5回ループをまわす) RPi.GPIO.cleanup() pygame.quit()
電源入れたら自動でプログラムが動くようにする
以前の記事と同じ手順で起動時にBluetoothスピーカー接続&今回用意したスクリプトを起動するように修正
pulseaudio -D sleep 5 # 適当にウェイト bluetoothctl << EOF power on connect FF:FF:FF:FF:FF:FF # BluetoothスピーカーのMACアドレス quit EOF sleep 5 # 適当にウェイト pacmd set-sink-volume 1 32767 # 音量調節(デバイス番号、音量~65565) cd otohime python3.4 otohime.py