ポンコツ備忘録

日々の何かを忘れないように書いていきます

「RaspberryPiで手作り目覚まし時計!ストップボタン編」をやってみた

こちらのWebサイトは移転しました。

今年もよろしくお願いします.

 

こんな記事見つけて唐突にやってみようと思ったのでチャレンジ.

deviceplus.jp

 

 

 

 

ハードウェア

配線

 

今回は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.

 

今回音を鳴らすのでスピーカー準備します.

前の自分の記事参考にして設定しました.

 

shinogasa.hatenablog.com

 調べたら使ってるUSBスピーカーが廃盤になってるっぽいですね.

こちら後継機っぽいですが動作どうなんでしょう...

 

 

確実な方法はイヤホンジャックにスピーカーですね.

 

プログラム

ただ音鳴らすのもひねりがないので音声流します.

使うソフトはAquesTalkPiというRaspberryPi用ゆっくり.

公式からDLします.

AquesTalk Pi - Raspberry Pi用の音声合成

 

 詳しい使い方はこちらが非常に参考になりました.

blog-yama.a-quest.com

 

とりあえず音を出してみますか.

解答したファイル内に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周りで非常に参考にさせていただきました.