まずはIFTTTの物理ボタンを作る
こんな感じ。
基盤の裏側には皆さんおなじみのESP8266ボードがあります。
スライドスイッチは、USBオスからの5V給電のON/OFFができ、USBの5VとGNDは、ESP8266ボードの5VとGNDにつながっています。
プッシュボタンはESP8266のGNDとGPIO0(Pull-up)につながっていて、ボタン押下をトリガーに、プログラムを走らせることを目論んでます。
USBオスはめんどくさいので既製品を使います。
はんだ付けは苦手なので、テキトーにやっていきます。
プログラム部分を書いていく
今回は試しに、ボタンを押すとTwitterで「#ponponpain」とつぶやくガジェットを作ってみます。
#include <ESP8266WiFi.h> char ssid[] = "SSID"; char password[] = "PASSWORD"; int button = 0; // GPIO 0(PULL-UPを使う) WiFiClient wifiClient; char host[] = "maker.ifttt.com"; char url[] = "/trigger/(IFTTTのトリガー名)/with/key/(IFTTTのKEY)"; int port = 80; void setup() { pinMode(button, INPUT_PULLUP); Serial.begin(115200); Serial.println(""); // 接続処理 connectWifi(); initializeHttpClient(); } void loop() { // 本当は割り込み処理で実装したかったが、Watchdogの例外が起こってしまい断念 if (digitalRead(button) == LOW) { // PONPONPAINを叫ぶ ponponpain(); // 立て続けにPOSTができなかったため、ここで一旦切断 wifiClient.stop(); initializeHttpClient(); } else { delay(100); } } void connectWifi() { WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(100); } Serial.println("connected!"); Serial.println(WiFi.localIP()); } void initializeHttpClient() { if (!wifiClient.connect(host, port)) { Serial.println("connection failed"); Serial.print("client status : "); Serial.println(wifiClient.status()); Serial.print("client connected : "); Serial.println(wifiClient.connected()); } else { Serial.println("connection success"); } } // PONPONPAINを叫ぶ void ponponpain() { WiFiClient wifiClient; String json = "{\"value1\":\"#ponponpain\"}"; if (!wifiClient.connect(host, port)) { Serial.println("connection failed"); return; } Serial.println("http post..."); wifiClient.println(String("POST ") + url + " HTTP/1.1"); wifiClient.println(String("Host: ") + host); wifiClient.println("Cache-Control: no-cache"); wifiClient.println("Content-Type: application/JSON"); wifiClient.print("Content-Length: "); wifiClient.println(json.length()); wifiClient.println(); wifiClient.println(json); }
こんな感じ。相変わらずクソコードです。
IFTTTで設定
IFTTTのMakerチャネルで、イベント(今回はponponpainという名前)を作成して、そこにHTTP-POSTされた値を、そのままTwitterに投稿するレシピを作成。
いざponponpain
今回、USBオスからの給電に対応したため、モバイルバッテリーに直挿ししても使えます。
ボタンを押して、しばらくすると・・・
— ポキオ (@pokiiio) 2016年12月3日
こんな感じで、世界中にponponpainを伝えることができました。