「RaspberryPiで手作り目覚まし時計!ストップボタン編」をやってみた
こちらのWebサイトは移転しました。
今年もよろしくお願いします.
こんな記事見つけて唐突にやってみようと思ったのでチャレンジ.
Raspberry Pi2 Model B ボード&ケースセット (Standard, Clear)-Physical Computing Lab
- 出版社/メーカー: TechShare
- メディア: エレクトロニクス
- この商品を含むブログ (9件) を見る
ハードウェア
配線
今回はGPIOは25番使用してます.
配線がちゃんとしてるかチェック.
GPIOポートの使用開始を宣言.
$ echo 25 > /sys/class/gpio/export
$ echo in > /sys/class/gpio/gpio25/direction
GPIOポートの値を取得しましょ.
$ cat /sys/class/gpio/gpio25/value
スイッチ押してない時コマンド実行で0,押しながら実行で1が出たらOK.
今回音を鳴らすのでスピーカー準備します.
前の自分の記事参考にして設定しました.
調べたら使ってるUSBスピーカーが廃盤になってるっぽいですね.
こちら後継機っぽいですが動作どうなんでしょう...
サンワダイレクト USBスピーカー パソコンスピーカー サウンドバースピーカー ポータブルスピーカー PCスピーカー 400-SP012
- 出版社/メーカー: サンワダイレクト
- メディア: エレクトロニクス
- クリック: 3回
- この商品を含むブログを見る
確実な方法はイヤホンジャックにスピーカーですね.
プログラム
ただ音鳴らすのもひねりがないので音声流します.
使うソフトはAquesTalkPiというRaspberryPi用ゆっくり.
公式からDLします.
AquesTalk Pi - Raspberry Pi用の音声合成
詳しい使い方はこちらが非常に参考になりました.
とりあえず音を出してみますか.
解答したファイル内にAquesTalkPiというファイルがあるので
実行プログラムのあるフォルダ内に設置しておきます.
main.py
#coding:utf-8
import os
import sys
#メイン処理
if __name__ == "__main__":
try:
message = "hello"
os.system('./AquesTalkPi' + message + ' | aplay")
except Exception , e:
print e , "error"
これで実行したらゆっくりボイスでへろーと喋ってくれるはず.
$ python main.py
再生中 WAVE 'stdin' : Signed 16 bit Little Endian, レート 8000Hz, モノラル
mesageを変えれば喋る言葉変えられます.
ストップスイッチ
スイッチ押したら音声が止まるようにしたいっすね.
元記事だと再生用と停止用の2つのプログラム作っていましたが1つでも行けるんじゃないかと思ってチャレンジ.
とりあえずこんな感じでどーよと.
20回再生するうちにスイッチ押されたら終了するイメージ.
main.py
#coding:utf-8
import os
import sys#メイン処理
if __name__ == "__main__":
try:
message = "hello"
sum = 0
os.system('echo 25 > /sys/class/gpio/export')
os.system('echo in > /sys/class/gpio/gpio25/direction')for num in range(1,20):
os.system('./AquesTalkPi' + message + ' | aplay")
sum += num
if os.system('cat /sys/class/gpio/gpio25/value') == 1 :
break
except Exception , e:
print e , "error"
実行したけどうまく止まってくれないっす.
gpioポートのvalueの値を取得できてないっぽいですね.
ここで小1時間悩んで「これPythonじゃなくてshellやんけ」という結論に.
PythonにGPIOポートの値取得するものあるのになぜかPyhon内にshell記述してました.
PythonでGPIOポートの値取得できるので書き直します.
配線
正しい配線はこちら
見にくいかもしれませんが24番ポートを使ってます.
ソース
Python使いました.
#coding:utf-8
import os
import sys
import RPi.GPIO as GPIO
from time import sleep
GPIO.setmode(GPIO.BCM)
GPIO.setup(25,GPIO.OUT)
GPIO.setup(24,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)
#メイン処理
if __name__ == "__main__":try:
message = "hello"
#USBスピーカーの設定 必要に応じて
#os.system('lsusb')
#os.system('sudo alsa unload')
#os.system('sudo modprobe snd_usb_audio')
while GPIO.input(24) == 0 :
os.system('./Voice/aquestalkpi/AquesTalkPi '+ message + ' | aplay')
else :
print "end"
sleep(0.01)
except KeybordInterrupt:
pass
GPIO.cleanup()
GPIOポート使うので sudo つけて実行.
うまくいったっぽいですぞ.
Pythonで書いたらスッキリした感.
他のやつもPythonで実装してみよ.
こちらの本がGPIO周りで非常に参考にさせていただきました.
Raspberry Piで学ぶ電子工作 超小型コンピュータで電子回路を制御する (ブルーバックス)
- 作者: 金丸隆志
- 出版社/メーカー: 講談社
- 発売日: 2014/11/21
- メディア: 新書
- この商品を含むブログ (3件) を見る