前回はChannelに送ったデータをThingSpeak側で条件判断してツイートするという方法だったが、ThingTweetを使えば判断はESP8266側ででき、送る内容の自由度も上がる。
参考にさせていただいたサイトはこちらだ。
内容的にはオリジナルはこちらにあり、Wi-FiがらみをESP8266にあわせて書き直してあるとのこと。
ほんと、ESP8266 core for Arduinoのおかげで被れる恩恵は計り知れない。
実は、ThingSpeak APP React 経由だと、送る文面に制約があって、同じ文面になってしまいがちだ。
詳しくないのでよく知らなかったのだが、Twitterは同じ文面だと弾くらしく、2通目以降全く送信されなくてちょっと悩んだりした。
上のサイトの例では、これに対応するために時刻の情報を入れ込んでおり、弾かれることなく全てのツイートが送信されるようだ。
この件があるために、いまのところ、データはデータでChannelに送り、通知は通知でESP8266側で判断して直にThingTweetへ送るのが良いと思われる。
ちなみに上のサイトのコードは、Arduino IDE 1.6.7、ESP8266 Core 2.1.0の環境では、
‘updateTwitterStatus’ was not declared in this scope
という、暗黙の宣言がらみのエラーが出るので、はじめの方で
void updateTwitterStatus(String tsData);
を追加で宣言しておく必要がある。
水色の部分がThingSpeakへ接続するためのアドレス、apiKey、そして、関数の宣言だ。
それ以外はWi-Fi接続のためのおなじみの処理で、まあ、決まり文句。
この部分でtwStrにツイートする内容を代入している。
上にも書いたが、同じ文面にならないようにmillis()を追加している。
millis()の値は再起動のたび、連続でも約50日(※)でリセットされるらしいから、完璧を期すなら、NTPへアクセスして時刻データを取得して付け加えたらいいかもしれない。
これが肝心のツイートの部分だ。
だが、当然ながらThingTweetの要求するとおりの書式を送信するわけだから、これ以上でもこれ以下でもなく、誰が書いても変数名以外には変更の余地も無いので逆に簡単かも。
というわけで、着々と入電中w
ESP8266関連記事一覧へ
(※)
確かめたわけではないが、
0xFFFFFFFF = 4294967295
4294967295 / 1000 / 60 / 60 / 24 = 49.71026961805556日
ってことなのかな?