やりたいこと
IFTTTに追加されたMaker Channelを使ってArduinoからツイートしてみたい。
前提的なもの
・ブレッドボート上にタクトスイッチ(黄色と青色)を設置する。
・青色のタクトスイッチが押された場合は「青色のボタンが押されました」とツイートされる。
・黄色のタクトスイッチが押された場合は「黄色のボタンが押されました」とツイートされる。
・Maker ChannelはHTTPSでのPOSTを前提としているが、ArduinoではHTTPSをデフォルトで使えないので、HTTPでPOSTする。(後述のSecret keyはダダ漏れになるのでご注意)
必要なもの
- Arduino Uno R3
(ここで実際に使用しているのはArduino Uno互換の DFRduino UNO R3) - Arduino Ethernet Shield
(ここで実際に使用しているのはDFRduino Ethernet Shield V2.1) - ブレッドボード
- タクトスイッチ x2
- ジャンパコード x3
- ジャンパワイヤ x2
- Arduino用のプログラム(ifttt_twitter.ino) ソースは後述
- Twitterアカウント
やること
1. IFTTTのレシピを作る
2. ブレッドボードを組み立てる
3. inoファイルを作る
1. IFTTTのレシピを作る
Twitter ChannelとMaker Channelをconnectしておく。
My Recipes の Create a Recipe からレシピを作っていく。
青色タクトスイッチと黄色タクトスイッチ用に、以下のstep1-7を1回ずつ行う。
step1. Choose Trigger Channel
トリガとなるチャンネルを選択する。
「Maker」で検索する。
step2. Choose a Trigger
トリガを選択する。
「Receive a web request」をクリックする。
step3. Complete Trigger Fields
トリガのイベント名を設定する。
「blue」を入力する。
step4. Choose Action Channel
アクションとなるチャンネルを選択する。
「Twitter」で検索する。
step5. Choose an Action
アクションを選択する。
「Post a tweet」をクリックする。
step6. Complete Action Fields
ツイートする文言を登録する。
「青色のボタンが押されました」と入力する。
step7. Create and connect
レシピを作成する。
「Create Recipe」をクリックする。
レシピ作成完了
青色のタクトスイッチ用レシピが作成されたので、引き続き黄色のタクトスイッチ用に上記step1-7を実施する。
その際、step3では「yellow」、step6では「黄色のボタンが押されました」と入力する。
2. ブレッドボードを組み立てる
配線
3. inoファイルを作る
ソースコード
「YOUR-SECRET-KEY」はMaker Channelの「Your secret key is:」に書かれている文字列を設定すること。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
/** * ifttt_twitter.ino */ #include <SPI.h> #include <Ethernet.h> //for Tact Switches #define PIN_INPUT_TACT_SW_YELLOW 9 #define PIN_INPUT_TACT_SW_BLUE 8 //MAC address (setting required) byte mac[] = {0x02, 0x02, 0x02, 0x02, 0x02, 0x02}; //local IP address (setting required) byte ip[] = {192, 168, 0, 123}; char host[] = "maker.ifttt.com"; //IFTTT secret key String SECRET_KEY = "YOUR-SECRET-KEY"; EthernetClient client; bool bYellow = false; bool bBlue = false; //INPUT int inYellow = 0; int inBlue = 0; void setup() { //tact switches pinMode as pullup (active-low) pinMode(PIN_INPUT_TACT_SW_YELLOW, INPUT_PULLUP); pinMode(PIN_INPUT_TACT_SW_BLUE, INPUT_PULLUP); Serial.begin(9600); delay(500); while (!Serial) { ; } delay(1000); Ethernet.begin(mac, ip); delay(1000); Serial.print(F("IP: ")); Serial.println(Ethernet.localIP()); Serial.println(F("Ready...")); } void loop() { //read tact switches input (select message) inYellow = digitalRead(PIN_INPUT_TACT_SW_YELLOW); inBlue = digitalRead(PIN_INPUT_TACT_SW_BLUE); switch (inYellow) { case LOW: //active-low if (!bYellow) { bYellow = true; event("yellow"); } break; default: bYellow = false; break; } switch (inBlue) { case LOW: //active-low if (!bBlue) { bBlue = true; event("blue"); } break; default: bBlue = false; break; } while (client.available()) { char c = client.read(); Serial.print(c); } if (!client.connected()) { client.stop(); } } bool event(String event) { //NOT https! if (client.connect(host, 80)) { //POST request client.println("POST /trigger/"+event+"/with/key/"+SECRET_KEY+" HTTP/1.1"); client.print(F("Host: ")); client.println(host); client.println(F("User-Agent: Arduino")); client.println(F("Connection: close")); client.println(); Serial.print(F("event="));Serial.println(event); Serial.println(F("sent")); delay(100); //client.stop(); return true; } return false; } |
確認
タクトスイッチを押してツイートされていればOK。
ツイートは毎回同じ文言になるので、2回目のツイートからIFTTT側で「Twitter error: ‘Cannot send duplicate tweet.’」のエラーが出るけどとりあえずなので今回は無視。