Grow up

生活とプログラミング

ArduinoでIFTTTを使ってツイートする方法

f:id:knkomko:20190920232259p:plain

はじめに

前回はTweetライブラリを使用してツイートしていました。
knkomko.hatenablog.com

今回は「IoT技術テキスト」で紹介されていたIFTTT (イフト) というアプリ連携サービスを使ってツイートしてみます。

IoT技術テキスト -MCPC IoTシステム技術検定 対応-

IoT技術テキスト -MCPC IoTシステム技術検定 対応-

1日にIFTTTを使用してツイート可能な回数は100回までのようです。


IFTTT とは

IFTTT(イフト)は、「レシピ」と呼ばれる個人作成もしくは公に共有しているプロフィールを使って数あるWebサービスFacebookEvernote、Weather、Dropboxなど)同士で連携することができるWebサービスである。
IFTTT - Wikipedia

Webhooks サービスの追加

Webhooks サービスはPOSTリクエストをトリガーとして別のサービスを実行する事が出来ます。

以下のIFTTT公式サイトにアクセスします。
Every thing works better together - IFTTT

右上の[Sign up]を左クリック。
f:id:knkomko:20190920234551p:plain:w350

右上の[人物アイコン]を左クリック。
f:id:knkomko:20190920234733p:plain:w350

表示されたメニューから[Create]を左クリック。
f:id:knkomko:20190920234915p:plain:w350

IfとThisの間にある[+]を左クリック。
f:id:knkomko:20190920235020p:plain:w350

検索窓に「Webhooks」と入力して表示されたアイコンを左クリック。
f:id:knkomko:20190920235153p:plain:w350

画面に表示されている[Receive a web request]を左クリック。
f:id:knkomko:20190920235314p:plain:w350

「Event Name」を入力したら[Create trigger]を左クリック。
f:id:knkomko:20190920235514p:plain:w350

Twitter サービスの追加

POSTリクエストによりWebhooksで受け取ったJSONをツイートするように設定します。

ThenとThatの間にある[+]を左クリック。
f:id:knkomko:20190920235701p:plain:w350

検索窓に「Twitter」と入力して表示されたアイコンを左クリック。
f:id:knkomko:20190920235801p:plain:w350

[Connect]ボタンを左クリック。
f:id:knkomko:20190920235845p:plain:w350

Arduinoからツイートするアカウントでログイン。
f:id:knkomko:20190920235948p:plain:w350

[Post a tweet]を左クリック。
f:id:knkomko:20190921000034p:plain:w350

Tweet text」欄に入力されている内容を消します。
f:id:knkomko:20190921000131p:plain:w350

[Add ingredient]から表示されたメニューの[Value1]を左クリック。
f:id:knkomko:20190921000437p:plain:w350

Tweet text欄に「Value1」の入力がされた事を確認して[Create action]を左クリック。
f:id:knkomko:20190921000651p:plain:w350

「Receive notifications when this applet runs」は必要に応じて選択します。
f:id:knkomko:20190921011519p:plain:w350

Webhooks と Twitter の連携確認

右上の「人物アイコン」を左クリックします。
f:id:knkomko:20190921011549p:plain:w350

表示されたメニューから[My services]を左クリックします。
f:id:knkomko:20190921011614p:plain:w350

[Webhooks]を左クリック。
f:id:knkomko:20190921001511p:plain:w350

表示されている Twitter アイコンを左クリック。
f:id:knkomko:20190921001552p:plain:w350

灰色で塗りつぶしている文字列はユーザーごと一意の情報です。
「Your key is : ~」のキーはArduinoからツイートする際に使用します。
f:id:knkomko:20190921002539p:plain:w350

また、こちらの画面でツイートの確認が出来るので試しておきましょう。
1.「Make a POST or GET of request to: ~」のURLにEvent Nameを入力。
2.「With an optional JSON body of: ~」のValue1にツイートしたい文字列を入力。
3. [Test it]を左クリック。
f:id:knkomko:20190921002539p:plain:w350

Value1に指定していた文字列がツイートされます。
f:id:knkomko:20190921003839p:plain:w350

Ethernet2 ライブラリのインストール

スケッチの[ツール] → [ライブラリの管理]を左クリック。
f:id:knkomko:20190921004055p:plain:w350

Ethernet2 のライブラリをインストールします。
f:id:knkomko:20190921004152p:plain:w350

ソースコード

requestHead1で指定している[EventName]と[YourKey]はWebhooksの情報を入力します。

#include <Ethernet2.h>

byte mac[] = { 0xA8, 0x61, 0x0A, 0xAE, 0x50, 0x49 }; // Your Ethernet Shield MAC Address
IPAddress ip(192, 168, 0, 15);
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);
EthernetClient client;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  Serial.println("Trying to get an IP address using DHCP");
  if (Ethernet.begin(mac) == 0)
  {
    Serial.println("Failed to configure Ethernet using DHCP");
    Ethernet.begin(mac, ip, gateway, subnet);
  }
  Serial.print("My IP address: ");
  Serial.println(Ethernet.localIP());
  Serial.println ();
}

void loop() {
  // put your main code here, to run repeatedly:
  for(int i=10; i>0; i--)
  {
    Serial.println(i);
    delay(1000);
  }
  
  if ( client.connect("maker.ifttt.com", 80) )
  {
    Serial.println("connected");
    // POST request
    String requestBody = String("{\"value1\":\"Hello, World!\"}");
    int bodyLength = requestBody.length();
    String requestHead1 = "POST /trigger/[EventName]/with/key/[YourKey] HTTP/1.1\r\n" +
                          String("Host: maker.ifttt.com\r\n") +
                          "Content-Type: application/json\r\n";
    String requestHead2 = "Content-Length: " + String(bodyLength) + "\r\n" + "\r\n";
    client.print(requestHead1 + requestHead2 + requestBody);
    delay( 1000 );
    Serial.println("--- request ---");
    Serial.println(requestHead1 + requestHead2 + requestBody);
    Serial.println("---------------");
    Serial.println("Sent message");
  }
  else
  {
    Serial.println("Error: Could not make a TCP connection");
  }
  Serial.println("--- response ---");
  while (client.available())
  {
    char c = client.read();
    Serial.print(c);
  }
  Serial.println("----------------");
  if (!client.connected())
  {
    client.stop();
  }
}