1. Qiita
  2. 投稿
  3. RaspberryPi

RaspberrypiでAmazonDashButtonをハンドリングする

  • 3
    いいね
  • 0
    コメント

はじめに

みなさんこんにちわ。
mixiメディア事業部の田代です。
主にSwiftやObjective-Cをメインに開発していますが、今AmazonDashButtonが自分の中で話題なのでその環境構築をまとめてみました。

Raspi-PGB001.png

やりたいこと

  • 同一の無線Wifi環境内でラズパイを使ってAmazonDashButtonが押されたことをハンドリングする
  • Macだけでも簡単にできるけど、複数人でデプロイしたかったのでサーバーを立てることにしました

用意するもの

RaspberryPi

  • RaspberryPi(引き出しにしまってあったラズパイBを使います)
  • SDカード(ラズパイのOSのイメージをいれます)
  • ディスプレイとHDMIケーブル
  • USBケーブル(ラズパイの電源用)
  • Wifiドングル(ラズパイ3以降であれば不要ですw)
    • Wifiドングルは簡単に設定できるBUFFALO WLI-UC-GNMを使ってます
    • 昔適当に買ったドングルが認識できずすごく苦労したので、簡単に設定できるのがオススメです

AmazonDashButton

  • 適当なAmazonDashButtonを買います

AmazonDashButtonの設定

RasberryPiの環境構築

手順

ガイドライン

SDカードのフォーマット

  • 公式にはSDFormatter使えってなってましたが、MacであればDiskUtilitiyでもできました

イメージのダウンロード

  • https://www.raspberrypi.org/downloads/raspbian/
    • 今回はRasbianを使います
    • Javaとかpythonの開発環境なんて必要ない!という方はNOOBでも大丈夫だと思います
  • ダウンロードするのはtorrentのほうが断然早いです
    • 自分の環境では20分ぐらいで終わりました
    • ダウンロードZIPだと12時間かかる予想でした…

SDカードへimgファイルの転送

  • ダウンロードが終わったら解凍します
  • 解凍すると2016-11-25-raspbian-jessie.imgが出力されると思います

SDカードのマウント先を調べます

$ diskutil list

/dev/disk2 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *15.8 GB    disk2
   1:                  Apple_HFS SDCARD                  15.8 GB    disk2s1

自分の環境ではdisk2にありました
それからSDカードをアンマウントします
アンマウントしないとエラーがでてしまいます…

$ diskutil unmountDisk /dev/disk2
Unmount of all volumes on disk2 was successful

そして最後にddコマンドでimgファイルをSDカードに転送します
転送には30分近くかかりますので気長に待ちましょう。。。

$ sudo dd 2016-11-25-raspbian-jessie.img of=/dev/disk2 bs=1m
4169+0 records in
4169+0 records out
4371513344 bytes transferred in 2109.358009 secs (2072438 bytes/sec)

念のため転送されているか確認します

$ diskutil list
/dev/disk2 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *15.8 GB    disk2
   1:             Windows_FAT_32 boot                    66.1 MB    disk2s1
   2:                      Linux                         4.3 GB     disk2s2

大丈夫そうですね

ラズパイの初期設定

  • SDカードやWifiドングル、HDMIケーブルなどを指してから電源を入れます
  • SSH接続してCUIでもできますが、GUIでやると早いのでさくっと設定

言語・地域環境

  • 設定 > RaspberryPiの設定からSetLocaleとSetTimezoneを設定 > 再起動
  • なんかキーボード設定が日本語にならずにちょっとはまるが、何度か設定してるうちに設定されるようになる(謎)

Wifiネットワーク設定

  • デスクトップの右上のネットワーク設定から簡単にできます

apt-get

  • ここからはターミナルで作業します
  • 公式の設定方法にもあるように最新に更新します
$ sudo apt-get update
$ sudo apt-get upgrade
  • デフォルトで入っているエディターが微妙なので自分はvimをいれました
$ sudo apt-get install vim

Node環境の構築

nodejsの更新

  • ラズパイにデフォルトでインストールされているnodeのバージョンはv0.10.29とかなり古いので最新のをいれます
  • dash-buttonを使うにはv4以上でないと依存moduleが解決できないようです
  • apt-getからでは最新のnodejsがインストールが出来ないのでnpmをインストールして対応します
  • 参考: Ubuntuに最新のNode.jsを難なくインストールする

npmインストール

$ sudo apt-get install -y npm

$ sudo npm cache clean
$ sudo npm install n -g

$ sudo n stable

$ node -v
v7.2.1

$ sudo apt-get purge -y nodejs npm
  • これで最新のnode.jsが使えるようになりました

dash-buttonのインストール

$ mkdir dash
$ cd dash

# dash-buttonがつかうパケットキャプチャのライブラリをいれます
dash$ sudo apt-get install libpcap-dev

dash$ npm install --save dash-button

dash-buttonの動作確認

package.jsonに以下のように書いて sudo npm run scan するとAmazonDashButtonを探しに行きます

{
  "scripts": {
    "scan": "dash-button scan"
  }
}
  • 探し始めたらAmazonDashButtonのボタンを押してあげるとMACアドレスを拾ってくれるはずです
dash$ sudo npm run scan

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

Scanning for DHCP requests and ARP probes on wlan0...
Detected a DHCP request or ARP probe from 34:d2:70:31:08:92
  • あとはdash-buttonのreadmeを参考に、ハンドリングの実装をすればボタンをフックできるはずです!