クソアプリ Advent Calendar 2016 6日目が放置されていたので、またしょうもないものを作ったので勝手に代打をします
はじめに
トイレでウンコをしているときにブリブリうるさいと嫁に叱られるので、排便の気配が来たら「あーー」と声をだすようにしたところ
「あーーー」っと大声で注目を集めた挙句にブッブーとおならサウンドを聞かせるだけだったので別の手段を講じることにした。
Amazon Dash Buttonを使って、音声ファイルが再生できれば「音姫」をDIYすることが出来るのではないかというわけで
Amazon Dash ButtonとRaspberry PiでGet Wildを再生できるようにした。
※ ちなみにオレはライブに行くくらいのTMNファンである
Raspbery Piの環境
- ラズパイ本体: Raspberry Pi typeB
- アナログスピーカー
- OS: raspbian jessie
mp3の再生
mp3の再生にvlcをインストール
sudo apt-get install vlc
コマンドラインでmp3再生
カレントディレクトリにあるGet Wildのmp3ファイル(getwild.mp3)をVLCで再生する
cvlc getwild.mp3
ここで、スピーカーから「ふんふんふーん ふふんふーん」とイントロが聞こえてきたら成功
もしHDMIに画面出力している場合、アナログ出力に音声の出力先を換える
amixer cset numid=3 1
Amazon Dash Buttonの設定
Amazon Dash ButtonをiTunesプレイヤーにしてみた の Amazon Dash Buttonの同期 の辺りを参考すると良い。
ざっくりいうと、通常通りAmazon Dash Buttonの設定をするが、商品選択のタイミングで設定しなければ良い
Nodeの設定
Amazon Dash Buttonを利用するNode.jsライブラリにdash-buttonを利用した。
必要なライブラリlibpcapをインストール
sudo apt-get install libpcap-dev
npmのインストール
sudo apt-get install npm
dash-buttonのインストール
sudo npm install --save dash-button
Amazon Dash Buttonのマックアドレスをスキャン
よくわかってないがmdash-buttonはAmazon Dash Buttonのマックアドレスを調べて、Amazon Dash Buttonのmacアドレスが通信を発信したのをフックしてコマンドを実行するらしい。その為Amazon Dash Buttonのマックアドレスを取得する。
取得する機能はdash-buttonに含まれている。
package.jsonファイルに下記のようにする
{ "scripts": { "scan": "dash-button scan" } }
スキャン実行
sudo npm run scan # このタイミングでAmazon Dash Buttonを押すと下記の様にマックアドレスが表示される Detected a DHCP request or ARP probe from xx:xx:xx:xx:xx:xx
Get Wild再生プログラム
以下のようにGet Wildを再生するコードをgetwild.jsというファイル名で保存する
const DashButton = require("dash-button"); const PHY_ADDR = "xx:xx:xx:xx:xx:xx"; // ここでマックアドレスを指定 let button = new DashButton(PHY_ADDR); console.log("WILD AND TOUGH'") //実行部 button.addListener(() => { const exec = require('child_process').exec; // execの第一引数にmp3再生のコマンドを記述する exec('cvlc getwild.mp3', (err, stdout, stderr) => { if (err) { console.log(err); } console.log(stdout); }); });
実行
sudo node getwild.js
プログラムが起動したら、Amazon Dash Buttonを押すとこんな感じでWild and Toughだ
Amazon Dash Buttonを押したらGet Wildが流れるようになりました #クソアプリ pic.twitter.com/FiPsMNjNzC
— コンユウ (@kon_yu) 2016年12月11日
課題
- 一回ボタンを押したら、音声を停止できない
- 一階ボタンを押したら、node.jsを再起動させないと、再びボタンを押しても反応しない。これプログラムでどうにかなるのかな?
- node-dash-buttonを使うと上記2つの問題を解決できるかもしれない