ArduinoでIFTTTを使ってツイートする方法
目次
はじめに
前回はTweetライブラリを使用してツイートしていました。
knkomko.hatenablog.com
今回は「IoT技術テキスト」で紹介されていたIFTTT (イフト) というアプリ連携サービスを使ってツイートしてみます。

IoT技術テキスト -MCPC IoTシステム技術検定 対応-
- 作者: モバイルコンピューティング推進コンソーシアム
- 出版社/メーカー: リックテレコム
- 発売日: 2016/10/19
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
1日にIFTTTを使用してツイート可能な回数は100回までのようです。
Arduino電源切り忘れて毎分ツイートしてた😇 pic.twitter.com/upll3Zv8ld
— 金子誠 (@kaneko_m_w) September 19, 2019
IFTTT とは
IFTTT(イフト)は、「レシピ」と呼ばれる個人作成もしくは公に共有しているプロフィールを使って数あるWebサービス(Facebook、Evernote、Weather、Dropboxなど)同士で連携することができるWebサービスである。
IFTTT - Wikipedia
Webhooks サービスの追加
Webhooks サービスはPOSTリクエストをトリガーとして別のサービスを実行する事が出来ます。
以下のIFTTT公式サイトにアクセスします。
Every thing works better together - IFTTT
右上の[Sign up]を左クリック。
右上の[人物アイコン]を左クリック。
表示されたメニューから[Create]を左クリック。
IfとThisの間にある[+]を左クリック。
検索窓に「Webhooks」と入力して表示されたアイコンを左クリック。
画面に表示されている[Receive a web request]を左クリック。
「Event Name」を入力したら[Create trigger]を左クリック。
Twitter サービスの追加
POSTリクエストによりWebhooksで受け取ったJSONをツイートするように設定します。
ThenとThatの間にある[+]を左クリック。
検索窓に「Twitter」と入力して表示されたアイコンを左クリック。
[Connect]ボタンを左クリック。
Arduinoからツイートするアカウントでログイン。
[Post a tweet]を左クリック。
「Tweet text」欄に入力されている内容を消します。
[Add ingredient]から表示されたメニューの[Value1]を左クリック。
Tweet text欄に「Value1」の入力がされた事を確認して[Create action]を左クリック。
「Receive notifications when this applet runs」は必要に応じて選択します。
Webhooks と Twitter の連携確認
右上の「人物アイコン」を左クリックします。
表示されたメニューから[My services]を左クリックします。
[Webhooks]を左クリック。
表示されている Twitter アイコンを左クリック。
灰色で塗りつぶしている文字列はユーザーごと一意の情報です。
「Your key is : ~」のキーはArduinoからツイートする際に使用します。
また、こちらの画面でツイートの確認が出来るので試しておきましょう。
1.「Make a POST or GET of request to: ~」のURLにEvent Nameを入力。
2.「With an optional JSON body of: ~」のValue1にツイートしたい文字列を入力。
3. [Test it]を左クリック。
Value1に指定していた文字列がツイートされます。
Ethernet2 ライブラリのインストール
スケッチの[ツール] → [ライブラリの管理]を左クリック。
Ethernet2 のライブラリをインストールします。
ソースコード
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(); } }