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

micropython on ESP32 でTwitter(その2)

さて、早速tweetしてみましょう。

ESP32はmicropython on ESP32 でWi-Fiルータ(or AP)に接続するにしたがってWi-Fiに接続されていて、micropython on ESP32 でTwitter(その1)の手順で各モジュールが改造/インストール済みであるものとします。

 

以下のプログラムをコンソールでコピペ実行するか、pyboard.pyで実行します。
日本語を使用する場合、エディタの文字コードUTF-8を選択しておいてください(これ重要!!)。

consumer_key    = '取得した Consumer key'
consumer_secret = '取得した Consumer secret'
access_token    = '取得した Access Token'
access_secret   = '取得した Access Token Secret'

import sys
platform = sys.platform
# platform :    ESP32 => 'esp32'
#               Linux => 'linux'

from tiny_twitter import tiny_twitter
import ujson as json

if platform == 'esp32' :
    # ESP32のときは時刻合わせする
    import ntptime
    import utime
    utime.set_time(ntptime.time())

# データ受信時のコールバック関数
def CallbackFunc(jsn) :
    print("#### " + json.dumps(jsn))
    # print("--------\n" + jsn.get("text", "NO_DATA") + "\n--------")

# 初期化
tw = tiny_twitter(consumer_key, consumer_secret, access_token, access_secret, CallbackFunc, debug=True)

# tweetする
query_params = {"trim_user":"true", "include_entities":"false"}
msg = "てすとつぃーと"
tw.tweet(msg, query_params)

成功すれば、「てすとつぃーと《改行》(2017/08/21[Mon] 09:11:18)」のようにtweetされるはずです。

 

 

以下解説。

実行環境のチェックのための値取得です。
ESP32のときは platform に 'esp32'が、Linuxのときは 'linux' が格納されます。

import sys
platform = sys.platform
# platform :    ESP32 => 'esp32'
#               Linux => 'linux'

 

必要なモジュールをインポートします。
tiny_twittertwitterアクセスのためのモジュールです。これがなければ始まりません。
ujson はJSONデータを処理するためのモジュールです。
twitterのデータはJSONデータで送られてきますが、tiny_twitter内でDICT型に変換されてくるので、DICT型のまま使うなら不要です。
今回はujson.dumps()で文字列に戻すためにインポートしています。

from tiny_twitter import tiny_twitter
import ujson as json

 

ESP32のときは時刻合わせを行います。
micropython on ESP32 で時刻設定を可能にするにあるutimeモジュールの改造と、micropython on ESP32 でNTPサーバから時刻取得にあるntptimeモジュールのインストールが終わっている必要があります。

if platform == 'esp32' :
    # ESP32のときは時刻合わせする
    import ntptime
    import utime
    utime.set_time(ntptime.time())

 

Twitterからのデータを受信したときのコールバック関数です。
パラメータjsnにはDICT型に格納されたJSONデータが入っています。
今回は受け取ったJSONデータをujson.dumps()で文字列に変換して表示しています。
tweet内容だけ表示したい場合はコメントアウトされている側を有効にしてください。

# データ受信時のコールバック関数
def CallbackFunc(jsn) :
    print("#### " + json.dumps(jsn))
    # print("--------\n" + jsn.get("text", "NO_DATA") + "\n--------")

 

tiny_twitterクラスの初期化です。
最初の4つのパラメータがTwitterアクセスのための4つのキーで、5つ目がデータ受信時のコールバック関数(↑で定義)です。
debugパラメータをTrueにすると、モジュール内部のdebug_printでの表示が有効になります。表示したくない場合は省略するかFalseを指定してください。

tw = tiny_twitter(consumer_key, consumer_secret, access_token, access_secret, CallbackFunc, debug=True)

 

query_paramsは APIリファレンス を参照してください。指定しても動くかどうかわかりませんが。。。

msgにはtweetする文字列を設定します。
Espruino版とは異なり、ソケット通信がブロッキング動作のため、tiny_twitter.tweet()はレスポンスを受信し、接続がcloseされるまで戻ってきません。

query_params = {"trim_user":"true", "include_entities":"false"}
msg = "てすとつぃーと"
tw.tweet(msg, query_params)

 

次回に続く。。。