はじめに
みなさんこんにちわ。
mixiメディア事業部の田代です。
主にSwiftやObjective-Cをメインに開発していますが、今AmazonDashButtonが自分の中で話題なのでその環境構築をまとめてみました。
やりたいこと
- 同一の無線Wifi環境内でラズパイを使ってAmazonDashButtonが押されたことをハンドリングする
- Macだけでも簡単にできるけど、複数人でデプロイしたかったのでサーバーを立てることにしました
用意するもの
RaspberryPi
- RaspberryPi(引き出しにしまってあったラズパイBを使います)
- SDカード(ラズパイのOSのイメージをいれます)
- ディスプレイとHDMIケーブル
- USBケーブル(ラズパイの電源用)
- Wifiドングル(ラズパイ3以降であれば不要ですw)
- Wifiドングルは簡単に設定できるBUFFALO WLI-UC-GNMを使ってます
- 昔適当に買ったドングルが認識できずすごく苦労したので、簡単に設定できるのがオススメです
AmazonDashButton
- 適当なAmazonDashButtonを買います
AmazonDashButtonの設定
- Wifi設定後の注文画面でキャンセルすれば、押しても注文されなくなります
- Wifiはラズパイでつなぐ予定のものと同じにしておきましょう
- 参考: Amazonの注文を行わずにIoTボタンとして使う方法
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環境の構築
- 今回は
dash-button
というnpmをつかってハンドリングしたいと思います - https://github.com/ide/dash-button
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を参考に、ハンドリングの実装をすればボタンをフックできるはずです!