いっぺーちゃんの いろいろやってみよ~

Espruino on ESP32 で Twitter(その3)

Espruino on ESP32 でぽちっとな - いっぺーちゃんの いろいろやってみよ~Espruino on ESP32 で Twitter(その2) - いっぺーちゃんの いろいろやってみよ~ を組み合わせてTweetボタンを作ってみましょう。

大雑把に言うと Espruino on ESP32 でぽちっとな - いっぺーちゃんの いろいろやってみよ~ でスイッチのステータスを表示していた部分をtweet処理に変えるだけです。

 

 以下、そのソースです。

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');
    // set time zone  fixed to 'JST'
    E.setTimeZone(9);

    // Initialize for switch
    var sw1  = Pin(21);
    sw1.mode("input" );
} else {
    throw "not ESP32";
}

// モジュール読み込み
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'));
    // エラー時はdata.errors.code data.errors.message に情報が入る
    console.log("%%%%%%%%%%%%%%%%%%%%%%%%%");
});
tw.on("end", function() {
    console.log("%%%% END %%%%");
});

function button_down(e) {
    var msg;
    var date = new Date();
    h = date.getHours();
    if (h >=4 && h < 12) {
        msg = 'Good morning, everyone!!';
    } else if (h >=12 && h < 17){
        msg = 'Good afternoon, everyone!!';
    } else if (h >=17 && h < 21){
        msg = 'Good evening, everyone!!';
    } else {
        msg = 'Good night, everyone!!';
    }
    tw.tweet(msg, {"trim_user":true,"include_entities":false});
}

setWatch(button_down, sw1, {repeat:true, edge:"falling", debounce:100});

 

 このプログラムを実行すると、Pin21に接続されたスイッチを押すたびにその時刻に応じた挨拶がtweetされます。

スイッチを押してからtweet完了まで4~5秒程度かかります。

tweet完了前に再度スイッチを押したときの動作は未確認です(メモリ不足で落ちそうな気がするけど)。

tweet開始~endイベントまで次のtweet要求をブロックすれば良いのかな?
ま、ぽんぽん押さなければ良いだけなので、そのままにしておこう。

 

 以下処理の説明です。

ESP32の場合はWi-Fiに接続してタイムゾーンを設定し、スイッチ用の端子を初期化します。
それ以外の環境ではスイッチが使えないのでエラー終了します。

if (typeof(ESP32) ==='function') {
    // platform is espruino on ESP32
    // Wi-Fi アクセスポイントへの接続
    var wifi = require('MyWifi');
    // set time zone  fixed to 'JST'
    E.setTimeZone(9);

    // Initialize for switch
    var sw1  = Pin(21);
    sw1.mode("input" );
} else {
    throw "not ESP32";
}

 

モジュール読み込み~イベントハンドラは前回と同じです。

 

スイッチが押されたときのハンドラです。
現在時刻を取得し、時刻に応じた挨拶をtweetしています。
時刻の区切りには異論もあるでしょうけど。。。
日本語が使えれば、もうちょっと気の利いたtweetができるんですが。。。。

function button_down(e) {
    var msg;
    var date = new Date();
    h = date.getHours();
    if (h >=4 && h < 12) {
        msg = 'Good morning, everyone!!';
    } else if (h >=12 && h < 17){
        msg = 'Good afternoon, everyone!!';
    } else if (h >=17 && h < 21){
        msg = 'Good evening, everyone!!';
    } else {
        msg = 'Good night, everyone!!';
    }
    tw.tweet(msg, {"trim_user":true,"include_entities":false});
}

 

スイッチにハンドラを割り当てます。
今回はスイッチが押されたときだけ処理したいので、「edge:"falling"」としています。

setWatch(button_down, sw1, {repeat:true, edge:"falling", debounce:100});

 

 これで、わざわざESP32からtweetする価値が出てきたかな?

温度センサの値を読んで、定期的(10分に1回とか)にtweetする、なんて使い方もできそうですね。

 


 

次回に続く。。。