3GIM の魅力
株式会社タブレイン 高本孝頼
2016/04

パート３：３GIM を使ったツイッター連携
１． ツイッター連携とはパート３では、前回パート２で紹介した IoT デバイスとなる Genuino101（Arduino 製品）＋３GIM シールド＋３GIM を使って、温度センサ値をツイッター連携したり、スマホから３GIM 上の LED を点滅させる方法をご紹介していきます。
ここでのツイッター連携として、以下の２つの事例を紹介します。
（１）事例１：IoT デバイスから温度センサ値をツイートする方法

図１．事例１：温度センサ値をツイートする方法
こちらは、IoT デバイスからツイート送信で、遠隔モニタリングすることに使えるものです。
（２）事例２：スマホからツイートされた値を読み取り LED を点灯・消灯させる方法

図２．事例２：スマホからツイートし IoT デバイスを制御する方法
こちらは、スマホなどから IoT デバイスに向けて制御する方法で、遠隔制御として使える方法となります。
ツイッターを利用する点では、無償ということで気軽に利用できるメリットはあります。
また公開することになり誰もが閲覧できるメリットもあります。このことを理解した上で活用すべきで、何にでも使えるものではありませんので注意してご利用ください。

1２． ツイッター連携のための準備
３GIM を使ったツイッター連携は、以下の手順で、あらかじめ twitter.com の①アカウント取得と、Arduino との接続のための②トークンの取得を行っておく必要があります。
ここではこれらの準備についてご紹介しておきます。
１）ツイッターアカウントの取得
まずは、ツイッターのアカウントを取得します。こちらは、以下のところで自分のメールアドレスを使って取得してください。アカウント取得先は、「twitter.com」の「アカウント作成」から行います。Web サイトの手順に沿っていけば簡単に取得できます。

ユーザアカウント登録

図３．ツイッターのアカウント登録サイト
２）トークンの取得
つぎにツイッターを Arduino から連携するためのトークン（ツイッター認証キー）を取得
します。こちらは、あらかじめ以下のサイトにアクセスして取得します。
http://arduino-tweet.appspot.com
手順としては、上記 URL サイトの取得メニュー画面（図４参照）に入って、図中の「Step1」のトークン取得を選択します。
このトークンは、変更されることはありませんので、忘れた場合には、再度上記の手順で入ってトークンを取得することができます。

2

トークン取得→選択

図４．Twitter のトークン（Arduino 認証キー）取得画面

ユーザアカウント入力

ここをヒット図５．Twitter のトークン（Arduino 認証キー）取得画面
つぎに図３．で取得（登録）したアカウントを使って、「連携アプリを認証」ボタンをヒットすることで、図６の画面でトークンを取得することができます。

3

トークン

図６．Twitter のトークン（Arduino 認証キー）
ここで得られたトークンは、プログラム（Arduino のスケッチ）に書き込みますので、必要なときにコピー/ペーストして利用します。（後述）

３． IoT デバイスからの温度センサ値ツイート（事例１）
既にパート２で紹介しました IoT デバイスを使って、温度センサの値を取得し、それを３分ごとにツイートするスケッチを紹介しましょう。
その前に Web ブラウザから、直接ツイートする例をご紹介しましょう。この場合、以下の行をキー入力して、直接ツイートします。
http://arduino-tweet.appspot.com:80/update?token=YOUR_TOKEN&status=MESSAGE

ただし、ここでの YOUR_TOKEN は、上記で取得したトークンを、MESSAGE は、ツイートするメッセージを入れます。この結果は、正しくツイートされた場合には、画面上に「OK」のみが表示されます。
例えば、MESSAGE に「temp=25.6%20C」とすると、ツイッター画面には、「temp=25.6C」と表示されます。ここで「%20」はアスキーコードのスペース（空白文字）となります。
以上のように直接キー入力でツイートすることが理解できたことで、今度は３GIM で送信する方法を学びます。この３GIM でツイートする場合には、上記の直接キー入力部分を２つに分けて（３GIM V2.0 マニュアルの＄WP 説明文の URL とボディ）、「＄WP」コマンドで送信します。この場合には、以下のようにしてシリアル通信（ここでは「Serial1」）で送信します。
$WP URL “token=YOUR_TOKEN&status=MESSAGE”

ここで、URL= http://arduino-tweet.appspot.com:80/update となります。
それでは、3 分ごとに、温度センサ値を取得し、ツイートするスケッチをご紹介しましょう。
4リスト①：温度センサ値を 3 分ごとにツイート// リスト①：温度センサ値を 3 分ごとにツイート#define BAUDRATE 38400// #include <SoftwareSerial.h>// SoftwareSerial Serial1(4, 5);
String URL = "http://arduino-tweet.appspot.com:80/update";
String TOKEN = "token=YOUR_TOKEN";
void setup() {取得したトークンに変更
while (!Serial);の引数設定waite");Serial.begin(BAUDRATE); Serial.println("PlseseSerial1.begin(BAUDRATE);
pinMode(7, OUTPUT);
digitalWrite(7, HIGH); delay(100); digitalWrite(7, LOW);
String str;
unsigned long tim = millis();do {str = Serial1.readStringUntil('\n');if (millis() - tim > 14000) {Serial.println("conext Error"); while (1);}} while (str.indexOf("3GIM")<0);
Serial.println("Ready");pinMode(A0, OUTPUT); digitalWrite(A0, LOW); // LM61BIZ: GND
pinMode(A2, OUTPUT); digitalWrite(A2, HIGH); // LM61BIZ: Vss(3.3V)}
void loop() {static int a1_old = 0;
int a1_new = analogRead(A1);//温度センサ値
if ( a1_old != a1_new ) {UNO の場合は、0.488 に変更
a1_old = a1_new;
float temp = analogRead(A1) * 0.322 - 60.0;// 温度センサ値変換式の引数設定
tweet(String("TIME=" + getTime() + "/temp=" + String(temp) + "C"));
Serial.println("wait ３min"); delay(180000);// ツイートは３分毎とする}}
boolean tweet(String message) {Serial1.println( "$WP " + URL + " \"" + TOKEN + "&status=" + message + "\"");
String str;do {
str = Serial1.readStringUntil('\n');} while (str.indexOf("$WP")<0);
Serial.println(Serial1.readStringUntil('\n'));return (str.indexOf("OK")>0);
ツイートする関数}の引数設定String getTime() {Serial1.println("$YT");//日時取得日時取得関数
String str;の引数設定
do {str = Serial1.readStringUntil('\n');} while (str.indexOf("$YT") < 0);
if (str.indexOf("OK") > 0) {str = str.substring(7); str.replace(" ", "%20");}
return str;}5それでは、このスケッチでの実行による結果を確認してみましょう。正しく温度センサ
値がツイートされた場合には、図７のようにツイート画面に日時と温度センサ値が表示されます。

図７．ツイートされた画面表示例
上記のスケッチでは、日時と温度センサ値の間には、「/」を入れていますが、これを改行コードに置き換える場合には、「%0D」に変更することで改行されます。

４．スマホからのツイートによる LED 点滅（事例２）
今度は、スマホ側や PC から「LED on」または「LED off」をツイートして、それを IoTデバイスが読み取って、３GIM にある LED を点滅させる方法を学びましょう。
もちろんスマホ側からツイートできるユーザは限られていて、アカウント取得した際のアカウント名とパスワードが分かる人たちがツイートできるようになります。
スマホからツイートするには、twitter.com サイトからアカウントとパスワードでログインし、ツイートキー入力するだけで簡単に行えます。

図 8．ツイート画面から「LED on」と入力
つぎに、ツイートされた文字列を、IoT デバイスから読み込むことを行いますが、その前に Web ブラウザから、直接キー入力して、ツイッターの内容を取得する方法を学びましょう。以下が、ツイート先の内容を、最新版から複数回前まで渡ってテキストで取得する方法です。

6http://twansform.appspot.com/ACCOUNT /text/NO

ここで、ACCOUNT が、ユーザアカウント名となります。上記で登録したアカウント名をここに入れて、NO には、出力する行数を入れます。
たとえば、事例１で出力したものを（NO=）5 行だけ出力してみると、以下のような内容が Web ブラウザに表示されます。
TIME=2016/04/13 23:07:27/temp=19.39C
TIME=2016/04/13 23:05:26/temp=19.70C
TIME=2016/04/13 23:04:25/temp=20.30C
TIME=2016/04/13 23:01:24/temp=20.61C
TIME=2016/04/13 23:00:23/temp=20.30C

それでは、このことを理解した上で、スマホから「on」または「off」が入った文字列を順次送信したら、IoT デバイス側で 1 行だけ読込み、３GIM 上の緑 LED が点滅するプログ
ラムを開発してみましょう。
すでに、パート２からサンプルを見ているとご理解頂けると思いますが、今回の場合には、ツイッター上の 1 行は、「$WG」を付けて上記のツイート文を読込みます。
この場合には、以下のようになります。
$WG http://twansform.appspot.com/ACCOUNT /text/1
この行を、あらかじめ URL に設定しておきますので、ACCOUNT のみをご利用アカウン
ト名に変更して、ご利用ください。また、スマホや PC からのツイートでは、同じ文章を 2
度キー入力するとエラーとなりますので、毎回買えるには、カウントアップする番号などを先に書いてから小文字の「on」または「off」を入れて、３GIM 側の LED の点灯・消灯を行ってみてください。
リスト②：スマホからツィートして LED on/off 遠隔制御// リスト②：スマホからツィートして LED on/off 遠隔制御
#define BAUDRATE 38400//#include <SoftwareSerial.h>
UNO の場合コメント外す//SoftwareSerial Serial1(4, 5);の引数設定
String URL = "http://twansform.appspot.com/ACCOUNT/text/1";
void setup() {利用するアカウント名に変更
while (!Serial);の引数設定
Serial.begin(BAUDRATE); Serial.println("Plsese waite");Serial1.begin(BAUDRATE);
pinMode(7, OUTPUT);
digitalWrite(7, HIGH); delay(100); digitalWrite(7, LOW);
String str;
unsigned long tim = millis();do {7str = Serial1.readStringUntil('\n');if (millis() - tim > 14000) {Serial.println("conext Error"); while (1);}} while (str.indexOf("3GIM") < 0);Serial.println("Ready");}
void loop() {String str;
Serial1.println("$WG " + URL);
do {while (!Serial1.available());
str = Serial1.readStringUntil('\n');} while (str.indexOf("$WG") < 0);Serial.println(str);
if (str.indexOf("OK") > 0) {str = Serial1.readStringUntil('\n');Serial.println(str);
if (str.indexOf("on")>0) {Serial1.println("$YL 1");}else if (str.indexOf("off")>0) {Serial1.println("$YL 0");}}delay(30000);// 30 秒ごとツィート確認}

ツィート文読込みの引数設定

LED on/offの引数設定

これまでの資料は、以下のところからダウンロードできます。
パート１：３GIM を使った開発事例
http://tabrain.jp/3GIM_V2.0/Part1%20Arduino%20and%203GIM.pdf
パート２：３GIM を使った技術資料（遠隔制御・メール送信など）
http://tabrain.jp/3GIM_V2.0/Part2%20Arduino%20and%203GIM.pdf
以8上