LoginSignup
67
52

More than 5 years have passed since last update.

IoTで夫婦の会話を最小化する(Amazon Dashボタン&ESP8266編)

Last updated at Posted at 2017-04-05

嫁SIDE

2Fで作業をしていると、1Fから「パパ~!ご飯出来たよ~!」という嫁さんの叫び声が聞こえたり、聞こえなかったりするので、Amazon Dashボタンを使って、「パパご飯できた」ボタンを作ってみました。
押すとSlackに通知されて、ご飯を食べに行くわけです。

ALL-FREEボタンを。。。
P5000249f.jpg

「パパご飯できた」ボタン化!
P5000252.jpg

  • 紙はインクジェット用の光沢写真用紙
  • ハサミとデザインナイフで切り抜きます

作成にあたっては以下を参考にさせていただきました。

Amazon Dash ButtonをただのIoTボタンとして使う
http://qiita.com/jsoizo/items/3b8bba4160f41aef20f4

Amazon Dash Buttonを(正しくない方向で)使ってみた
http://qiita.com/takustaqu/items/8539b33780c9675c8657

ソースコード

dasherの設定は以下の通りです。MACアドレスと、SlackのURLは適宜設定してください。

/home/XXXXXX/dasher/config/config.json
{"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"}
  }
]}

実用化されてます

なにげに便利で、コンスタントに使われております。ご飯だけじゃなくて、コーヒーを入れてくれた時もこれで呼ばれます。
image

「呼んだのに来ない(-_-#)」が減りました。

ところが。。。。

デバッグ中でステップ実行している時とか、ハンダ付けしている時「パパ、ご飯出来たよ│´ω`)ノ」とか来てもすぐに行けないわけです。
嫁さんはずっとPCの前にいるわけでも、スマホを手元に置いているわけでもないし。
何か返事をする手段は無いか。。。と考えてみました。

夫SIDE

何かリアクションにつかえるものは無いか。。。。
と、思っていたらホームセンターに他の用事で行った時に見つけてしまいました。
ELPAミニブザーです。
動作電圧が1V~10Vと、3.3Vで動くESP8266と直結出来るので使いやすそうです。
これで音によるリアクションが出来る。
P5000568.jpg

ESP8266はNodeMcu Lua ESP8266 CH340という開発ボードを使っています。
中国から届くのに時間がかかりますが、¥480と激安です。
ピンヘッダも取り付け済みなので、ハンダ付け不要です。

組んでみました。
GPIO5 ⇒ ブザーの赤線
GND ⇒ ブザーの黒線
を直結しています。工作の友、セロテープで貼っています(雑)

P5000574.jpg

ソースコード

以下の通り。

buzzer.ino
#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アドレスにブラウザでアクセスするとこんな感じです。
image

動画



ブザーの音と、振動で動く様がシュールです。

これで返事ができますね!夫婦も安泰だ!

ブザー応用編

  • IoT版 YES/NO枕もできるよ! ※職場で開くの注意かも
  • マジネタだと、サーバーが落ちた時とかに警報で使えるかも?

最後に

こんなんで、色々大丈夫だろうか。。。。

67
52
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
67
52