LoginSignup
4
8

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-12-19

はじめに

みなさんこんにちわ。
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を参考に、ハンドリングの実装をすればボタンをフックできるはずです!
4
8
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
4
8