Amazon Dash Buttonが販売停止になったので、しかたなくIoTボタンをDIYしてみた

はじめに
---

ついにAmazon Dash Buttonが販売停止になりました。ハックしてボタン一押しでいろんなことができる楽しいガジェットでした。
まだ使えますが代替えを用意しないと。とりあえず3ボタン対応のものをDIYしてみました。

パーツ
---

- [WEMOS - D1 mini](https://wiki.wemos.cc/products:d1:d1_mini)
- [aitendo - 薄膜パネルスイッチ HC-543-3](http://www.aitendo.com/product/11784)
- 抵抗 10KΩ 3個
- 小さいブレッドボード
- ジャンパーワイヤ

配線
---

Fritzing難しくて途中断念しました...^^;
D1 miniと薄膜パネルスイッチを同じ色同士で結線します。

|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/3b3d7360-e28a-1ba2-5278-92b5656b580d.png">|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/7daec89f-8515-9f6d-853e-4ba9422ed17b.png">|
|:--:|:--:|

開発環境
---

こちらを参考にどうぞ。

- [ESP8266に4x4マトリックス・キーパッドを接続してみた](https://qiita.com/somainit/items/a784c2b961bf171fc3c8)


luaソースコード
---

[ESP8266 IFTTT Easy Button](https://www.hackster.io/noelportugal/esp8266-ifttt-easy-button-888a87)を~~コピペして~~参考に作りました。

**SSID**と**PASSWORD**を環境に合わせて変更します。

```lua:init.lua
--init.lua
wifi.setmode(wifi.STATION)
wifi.sta.config {ssid="SSID", pwd="PASSWORD"}
wifi.sta.connect()
tmr.alarm(1, 1000, 1, function()
    if wifi.sta.getip()== nil then
        print("Waiting for IP...")
    else
        tmr.stop(1)
        print("Your IP  is "..wifi.sta.getip())
        print("Your MAC is "..wifi.sta.getmac())
        print("5 seconds to stop timer 0")
        tmr.alarm(0, 5000, 0, function()
            print("Starting button listener...")
            dofile("button.lua")
        end)
    end
end)
```

いずれかのボタンを押すとWebhookを叩きます。
**RED**, **YELLOW**, **GREEN**は環境に合わせて変更します。

```lua:button.lua
--button.lua
buttonPin_red    = 5 -- this is ESP8266, index:5, label:D5, pin:GPIO14
buttonPin_yellow = 2 -- this is ESP8266, index:2, label:D2, pin:GPIO4
buttonPin_green  = 1 -- this is ESP8266, index:1, label:D1, pin:GPIO5

gpio.mode(buttonPin_red,   gpio.INT,gpio.PULLUP)
gpio.mode(buttonPin_yellow,gpio.INT,gpio.PULLUP)
gpio.mode(buttonPin_green, gpio.INT,gpio.PULLUP)

function debounce (func)
    local last = 0
    local delay = 200000

    return function (...)
        local now = tmr.now()
        if now - last < delay then return end

        last = now
        return func(...)
    end
end

function onChange()
    webhook_url = "http://192.168.8.1:5000/cmd/"

    if     gpio.read(buttonPin_red) == 0 then
        print("Red! ")
        myHttpGet(webhook_url.."RED")
        tmr.delay(500000)

    elseif gpio.read(buttonPin_yellow) == 0 then
        print("Yellow! ")
        myHttpGet(webhook_url.."YELLOW")
        tmr.delay(500000)

    elseif gpio.read(buttonPin_green) == 0 then
        print("Green! ")
        myHttpGet(webhook_url.."GREEN")
        tmr.delay(500000)
    end
end

function myHttpGet(url)
    http.get(url, nil, function(code, data)
        if (code < 0) then
            print("HTTP request failed")
        else
            print(code, data)
        end
    end)
end

gpio.trig(buttonPin_red,   "down", debounce(onChange))
gpio.trig(buttonPin_yellow,"down", debounce(onChange))
gpio.trig(buttonPin_green, "down", debounce(onChange))
```

DIYしてみての感想
---

良かった点

- USB給電なのでバッテリ切れを気にする必要がなくなった。
- 無駄な通信をしない分、応答がすごく速くなった。
- 3ボタンなので、させることを増やせた。

気になる点

- 手作り感は出るが、スタイリッシュ感が全くなくなった。

ちなみに
---

なぜ薄膜パネルスイッチを使ったかというと、曲面でも貼り付けて使えるため。これクルマの中で使おうと思っています。

さいごに
---

Amazon Dash Buttonとは楽しい思い出がたくさんあるので販売停止はとても残念ですが、これも時代の流れでしょうか。(=^・^=)