「がんばれない」けど「がんばりたい」

ITエンジニアの仕事のこと。AI、機械学習、ディープラーニング。地頭力。車のこと。

RaspberryPi2 |目覚まし時計(1)

音を鳴らす事と、スイッチのON/OFFが取得出来るようになったので、 まとめとして目覚まし時計を作ってみようと思います。

630249faac5c1100_h480


◼イメージ

  • 目覚まし音はcronで定時に鳴らすように設定
  • タクトスイッチを押して目覚まし音を止める

◼︎課題

既に検証済み!


◼︎設計

  • AM7:00に音を鳴らす
  • タクトスイッチを押したら音が止まる
  • タクトスイッチを押さないまま1分間経ってら音が止まる

◼︎音をならす

  • systemコマンドを使用しmplayerコマンドで音を鳴らすPHPプログラムを書きます。
  • ちなみにmplayerはroot権限でインストールしています。

/root/start.sh

<?php
    system('mplayer -loop 0 alerm.mp3 > /dev/null &');

◼︎タクトスイッチ押したら音をストップさせる!

  • AM7:00から1分間タクトスイッチの状態を監視するプログラムを書きます。
  • ON状態になったらsystemコマンドでmplayerの全プロセスをkillすることで音を止めます。
  • 1分間ON状態にならなかった場合も同じくmplayerの全プロセスをkillします。

/root//stop.php

<?php
//0.25秒間隔でタクトスイッチの状態をチェックする
$interval_sec = 0.25;

//計60秒間チェックする
$wait_sec = 60;

system('echo 25 > /sys/class/gpio/export');
system('echo in > /sys/class/gpio/gpio25/direction');
for($i=0; $i<($wait_sec / $interval_sec); $i++){
    if(system('cat /sys/class/gpio/gpio25/value')==1){
     break;
    }
    usleep($interval_sec * 1000000);
    echo $i.PHP_EOL;
}
system('killall mplayer');
system('echo 25 > /sys/class/gpio/unexport');

◼︎CRON設定

  • start.phpとstop.phpの両方をAM7:00に実行するようにします。
  • morning.shというシェルスクリプトに両PHPを記載し、cronでシェルを実行します。

/root/morning.sh

php /root/start.php
php /root/stop.php

crontab

0 7 * * 1-5 /root/morning.sh

mplayer でmp3フォーマット再生時に出るエラー

mplayerでmp3データを再生しようとすると以下ワーニングが出ます。 mpg123をffmpegでデコードしましたと。。これを解決するには、

Requested audio codec family [mpg123] (afm=mpg123) not available.
Enable it at compilation.
Opening audio decoder: [ffmpeg] FFmpeg/libavcodec audio decoders
AUDIO: 44100 Hz, 2 ch, floatle, 96.0 kbit/3.40% (ratio: 12000->352800)
Selected audio codec: [ffmp3float] afm: ffmpeg (FFmpeg MPEG layer-3 audio)
sudo apt-get install libmpg123-0

と、libmpg123-0をインストールして、

$echo “afm=mp3lib” >> ~/.mplayer/config

とすればイイです。

参考URL