乗車日記

自転車ときのこ

NHKニュース

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を参考にさせて頂きました。

次は音声認識でコントロールできるようにしたいですね。