LoginSignup
2
2

More than 5 years have passed since last update.

Amazon Dash Buttonを秒数当てゲーム機に改造

Last updated at Posted at 2016-12-10

Amazon Dash Buttonとは

photo

 要はボタン押すだけでアマゾンの商品を注文できるボタン。ボタンが押されてから商品が届くまで、次の注文ができないので、連打は無効になっている。
 ただし、なんでも注文できるわけではなく、洗剤やシャンプーなどの何回も買い替えが生じる消耗品が対象。1つのボタンに設定できるのは1商品だが、個数とか別の種類も選択可。アメリカでは2015年に発売されており、日本では2016年12月上旬に販売された。現時点(2016年12月10日)では、42種のボタンが販売されており、人気なものに関しては最長2ヶ月待ちとなっている。(AmazonDashButtonの購入ページ)
 余談になるが、Amazonの最初の社名は「Cadabra.com」だったが、あるとき電話口で「Cadaver(死体の意)?」と聞き返されたため、社名を変更したという。

環境

・Mac OS Sierra 10.12.1

流れ

1.Finkのダウンロード
2.libp-capをapt-get
3.nodebrewインストール
4.Nodeをインストール
5.パッケージインストール
6.Dash Button Wifiスキャン
7.Deploy

環境構築

1.Finkのダウンロード

ライブラリを使うときにapt-getでインストールしたいので、Finkを使います。(apt-getしないでインストール出来る方法わかる方いたら、教えてください。。。)
ここから入手できます。
XCodeがすでに入ってるのであれば、インストールしたfinkのフォルダから、ターミナルで./bootstrapと打つと、基本設定を行います。結構時間かかります。30分くらい?

2.libp-capをapt-get

こちらのページを参考に、ライブラリをapt-getします。

Terminal
sudo apt-get install libpcap-dev

3.nodebrewインストール

nodeのバージョン管理として有名なのが、nvmとnodebrew.
今回はnodebrewを使って管理します。
別にnvmでも可能.
↓のコマンドを叩きます

Terminal
$ curl -L git.io/nodebrew | perl - setup

すると、nodebrewのインストールが始まります。

Terminal
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0
  0     0    0     0    0     0      0      0 --:--:--  0:00:02 --:--:--     0
100 24340  100 24340    0     0   6400      0  0:00:03  0:00:03 --:--:--  166k
Fetching nodebrew...
Installed nodebrew in $HOME/.nodebrew

========================================
Export a path to nodebrew:

export PATH=$HOME/.nodebrew/current/bin:$PATH
========================================

.zhercに上記のexporet~部分を記載

.zshrc
export PATH=$HOME/.nodebrew/current/bin:$PATH

設定を読み込み
$ source ~/.zshrc
これでnodebrewのインストールが完了されたはずです。nodebrew -helpとかで確認してみましょう。コマンド一覧みたいなのが出てきます。

4.Nodeをインストール

続いてNode.jsのインストールします。

Teminal
nodebrew ls-remote

これで取得可能なnodeのバージョン一覧が出てきます。
インストール方法ですが、2通りあって、nodebrew install <Version>またはnodebrew install-binary <version>というコマンドで、後者のうほうが早かったりするので、後者でインストールしてみてください。
その他、最新版をインストールするときは、nodebrew install latest、安定版をインストールするときはnodebrew install stableとします。
その後、nodeがインストールされてることを確認します。

Terminal
nodebrew ls
v6.2.0

current: none

currentが現在使用しているnodeのバージョンを表しており、ここではまだ使えません。
使えるようにするにはuseします。

Terminal
nodebrew use v6.2.0
use v6.2.0

こうすると、node -vnpm -vで現在入ってるバージョンの確認ができます。

5.パッケージインストール

↓のコマンドを打ちます。package.jsonの中身は最初はデフォルトで構いません。

Terminal
$ npm init
$ npm install --save dash-button

次にpackage.jsonの中身のStrings部分を"dash-button scan"に書き換えます。
最終的なpackage.jsonは下記のようになります。

package.json
{
  "name": "amazondash",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "scan": "dash-button scan"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {},
  "devDependencies": {},
  "description": ""
}

6.Button Wifiスキャン

↓のコマンドを打ちます。

Terminal
sudo npm run scan

ここで、エラーがでなければ電波の受信待ちになるので、Amazon Dash Buttonのほうで設定を行います。

Amazonアプリの設定

 お持ちのスマホでAmazonアプリをインストールしてください。(パソコンでできないのか。。。)
次にメニューの「アカウントサービス」→「Dash端末」→「新しい端末をセットアップ」でスマホのほうで、Dash ButtonのBluetooth電波を受信してください。
商品選択画面が出ると思うので、そこで右上の✕ボタンを押して抜けてください。
ここまでやると、ターミナルの画面にAmazon Dash Buttonのフィジカルアドレスが表示されるはずです。

Terminal
$ sudo npm run scan
> dash-button scan

Scanning for DHCP requests and ARP probes on en0...
Detected a DHCP request or ARP probe from 6c:40:08:81:aa:72 //←fromからフィジカルアドレス

実装

7.Deploy

こちらのページを参考にindex.jsを作成します。

仕様

・ターミナル上で、カウントする数字(秒)をいれる
・入力した秒数のタイミングでAmazon dash buttonを押す。
・入力した数字と、ボタンを押したタイミングの差分を結果表示

index.js
//定数の設定
const DashButton = require("dash-button"); // モジュール読み込み
const PHY_ADDR = "50:f5:da:51:dc:c4"; // ここでフィジカルアドレスを指定

//変数の設定
var readline = require('readline');

var rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

let button = new DashButton(PHY_ADDR); // ボタンのアドレスを引数に渡してDashButtonクラスを呼び出し
let answer;
let count=-1;
let Timer;
let status=0;

rl.question("How long you count ?", function(number) {
  // TODO: Log the answer in a database
  rl.question("If you are ready, push return key",function(){
    console.log("COUNT DOWN START!!");
    Timer = setInterval(function(){
        // console.log(answer);
        count++;
        console.log(count);
        button.addListener(() => {
            status = 1;
            answer = number-count;
            if(answer > 0){
            console.log(answer+"秒早いです");
            clearInterval(Timer);

            }else if(answer == 0){
                console.log("Conglaturation!");
                clearInterval(Timer);
            }else{
                console.log(Math.abs(answer)+"秒遅いです");
                clearInterval(Timer);
            }

        });
    },1000);
    rl.close();
  });
});

いっけぇえええ〜!!
※6章で商品を登録してなければ、押しても商品は注文されません。

Terminal
node index.js
How long you count ?5
If you are ready, push return key
COUNT DOWN START!!
0
1
2
3
4
5
Conglaturation!
Conglaturation!
Conglaturation!
Conglaturation!
Conglaturation!
Conglaturation!

あとがき

・ボタンを押してから、反映されるまで結構タイムラグがあるので、難しい。
・結果表示が複数出てしまうのが直せてない。
・1ゲームやったら、終了する、部分が直せていない。
といろいろとバグがまだあります。が、一応遊べます。

参考

Amazon Dash Buttonを(正しくない方向で)使ってみた
npmライブラリ:dash-button

2
2
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
2
2