Androidのメモとか

ポキオの日記です。今日も遅延してない。

ESP8266でIFTTT Makerチャネル向けの物理ボタンを作る

まずはIFTTTの物理ボタンを作る

こんな感じ。

IFTTT 物理ボタン

基盤の裏側には皆さんおなじみのESP8266ボードがあります。

ESP8266

スライドスイッチは、USBオスからの5V給電のON/OFFができ、USBの5VとGNDは、ESP8266ボードの5VとGNDにつながっています。

プッシュボタンはESP8266のGNDとGPIO0(Pull-up)につながっていて、ボタン押下をトリガーに、プログラムを走らせることを目論んでます。

IFTTT 物理ボタン

USBオスはめんどくさいので既製品を使います。

サンハヤト USB用変換基板 CK-41

サンハヤト USB用変換基板 CK-41

  • メディア: Tools & Hardware

はんだ付けは苦手なので、テキトーにやっていきます。

プログラム部分を書いていく

今回は試しに、ボタンを押すと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オスからの給電に対応したため、モバイルバッテリーに直挿ししても使えます。

ESP8266 IFTTT トリガー

ボタンを押して、しばらくすると・・・

こんな感じで、世界中にponponpainを伝えることができました。

【第2類医薬品】ストッパ下痢止めEX 12錠

【第2類医薬品】ストッパ下痢止めEX 12錠

  • 発売日: 2017/07/01
  • メディア: ヘルスケア&ケア用品

「Androidのメモとか」は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。

このブログは個人的なメモ書きであったり、考えを書く場所であります。執筆者の所属する団体や企業のコメントや意向とは無関係であります。また、このブログは必ずしも正しいことが書かれているとは限らず、誤字脱字や意図せず誤った情報を載せる場合がありえます。それが原因で読者が不利益を被ったとしても、執筆者はいかなる責任も負いません。ありがとうございます。