2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AmazonDashButtonで遊んでみた

Posted at

はじめに

こんにちは、皆さん
3連休楽しんでますか?
クリスマス?そんなものは無い。いいね?

今回作るもの

最近AmazonDashButtonを弄るのが流行っているらしいので便乗してみました。
ラズパイと接続して、ボタンを押すと某年末番組の「ででーん、○○アウト」と言わせます。
(ほぼほぼ参考文献以上の新しいことはしてないですが勘弁して。半分備忘録です)
用意したのは下の画像のように

  • ラズパイ
  • AmazonDashButton
  • スピーカー
    です。
    IMG_4740.JPG

ラズパイで音を出す

すいません、ラズパイのセットアップの部分はすっ飛ばします。
セットアップが出来てる体としてやります。

諸々インストール

http://qiita.com/aviscaerulea/items/a50c40f0a9e397c1ec2f
この方の記事を参考(ほぼパクリ)にして進めていきました。
apt-getでもいけると書かれてますが、何となく最新版を入れたかったので手動バージョンで。

$ mkdir /tmp/tts-install
$ cd !$
$ curl -L http://downloads.sourceforge.net/hts-engine/hts_engine_API-1.10.tar.gz | tar zxfv -
$ cd ./hts_engine_API-1.10
$ ./configure
$ make && sudo make install

$ cd /tmp/tts-install
$ curl -L http://downloads.sourceforge.net/open-jtalk/open_jtalk-1.09.tar.gz | tar zxfv -
$ cd ./open_jtalk-1.09
$ ./configure --with-charset=UTF-8
$ make && sudo make install

参考文献の方には無かったですが、pathが通ってなかったので
$ source ~/.bashrc
をしたらコマンドが通るようになりました

$ cd /tmp/tts-install
$ curl -L http://sourceforge.net/projects/open-jtalk/files/Dictionary/open_jtalk_dic-1.09/open_jtalk_dic_utf_8-1.09.tar.gz | tar zxfv -
$ sudo mkdir -p /usr/local/share/open_jtalk
$ sudo mv ./open_jtalk_dic_utf_8-1.09 !$/dic-1.09

↓最初はやらなかったのですが、おっさんが嫌になったので
$ curl -L -O http://sourceforge.net/projects/mmdagent/files/MMDAgent_Example/MMDAgent_Example-1.6/MMDAgent_Example-1.6.zip
$ unzip MMDAgent_Example-1.6.zip
$ mkdir -p /usr/local/share/hts_voice
$ find ./MMDAgent_Example-1.6 -type f -name "*.htsvoice" -exec cp -v {} /usr/local/share/hts_voice/ \;

音を出すテスト

ここも参考にあるように
(というかこの部分はほぼ参考と一緒なので割愛)
一応シンボリックリンクの部分だけは自分でやった

$ sudo ln -s ~/say /usr/local/bin/say

某番組用のスクリプト

上記までの作業で

$ say ほにゃらら

で喋ってくれるのですが、スクリプト書いてみました。
ランダムで誰かケツバットです。

#!/bin/bash

names=("まつもと" "はまだ" "たなか" "えんどう" "やまさき")
say_count=$((RANDOM % (${#names[*]})))

#echo ${names[*]}
#echo ${say_count}

if [ ${say_count} -eq 0 ]; then
  #echo "全員"
  `aplay /home/pi/gakituka.wav && say ぜんいん、アウト`
else
  #echo "${names[${say_count}]}"
  `aplay /home/pi/gakituka.wav && say ${names[${say_count}]}、アウト`
fi

AmazonDashButtonを使う

これでボタン押したときにスクリプトを実行してくれればオッケーです。

セットアップ

これも先駆者の方々がいますが、画像多めにするから許して
スマホにAmazonのアプリをインストールしておく必要があります。

ダッシュボタン設定の流れ

  • 1.アプリ内のメニューから新しい端末のセットアップ
  • 2.Wifiの設定
  • 3.設定を途中でやめてボタンを押しても商品を買わないようにする
  • 4.この画像みたいになったらオッケー
1 2 3 4
j.PNG 画面通りにwifiの設定 IMG_4737.PNG IMG_4738.PNG

ラズパイ側の設定

今回はnode-dash-buttonを使いました。
だいたいREADMEに書いてありますが、一応自分のやったコマンドを

$ sudo apt-get install libpcap-dev
$ mkdir amazon
$ cd amazon
$ npm init
$ npm install node-dash-button --save

で準備が出来ました。

$ sudo node node_modules/node-dash-button/bin/findbutton

でボタンを探します。(sudoじゃないと怒られました)
コマンドを打ったあとに、DashButtonをポチっと
んで、結果がこれ(自分の場合)
スクリーンショット 0028-12-24 15.58.27.png
なんか思った以上にいっぱい出てきました。
Amazon Techってでるよとありますが、たぶんunknownってなってるのがそれ
結果的に一番上のやつが僕の場合正解でした。
隠してある部分のMACアドレスをメモります。

スクリプト書いて遊ぶ

準備ができたのでカキカキします。

~/amazon/index.js
var dash_button = require('node-dash-button');
var dash = dash_button("メモってたMACアドレス", null, null, 'all');

dash.on("detected", function (){
  console.log("omg found");
  const execSync = require('child_process').execSync;
  const result =  execSync('/home/pi/gakituka.sh');
  console.log(result);
});

正直ほぼnode触ったことないザマス
んで、起動(またsudoつけないと怒られた)

$ sudo node index.js

このときDashbuttonポチでケツバットです。
一応動画を撮ったのですが、著作権?的に危ないんじゃねと思ったので載せませんでした。

まとめ

これでいつでも嫌いな相手にケツバットが出来るようになりましたね。
正直動的に喋らせている部分は、スペックのせいかは分かりませんが結構遅いです。我慢できるっちゃできますけど。
本当はiPhoneのhomebridgeで hey siri -> ケツバット起動 -> ででーん
という流れをやってたんですけど、周囲にまるわかりなのでDashButtonを使ってこっそりやる方法にしました。
homebridgeの方は気が向いたら書くかも(先駆者の記事見たほうが早い気もするけど)

参考

Raspberry Pi 2 をアンプ基板+スピーカーのコンパクト構成でお喋りさせる
Amazon Dash ButtonをただのIoTボタンとして使う
Node.jsからシェルコマンドを実行する

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?