ペットの散歩状況をツイートするIoTを作りました【ESP-WROOM-02 & IFTTT】
こんにちは、休学して大船渡に住んでいるポタトです。
ポタトの大船渡滞在もあとわずかになりました。最後、ギークハウスに何か残して帰りたいということで、IoT作品を作りました。
ギークハウス大船渡には、ソラという犬のペットがいます。シェアハウスの住人で世話をするということになっています。
ソラがいつ散歩に行ったのか分からないので、散歩したら、その旨をツイートすることにしました。
この装置の黒いボタンを押すと(もしくは電源をオフ→オンにすると)...
このようなツイートが送信されます。
記録として、このアカウントに残っていきます(散歩するたびにボタンを押していることが前提です)。
課題
実際に動かしてみたところ、1日で電池切れしてしまいました。
現状ではこまめに電源オンオフしなくてはならず、面倒くさい仕様になっています。そのためあまりボタンが押されていません。
大船渡を離れる前に何かしらの改善ができればと思っています。
技術的なことについて
ESP-WROOM-02について
今回使用したESP-WROOM-02は、Arduino IDEを用いてコードを開発することができるマイコンです。Wi-Fi付きArduinoのような使い方ができます。
仕組み
ボタンを押す(ESP-WROOM-02)
→ IFTTT Webhooksで指定したURLにアクセスする
→ IFTTT Webhooksがトリガーとなり、Twitterに投稿する
となっています。
コード
大半の部分について、
3.6 ESP8266 のプログラムを用意する (ESP8266 で IFTTT を使ってtwitterにつぶやく)3.6 ESP8266 のプログラムを用意する (ESP8266 で IFTTT を使ってtwitterにつぶやく)
を参考にしています。
#include <ESP8266WiFi.h> #include <WiFiClientSecure.h> const char* ssid = "*****"; const char* password = "*****"; const char* host = "maker.ifttt.com"; const int httpsPort = 443; const char* iftttEvent = "*****"; const char* iftttKey = "*****"; // Use web browser to view and copy // SHA1 fingerprint of the certificate const char* fingerprint = "*****"; const int led = 13; void setup() { Serial.begin(115200); Serial.println(); Serial.print("connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); // Use WiFiClientSecure class to create TLS connection WiFiClientSecure client; Serial.print("connecting to "); Serial.println(host); if (!client.connect(host, httpsPort)) { Serial.println("connection failed"); return; } if (client.verify(fingerprint, host)) { Serial.println("certificate matches"); } else { Serial.println("certificate doesn't match"); } String url = "/trigger/"; url = url + iftttEvent + "/with/key/" + iftttKey; Serial.print("requesting URL: "); Serial.println(url); int random_number_for_comment = random(5); String random_string[] = {"同じ場所にいるのはつまらないワン!", "体を動かすのは楽しいワン!", "外の世界を見に行くワン!", "イネ科の植物は食べるワン!", "寂しかったワン!"}; int random_number = random(10000); String random_number_string = String(random_number); String data = String("{ \"value1\" : \"") + random_string[random_number_for_comment] + "\", " + "\"value2\" : \"" + random_number_string + "\", " + "\"value3\" : \"" + "xyz" + "\" } "; Serial.println(data); client.print(String("POST ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "User-Agent: BuildFailureDetectorESP8266\r\n" + "Connection: close\r\n" + "Content-Type: application/json; charset=utf-8\r\n" + "Content-Length: " + data.length() + "\r\n\r\n" + data + "\r\n" ); Serial.println("request sent"); while (client.connected()) { String line = client.readStringUntil('\n'); if (line == "\r") { Serial.println("headers received"); break; } } String line = client.readStringUntil('\n'); Serial.println("reply was:"); Serial.println("=========="); Serial.println(line); Serial.println("=========="); Serial.println("closing connection"); pinMode(led, OUTPUT); digitalWrite(led, HIGH); delay(1000); digitalWrite(led, LOW); } void loop() { }