LoginSignup
19
17

More than 5 years have passed since last update.

amazonDashButtonで、ラズパイジュークボックスを作った件

Posted at

背景

  • AmazonPrimeDayで、DashButtonが100円!?だったので、2個も買っちゃいました
  • プライム会員万歳
  • IoTをかじってみたい

=>インターネットラジオの再生/停止ボタンとして改造してみよう

筆者の環境

  • RaspberryPi 3.0ModelB
    • すでにnode.jsがインストールされている
  • USBスピーカ
  • Mac Book Pro (ssh接続用)

tl;dr

  • DashButtonの初期注文と初期設定
  • プラグインのインストール
  • DashButtonからのARPをlistenするスクリプト作成
  • ラズパイ起動時に自動実行されるよう設定

DashButtonの初期注文と初期設定

まずは届いたAmazonDashButtonを、自宅のWifiにつなげて初期設定を行う

AmazonDashButtonによる自動注文は、初回に限り、DashButtonの購入代金が割引されるので、無駄にしないように、初回の注文は行いましょう

  1. iPhoneの、Amazonアプリの左メニューから、アカウントサービス>(ページ下部)新しいDashButton端末の割り当て
  2. DashButtonが、点灯するまで長押し
  3. アプリが自動で接続を試みる
  4. 初回は、wifiのパスを聞かれるので入力
  5. 商品を設定しよう(500円引きされるので、500円以上がオススメ)
  6. ここまで終わったら、一度DashButtonを押下
  7. iphoneなりメールなりで、自動で注文ができたことが通知されるか確認
  8. ここで、DashButtonを工場出荷時に戻しましょう
  9. Amazonアプリの左メニューから、アカウントサービス>(ページ下部)端末の管理から、DashButtonの設定をリセット
  10. 再度、DashButtonを長押しし、アプリで接続をすると、前のwifiパスが効いてるのでパスが省略されるはず(※ここで商品を選択してはいけない)

ここまでできたらOK

プラグインのインストール

DashButtonを操作するプラグインは複数あるのですが、超有名どころなide/dash-buttonを使ってみたいと思います

$ cd {環境を構築したいディレクトリ}
$ npm install --save dash-button
$ vi package.json               //package.jsonというファイルを新規作成する

ここで、以下の内容を記述する

{
  "scripts": {
    "scan": "dash-button scan"
  }
}

追記したあと、以下のコマンドを叩く

$ sudo npm run scan    //AmazonDashButtonの検索を開始

> @ scan /home/pi/amazon_dash
> dash-button scan

Scanning for DHCP requests and ARP probes on wlan0...

// この間に、DashButtonを押下する
// うまく検出されると、以下のような感じで表示される

Detected a DHCP request or ARP probe from {DashButtonのMACアドレス}

ここの{DashButtonのMACアドレス}をメモしておくこと

DashButtonからのARP(ようわからんけど)をlistenするスクリプト作成

node.jsで実行させるスクリプトを作成

ほとんどこちらを参考にしました(汗

myapp.js

const DashButton = require("dash-button");

// 今回は2台をセットアップしました
const PHY_ADDR = "??????";
const PHY_ADDR_2 = "??????";

let button = new DashButton(PHY_ADDR);
let button2 = new DashButton(PHY_ADDR_2);

button.addListener(() => {
  console.log("My name is ["+PHY_ADDR+"]. I'm listening.");
});

button2.addListener(() => {
  console.log("My name is ["+PHY_ADDR_2+"]. I'm listening.");
});

で、これを、起動

$ node my app.js

権限云々で怒られたので、sudoで実行

$ sudo node my app.js

DashButtonを押して、出力がされれば、動作確認OK

んで、音楽を流す音源は、インターネットラジオからchiptuneを流す前回の記事から、chipbitを使っています

apt-get install mplayer
// 出力されているか確認
mplayer http://stream.chipbit.net:8000/live

jsからコマンドラインを実行するスクリプトを含めると、最終形態はこんな感じ

myapp.js
const DashButton = require("dash-button");

const PHY_ADDR = "???????";
const PHY_ADDR_2 = "???????";

let button = new DashButton(PHY_ADDR);
let button2 = new DashButton(PHY_ADDR_2);

// こちらのボタンは、音楽を再生するためのボタン
button.addListener(() => {
  console.log("My name is ["+PHY_ADDR+"]. I'm listening.");
  const exec = require('child_process').exec;
  exec('mplayer  http://stream.chipbit.net:8000/live', (err, stdout, stderr) => {
    if (err) { console.log(err); }
    console.log(stdout);
  });
});

// こちらのボタンは停止させるためのボタン
button2.addListener(() => {
  console.log("My name is ["+PHY_ADDR_2+"]. I'm listening.");
  const exec = require('child_process').exec;
  exec('killall mplayer', (err, stdout, stderr) => {
    if (err) { console.log(err); }
    console.log(stdout);
  });
});

この状態で、
node my app.jsで起動して、DashButtonを押してみましょう!
再生されるはずです

ラズパイ起動時に自動実行されるよう設定

まず、node.jsの実行パスをメモ

$ which node

etc/rc.localに、以下のコマンドを追加

# set MyMusic 
sudo -u pi sudo {先ほどメモしたnode.jsのパス}/node {環境構築したディレクトリ}/myapp.js

これで、自動で起動されるはずです、

課題/所感

  • 一つのボタンで、再生/停止の管理をやりたい
    • 一つのクリックで複数回検知されることがあるので、断念(前回実行時間の域値をつければ可能だが,,,)
  • 意外とサクッとできて驚き  - 海外で見たガレージの開閉/ピザの注文も、案外簡単にいけそう
  • なぜか20分ぐらいすると、突然強制終了する(泣泣泣

参考サイト

19
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
17