コンユウメモ @kon_yu

作ったガラクタとか、旅行とかの話

Amazon Dash ButtonでGet Wildな音姫をDIY

クソアプリ Advent Calendar 2016 6日目が放置されていたので、またしょうもないものを作ったので勝手に代打をします

はじめに

トイレでウンコをしているときにブリブリうるさいと嫁に叱られるので、排便の気配が来たら「あーー」と声をだすようにしたところ

「あーーー」っと大声で注目を集めた挙句にブッブーとおならサウンドを聞かせるだけだったので別の手段を講じることにした。

Amazon Dash Buttonを使って、音声ファイルが再生できれば「音姫」をDIYすることが出来るのではないかというわけで

Amazon Dash ButtonRaspberry PiGet 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 ButtoniTunesプレイヤーにしてみた の 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 Buttonmacアドレスが通信を発信したのをフックしてコマンドを実行するらしい。その為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だ

課題

  • 一回ボタンを押したら、音声を停止できない
  • 一階ボタンを押したら、node.jsを再起動させないと、再びボタンを押しても反応しない。これプログラムでどうにかなるのかな?
    • node-dash-buttonを使うと上記2つの問題を解決できるかもしれない

参考資料