##嫁SIDE
2Fで作業をしていると、1Fから「パパ~!ご飯出来たよ~!」という嫁さんの叫び声が聞こえたり、聞こえなかったりするので、Amazon Dashボタンを使って、「パパご飯できた」ボタンを作ってみました。
押すとSlackに通知されて、ご飯を食べに行くわけです。
ALL-FREEボタンを。。。
- 紙はインクジェット用の光沢写真用紙
- ハサミとデザインナイフで切り抜きます
###作成にあたっては以下を参考にさせていただきました。
Amazon Dash ButtonをただのIoTボタンとして使う
http://qiita.com/jsoizo/items/3b8bba4160f41aef20f4
Amazon Dash Buttonを(正しくない方向で)使ってみた
http://qiita.com/takustaqu/items/8539b33780c9675c8657
###ソースコード
dasherの設定は以下の通りです。MACアドレスと、SlackのURLは適宜設定してください。
{"buttons":[
{
"name" : "slack",
"address": "ダッシュボタンのMACアドレス",
"url": "https://hooks.slack.com/services/XXXXX/XXXXX/XXXXXX",
"method": "POST",
"json": true,
"body": {"channel":"#general", "text":"パパ、ご飯出来たよ│´ω`)ノ", "icon_emoji":":rice:", "username": "gohan bot"}
}
]}
###実用化されてます
なにげに便利で、コンスタントに使われております。ご飯だけじゃなくて、コーヒーを入れてくれた時もこれで呼ばれます。
「呼んだのに来ない(-_-#)」が減りました。
###ところが。。。。
デバッグ中でステップ実行している時とか、ハンダ付けしている時に*「パパ、ご飯出来たよ│´ω`)ノ」*とか来てもすぐに行けないわけです。
嫁さんはずっとPCの前にいるわけでも、スマホを手元に置いているわけでもないし。
何か返事をする手段は無いか。。。と考えてみました。
##夫SIDE
何かリアクションにつかえるものは無いか。。。。
と、思っていたらホームセンターに他の用事で行った時に見つけてしまいました。
ELPAミニブザーです。
動作電圧が1V~10Vと、3.3Vで動くESP8266と直結出来るので使いやすそうです。
これで音によるリアクションが出来る。
ESP8266はNodeMcu Lua ESP8266 CH340という開発ボードを使っています。
中国から届くのに時間がかかりますが、¥480と激安です。
ピンヘッダも取り付け済みなので、ハンダ付け不要です。
組んでみました。
GPIO5 ⇒ ブザーの赤線
GND ⇒ ブザーの黒線
を直結しています。工作の友、セロテープで貼っています(雑)
###ソースコード
以下の通り。
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
//ご自分のルーターのSSIDを入力してください
const char* ssid = "XXXXXXXXXXXXXXX";
//ご自分のルーターのパスワード
const char* password = "XXXXXXXXXXXXX";
ESP8266WebServer server(80);
const int buzzer1 = 5;
void handleRoot() {
server.send(200, "text/html", "<html>"
"<head>"
"<title>buzzer server</title>"
"<meta name='viewport' content='width=320,user-scalable=no'>"
"<meta name='apple-mobile-web-app-capable' content='yes'>"
"<style>"
"body{background-color:pink;} a:link{color:#555;text-decoration:none;} a:visited{color:#555;}\n"
".linku{display:flex;align-items: center;justify-content: center; border:1px solid black;"
" width:100px; height:100px; margin:100px auto 0 auto; background-color:springgreen; font-size:30px; border-radius:10px;}\n"
".linkd{display:flex;align-items: center;justify-content: center; border:1px solid black;"
" width:100px; height:100px; margin: 50px auto 0 auto; background-color:salmon; font-size:30px; border-radius:10px;}\n"
".labelws{display:flex;align-items: center;justify-content: center; border:none;"
" width:200px; height:100px;margin: 50px auto 0 auto; font-size:20px;color:#777;}\n"
"</style>"
"</head>"
"<body>"
" <a href='/ok' class='linku'>OK</a>"
" <a href='/ng' class='linkd'>NG</a>"
" <span class='labelws'>buzzer server</span>"
"</body>"
"</html>");
}
void setup(void){
pinMode(buzzer1, OUTPUT);
digitalWrite(buzzer1, LOW);
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.println("");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
server.on("/", handleRoot);
server.on("/ok", [](){
honk(300);
delay(200);
honk(600);
server.sendHeader("Location", "/", true);
server.send(302, "text/plain", "honk ok");
});
server.on("/ng", [](){
honk(160);
delay(100);
honk(160);
delay(100);
honk(160);
delay(100);
server.sendHeader("Location", "/", true);
server.send(302, "text/plain", "honk ng");
});
server.onNotFound([](){
server.send(404, "text/plain", "File Not Found");
});
server.begin();
Serial.println("HTTP server started");
}
void honk(int msec){
// ブザーをONにする
digitalWrite(buzzer1, HIGH);
// msec待つ
delay(msec);
// ブザーをOFFにする
digitalWrite(buzzer1, LOW);
}
void loop(void){
server.handleClient();
}
シリアルに表示されたIPアドレスにブラウザでアクセスするとこんな感じです。
動画
ブザーの音と、振動で動く様がシュールです。ESP8266とブザー
— Yukito (@yukitter) 2017年4月5日
「オッ ケーー」
「ム・リ・ダ」 pic.twitter.com/C8Ophv2CeP
これで返事ができますね!夫婦も安泰だ!
##ブザー応用編
- IoT版 YES/NO枕もできるよ! ※職場で開くの注意かも
- マジネタだと、サーバーが落ちた時とかに警報で使えるかも?
##最後に
こんなんで、色々大丈夫だろうか。。。。