ESP-WROOM-02 Arduino互換ボードとIFTTTでスマートフォンにプッシュ通知を飛ばす


スイッチサイエンス製 ESP-WROOM-02 Arduino互換ボード

スイッチサイエンスからESP-WROOM-02 Arduino互換ボードが発売されました。今まではESP-WROOM-02(ESP8266)をArduinoのスケッチを書き込んで使うためには、モジュールをはんだ付けしてブレッドボード上で使用したりと少々使いづらい部分がありました。それをこの互換ボードが解消してくれます

ESP-WROOM-02 Arduino互換ボード

IFTTT


IFTTT

if this then that 略してIFTTT。世の中に公開されているたくさんのWebサービスを仲介してつなげるWebサービスのことです。例えば、あるハッシュタグがついたTwitterのつぶやきをEvernoteのノートにまとめるなどできちゃいます

ESP-WROOM-02とIFTTTでArduinoからスマートフォンへプッシュ通知を飛ばす

Arduinoに人の動きを検知できる焦電センサーをつないで、人の動きを検知したら手元のスマートフォンにPush通知を飛ばす方法を紹介します。

1. IFTTTの登録〜レシピ作成

まずは環境を整える。記事「IFTTTにMaker Channelができました」がすごくわかりやすかったです
IFTTTの登録〜レシピの作成は上の記事を参考にしてください。

2. スマートフォンにIFTTTのアプリをインストール

Android、iOSともにアプリが公開されています。Androidしか試せてないですが、おそらくiOSも同じ方法でできるかと。インストールできたら作ったアカウントでログインしてください。

3. Arduinoへスケッチを書き込む

定期的にIFTTTに対してプッシュ通知を飛ばさせるしくみです。ESP-WROOM-02をArduino IDEで使うためのESP8266 core for Arduinoは別途インストールしてください。

#include <ESP8266WiFi.h>

// 転送レート
#define SERIAL_SPEED  115200

// Wi-Fi SSID
#define WLAN_SSID         "your-ssid"
// Wi-Fi パスワード
#define WLAN_PASS         "your-password"

// IFTTTのホスト名
#define IFTTT_HOST_NAME  "IFTTT-event-name"

// IFTTTのイベント名
#define IFTTT_EVENT_NAME  "IFTTT-event-name"

// IFTTTのシークレットキー
#define IFTTT_KEY         "IFTTT-secret-key"

// ポート番号
#define PORT_NUMBER       80

void setup() {
  Serial.begin(SERIAL_SPEED);
  delay(10);

  // We start by connecting to a WiFi network

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(WLAN_SSID);

  WiFi.begin(WLAN_SSID, WLAN_PASS);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");  
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  Serial.print("connecting to ");
  Serial.println(IFTTT_HOST_NAME);

  // Use WiFiClient class to create TCP connections
  WiFiClient client;
  if (!client.connect(IFTTT_HOST_NAME, PORT_NUMBER)) {
    Serial.println("connection failed");
    return;
  }

  // IFTTTへ送信するデータ
  char sendData[256] = "";
  sprintf(sendData, "GET http://maker.ifttt.com/trigger/%s/with/key/%s HTTP/1.1\r\nHost:maker.ifttt.com\r\nConnection: close\r\n\r\n", IFTTT_EVENT_NAME, IFTTT_KEY);

  // This will send the request to the server
  client.print(sendData);
  int timeout = millis() + 5000;
  while (client.available() == 0) {
    if (timeout - millis() < 0) {
      Serial.println(">>> Client Timeout !");
      client.stop();
      return;
    }
  }

  // Read all the lines of the reply from server and print them to Serial
  while(client.available()){
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }

  Serial.println();
  Serial.println("closing connection");

  delay(5000);
}

4. プッシュ通知飛んできた!

これで、部屋に女子が入ってきても見られずにすみますね!