Espruino on ESP32 で Twitter(その5)
前回 と Espruino on ESP32 でLチカ - いっぺーちゃんの いろいろやってみよ~ を組み合わせて、TwitterからLEDを制御してみましょう。
以下にそのプログラムを示します。
consumer_key = '取得した Consumer key'; consumer_secret = '取得した Consumer secret'; access_token = '取得した Access Token'; access_secret = '取得した Access Token Secret'; if (typeof(ESP32) ==='function') { // platform is espruino on ESP32 // Wi-Fi アクセスポイントへの接続 var wifi = require('MyWifi'); // Initialize for LED1 var led1 = Pin(23); led1.mode("output"); led1.reset(); var led_on = function() { led1.set(); }; var led_off = function() { led1.reset(); }; } else { var led_on = function() { console.log("LED ON"); }; var led_off = function() { console.log("LED OFF"); }; } if (typeof(E) ==='function') { // platform is espruino // set time zone fixed to 'JST' E.setTimeZone(9); } // モジュール読み込み var tiny_twitter = require("tiny_twitter"); // 初期化 var tw = new tiny_twitter(consumer_key, consumer_secret, access_token, access_secret, true); tw.on("connect", function() { console.log("%%%% CONNECTED %%%%"); }); tw.on("response_header", function(data, code, msg) { if (code != 200) { console.log("%%%% RESPONSE ERROR!!! " + code.toString() + " : " + msg); } console.log("%%%% RESPONSE_HEADER %%%%\n" + data + "\n%%%%%%%%%%%%%%%%%%%%%%%%%"); }); tw.on("data", function(data) { console.log("%%%% DATA %%%%"); // console.log(JSON.stringify(data, null, '\t')); if (data.text) { console.log(data.text); if (data.text.indexOf('LED') >= 0) { if (data.text.indexOf('ON') >= 0) { led_on(); } else if (data.text.indexOf('OFF') >= 0) { led_off(); } } } else { console.log("** NO TEXT **"); } console.log("%%%%%%%%%%%%%%%%%%%%%%%%%"); }); tw.on("end", function() { console.log("%%%% END %%%%"); }); // オプション指定 param = {"with":"user"}; // twitterに接続 tw.userstream(param);
前回との差分です。
ESP32のときは、LED用の端子の初期化とそれをON/OFFする関数を定義しています。
// Initialize for LED1 var led1 = Pin(23); led1.mode("output"); led1.reset(); var led_on = function() { led1.set(); }; var led_off = function() { led1.reset(); };
それ以外の場合は、LED制御ができないので、コンソールにON/OFFを表示する関数を代替処理として定義しています。
var led_on = function() { console.log("LED ON"); }; var led_off = function() { console.log("LED OFF"); };
また、データ受信時のイベントハンドラ内で、メッセージ本体内に「LED」と「ON」が含まれていたらLEDをONする関数をコール、
「LED」と「OFF」が含まれていたらLEDをOFFする関数をコールする処理を追加しています。
「LED ON OFF」や「LED not ON」 のような意地悪なメッセージは考慮していません(この実装ではどちらもONとして扱われる)。
if (data.text.indexOf('LED') >= 0) { if (data.text.indexOf('ON') >= 0) { led_on(); } else if (data.text.indexOf('OFF') >= 0) { led_off(); } }
プログラムを実行したら、ここで使用しているアカウントで、ブラウザやスマホから「LED ON 1」とtweetしてみましょう。
LEDが点灯したと思います。
大文字、小文字は区別されますので、すべて大文字にしてください。
しつこいようですが、全角文字ではダメです。
最後の「1」は連続してtweetするときに同じ文にならないように追加しているだけなので、何でもかまいません。
連続してtweetするときはこの部分を変更してtweetしてください。
「LEDON」のように空白を挟まない場合や「ON LED」と順序を逆にした場合でもOKです。
次に「LED OFF 1」とtweetするとLEDが消灯します。
オプションを以下のようにすると、
ハッシュタグ「#ESP32_LED_CONTROL」が付いた自分以外からのtweetでもLEDをコントロールすることができます。
(文字列を見ているだけなので、ハッシュタグである必要はないですが)
param = {"with":"user", "track":"#ESP32_LED_CONTROL"};
ESP32 に赤外線LEDつけて、リモコン処理を代替できるようにすると、TwitterからエアコンのON/OFFができる、なんて夢が広がりますね(←勝手にエアコンONされて、電気代がぁぁぁ、って心配が。。。)
twitterに関する記事はこれでおしまい。