SiriにNHKニュースを聞かせてくださいと言ってもなかなかいうことを聞いてくれないので、ラズベリーパイ を使ってボタンを押すと最新のNHKニュースが流れるようにしてみました。
ボタン(スイッチ)動作は先日導入したpigpioを使ってPythonで取得。pigpioは高速なためか、スイッチを押した際に何回かパルスが出てしまうのを全部検出してしまい、ニュースが多重に流れて苦戦しました。色々やったのですが、結局pigpioのライブラリの中にset_noise_filterというものがあるのを発見し、これを使って多重検出は治りました。
#!usr/bin/python # -*- coding: utf-8 -*- import pigpio import subprocess from time import sleep pi=pigpio.pi() pi.set_mode(18,pigpio.INPUT) pi.set_pull_up_down(18,pigpio.PUD_DOWN) pi.set_noise_filter(18,10000,10000) running=0 def cb_interrupt(gpio,level,tick): global running ret=subprocess.Popen(['pgrep','mplayer'],stdout=subprocess.PIPE) if len(ret.stdout.readlines())==0 and running==0: running=1 subprocess.Popen(['sh','/home/pi/pod.sh']) sleep(1) running=0 cp=pi.callback(18,pigpio.RISING_EDGE, cb_interrupt) try: while True: sleep(1) except KeyboardInterrupt: pass pi.stop()
(GPIO18番にスイッチを押すと3.3Vがかかるように回路を組んでいます。)
ニュースはNHKのページからpodracerを使ってcronで毎時30分に取得。
~/.podracer/subscriptions に
http://www.nhk.or.jp/r-news/podcast/nhkradionews.xml
と書いておけば、更新情報を元に音声データファイルをダウンロードしてくれます。
この辺りはこちらのブログhttp://matoken.org/blog/2016/01/28/try-the-cli-of-podcat-aggregator-downloader-of-podracer/を参考にさせていただきました。
Pythonでの処理は、ボタンが押されたら下記のpod.shを走らせるというもの。処理としてはpodracerが作る本日のディレクトリの中のmp3ファイルを最新のものから古い方に順番に並べて、mplayerに送って再生するというもの。amixer 云々は音量調整です、
amixer -c 0 sset 'PCM' 000 today=$(date "+%Y-%m-%d") mkfifo /home/pi/tmp/mplayer-control ls -r ~/podcasts/$today/*.mp3 |xargs mplayer -slave -input file=/home/pi/tmp/mplayer-control > /dev/null_
mplayerは後でコマンドを送ってコントロールできるようにslaveモードで起動しています。そのあたりの情報はこちらなどhttps://ubuntuforums.org/showthread.php?t=1629000を参考にさせて頂きました。