Twitterアプリを動かしてみる ("Let's try Twitter" in Japanese)

[注] : 現在,このページで紹介した方法ではTwitterにアクセスできません.サービスの仕組みが,このページを公開した当時から変更されているためです.
このノートブックページは日本でのmbed普及加速を目的にまとめたものです.[まだ書きかけの状態です] This notebook page has been written in Japanese only. [This page writing is in progress]

Uこの日本語ガイド関連ページとして「mbedを始めましょう!("Let's get started" in Japanese)」(http://mbed.org/users/nxpfan/notebook/lets_get_started_jp/)が用意されています.「これからmbedを始める」という方は,上記ページも参考にしてください.

はじめに:

mbedの魅力はいろいろありますが,その一つとして基板ににEthernetの物理層チップが搭載されており,あとはパルストランス入りのRJ-45コネクタを接続するだけでインターネットに接続できる所でしょう.
ではTwitterでメッセージをつぶやくサンプルアプリケーションを動かしてみましょう.

[注] 「Twitter? 知ってるけど...まだやってません」という方は,すぐに始めて見ましょう.ここで説明しているコードを動かしてみるにはTwitterのアカウントが必要です. TwitterについてはいろんなWebページや書籍で丁寧な説明がされているので参考にするといいでしょう.その中の一例として,こちらのガイド・ページを挙げておきます. http://www.greenspace.info/twitter/
2010年6月21日夜(日本時間),Twitterのサンプルコードが変更されました.
この8月でTwitter APIのBasic認証が終了するのを受け,Twitter APIのプロキシ:http://www.supertweet.net/ を使うコードに変更されています.

このサービスを使うにはまず自分のTwitterアカウントを設定しておく(http://www.supertweet.net/about/documentation)必要があります.日本語での解説と使用法説明はこちら(http://blog.fkoji.com/2010/05250022.html)が参考になると思います.

*** この新しいソースコードでの変更点は (1) 冒頭でのコメントの追加と (2) 36行目の「twitter.post()」を呼び出す際のURLだけです.
2010年6月14日夜(日本時間),CookbookのTwitterページが更新され,サンプルコードの名前が「NetTwitterExample」から「TwitterExample」に変更になりました.このサンプルコードの変更点は名前だけのようで,内容は同じであるようです.
2010年6月10日夜(日本時間),mbedのCookbookページがリニューアルされ,そこで公開されるコードはこれまでの古いライブラリを 使ったものからより新しい柔軟性を備えたものへと変更されました.またCookbook自体もユーザ全員に開かれたWikiベースの情報共有スペースとな りました.

これは非常に歓迎すべきことなのですが,ライブラリが若干本格的なものになったのに伴ない,サンプルコードの簡潔性が犠牲になったキライがありま す.ちょと残念です.古いCookbookは廃止されたわけではなく「古いもの」として公開されています.我々も当時これをベースにガイドページを書いていたので何かの参考になると考え,別のURLにそれを引っ越しました.このページと同内容の古いライブラリ使用例を「Twitter アプリを動かしてみる--旧ライブラリ版」として公開しているので,もしご興味があれば,こちらも御覧下さい.

準備:

Twitterを試してみるには,mbedをネットワークに接続しなければなりません.このために「パルストランス入りRJ-45コネクタ」を用意し,所定のピンに接続します.以下の例では秋月電子で入手したPulseJack J0011D21Bを用いて解説します.接続には手元にあった線材とヘッダピン,ブレッドボードを使います.

...この例の他,マルツパーツ館で販売されているYuan Dean Scientific Co.,LTDの46F-1211も同回路入り.ただしピン配置が違うので注意が必要です(参考: http://mbed.org/users/okano/notebook/langja-http-server-with-locally-available-parts/).このコネクタの接続についてはコチラで解説.

...さらに...2010年8月末より「きばん本舗」さんよりmbedで便利に使える「☆ボード・オレンジ」が販売されています.この☆ボード・オレンジを使えば,mbedとEthernetケーブルを挿すだけで面倒な半田付けや配線の手間が省けます.

..2011年3月,「スイッチサイエンス」さんより「mbed用イーサネット接続キット」が販売されています.ブレッドボードで接続を行う際にはとても便利でしょう.

PulseJack J0011D21B

Yuan Dean Scientific 46F-1211

☆ボー ド・オレンジ

 

PulseJack J0011D21Bのデータシートは下のURL参照

http://ww2.pulseeng.com/products/datasheets/J403.pdf

ピンの接続はCookbookのNetworkingページを参考にTD+,TD-,RD+,RD-の4本を接続します.
PulseJack J0011D21Bでは以下のようなピン配置となっています.
(Yuan Dean Scientific 46F-1211でもピン番号と信号名の対応は同じですが,物理的な配置が違っているので注意が必要(詳細はこのページ最後の「参考」部分を参照)ですhttp://www.yds.com.tw/driver/drivers/46-47F%20Series%20PDF%20Catalogue.pdf).

ピン番号 信号名
1 TD+
2 TD-
3 RD+
6 RD-

手元にフラットケーブルのとヘッダピンの切れ端があったので,それを利用してブレッドボード用アダプタを作ります.
写真の例では線の茶色を1番ピン(TD+)に,赤を2番(TD-),橙を3番(RD+),黄を6番(RD-)に接続しました.(写真例のハンダ付けの雑さは見なかったことにしてください)

ヘッダピン側は先ほどの線を順番に接続します.

これでブレッドボードに接続する準備が出来ました.

ブレッドボードは下の写真のような基板です.これにmbedを挿して使います.

抜き差しの際の注意は次のURLに置いてあるビデオをご覧ください.
http://mbed.org/blog/entry/104/

ブレッドボードは下の写真の中に線で示したような接続がされています.

mbedの33番ピンから36番ピンまでがTD+〜RD-に対応したピンとなっているのでここに先ほどのヘッダピンを接続します.茶色の側がTD+,黄色の側がRD-で,mbedのピンの順番通りに並んでいるので,これをそのまま,位置をあわせて挿します.(左上に見える抵抗とジャンパには特に意味はありません.)

上の写真ではコネクタにつながるヘッダピンがブレッドボードから浮いていますが,これは奥まで挿入し,しっかり接続してください.

[注] RJ45コネクタの接続を行った後,PCからmbedが(通常通りUSBストレージ・デバイスとして)認識されなくなる場合があります.このような場合はmbedとRJ45コネクタの接続を再確認してください.ブレッドボードの穴,ひとつ分ズレて接続してしまうと(USBのD+線に直結したIF+に接続してしまい)USBが正しく動作しません.

これでハードウェアの準備は完了です.

ソフトウェア:

Cookbookページをみると,たくさんのサンプルコードが置いてあります.クックブックへはmbedのページ上部のリンクからどうぞ.

この中から「Twitter」サンプルへのリンクをクリックします.

ここの解説を読むとTwitterアプリケーションを試してみるには,ステップ・バイ・ステップで,そこに示してあるようなコードを書いてみましょうと言うことなのですが,これを理解しながら書き写したり,コピペするにしても必要なライブラリを持ってこなければなりません.

mbedにはこのような作業を一度に行ってしまう仕組みがあるので,それを使いましょう.

上のページ表示内に赤で示したリンクが,そのサンプル・アプリケーションを一括導入するためのリンクです.「http://mbed.org/users/donatien/programs/TwitterExample」 のリンクをクリックすると新しいページが開き,次にどうするのかを聞いてきます.

アプリケーション全体をインポートするので「Import program into Compiler」のリンクをクリックしてください.そうすると,今度はコンパイラページ上でダイアログが開きます.その中でImportボタンをクリックするとサンプル・プロジェクト一式を自分のコンパイラページに持ってきてくれます.

「インポート」についてはこちらのページ(http://mbed.org/users/kokotaro/notebook/importing-programs-and-libraries-in-to-the-compile/)で詳しい説明がされています.

Twitter クックブック内のリンクをクリック

[注] 2012年8月31日現在,CookbookのTwitterページからリンクされているサンプルは,古いものが置かれています(このままではコンパイルできません).代わりのサンプルコードを用意したので,こちらを使うようにしてください. 新しいサンプルコード→TwitterExample

[注] 2012年8月31日現在,この元記事を書いた頃と比べ,インポートを行うボタンの位置やデザインが変更されていますが,基本的には同じ手順で作業が可能です

次に開いたページで「Import program into Compiler」を選択

自分のコンパイラ・ページが開き,インポートを指示

インポート・ボタンを押すと自分のコンパイラ・ページへの取り込み作業完了がします.

さてここまで終えると,「TwitterExample」というプロジェクトがコンパイラページ左側に表示されていると思います.その中のソースコードを見てみましょう.これは旧バージョンのサンプルコードに比べると,若干複雑です.

ですが変更が必要なところは1行または2行だけです.どうして変更しなくてはならないのが33行目のTwitterのユーザ名とパスワードです.これを自分のものに変更しておきましょう.

31行目は「つぶやき」を書くところです.日本語を直接コードの中に書きこむのは難しいので,ここではASCII文字(半角英数字)をつぶやいてみます.(オリジナルのソースにあったもの,そのままです.)

ソースコードの33行目の"myuser","mypass"の二重引用符内それぞれを自分のユーザ名,パスワードに変更します.パスワードはsupertweet.netに設定したものを使います.supertweet.netの使い方についてはこちら(http://blog.fkoji.com/2010/05250022.html)を参考にしてください.

準備ができたらコンパイルして実行してみましょう.コンパイルしてmbedにダウンロード,イーサネット・ケーブルが接続されていることを確認して,リセット・ボタンを押すと実行です.

このコードではDHCPからIPアドレスをもらうようになっているので,完了までに若干時間がかかります.

twitter.comにアクセスして.mbedで投稿したつぶやきが確認できれば完了です.

できた!

 

[注] twitterはまったく同じ投稿は1日一度しかできません.毎回違う投稿を行うには時間の情報を入れるなど工夫が必要です.
参考: エレキジャック「mbedを利用した入退室管理システム」 http://www.eleki-jack.com/arm/2010/09/mbed-4.html#more

日本語をつぶやいてみる:

日本語をつぶやくには少し工夫が必要です.mbedのコンパイラでは日本語をそのまま扱うのが難しいようなので(ひょっとしたら,できるのかもしれませんが,現時点ではよくわかりません).旧ライブラリを使用したサンプルではURLエンコードした文字列をそのまま送信できたのですが,この新しいサンプルではうまくいきません.

そこで以前jksoftさんが行っていた「メッセージをファイルから読み込む」方法でつぶやいてみます.

  1. まずオリジナルのサンプルコードの30行目と31行目の間に以下のようなコードを追加します
      HttpClient twitter;
      
      HttpMap msg;  //////////  30行目 
    
        //////////  追加コード,ここから
    
        LocalFileSystem local( "local" );
        char            s[ 256 ];
        FILE            *fp;
    
        printf( "\r\nreading a message file.\r\n" );
    
        if ( NULL == (fp = fopen( "/local/tweet.txt", "r" )) ) {
            printf( "\r\nError: The message file cannot be accessed\r\n" );
            return -1;
        }
    
        fgets( s, 256, fp );
        fclose( fp );
    
        //////////  追加コード,ここまで
    
      msg["status"] = "I am tweeting from my mbed!";    //////////  元の31行目 
      twitter.basicAuth("???", "???"); //We use basic authentication, replace with you account's parameters
  2. (2) さらに「元の31行目」を以下の様に変更します.
      msg["status"] = "I am tweeting from my mbed!";    //////////  元の31行目 変更前
      msg["status"] = s;    //////////  元の31行目 変更後
  3. これでコードは出来ました.コンパイルしてmbedドライブ内に保存しておきます.
  4. あとは「つぶやき」を保存したファイルを用意するだけです.コードを見るとmbed内に保存された「tweet.txt」からデータを読むようになっているので,そのファイルを用意しましょう.
    [注意!] ファイルの文字コードは「UTF-8」でエンコードされている必要があります.その文字コードを扱えるエディタで作成してください.

さてmbed上に必要なファイルがすべて揃いました.リセットボタンを押して実行してみます.あとは投稿できたかどうかを確認します.

できました!

 

(念のため)参考として変更後のコード全体を以下に示します.

...このサンプルコードを用意しました.ImportはこちらからTwitterExample_Japanese

/*
  Update: 21-06-2010
  The basic authentication service for twitter is going down at the end of the week.
  To continue using that program, the code has been updated to use http://supertweet.net which acts as an API proxy.
  Simply visit the website to setup your twitter account for this API.
  See: http://www.supertweet.net/about/documentation
*/

#include "mbed.h"
#include "EthernetNetIf.h"
#include "HTTPClient.h"

EthernetNetIf eth; 

int main() {

  printf("Init\n");

  printf("\r\nSetting up...\r\n");
  EthernetErr ethErr = eth.setup();
  if(ethErr)
  {
    printf("Error %d in setup.\n", ethErr);
    return -1;
  }
  printf("\r\nSetup OK\r\n");

  HTTPClient twitter;
  
	HTTPMap msg;  //////////  30行目 
	
    //////////  追加コード,ここから

    LocalFileSystem local( "local" );
    char            s[ 256 ];
    FILE            *fp;

    printf( "\r\nreading a message file.\r\n" );

    if ( NULL == (fp = fopen( "/local/tweet.txt", "r" )) ) {
        printf( "\r\nError: The message file cannot be accessed\r\n" );
        return -1;
    }

    fgets( s, 256, fp );
    fclose( fp );

    //////////  追加コード,ここまで  ////

  msg["status"] = s;    //////////  元の31行目 変更後

  twitter.basicAuth("???", "???"); //We use basic authentication, replace with you account's parameters
  
  //No need to retieve data sent back by the server
  HTTPResult r = twitter.post("http://api.supertweet.net/1/statuses/update.xml", msg, NULL); 
  if( r == HTTP_OK )
  {
    printf("Tweet sent with success!\n");
  }
  else
  {
    printf("Problem during tweeting, return code %d\n", r);
  }
  
  return 0;

}

 


参考:

このサンプルコードはIPアドレスを得るのにDHCPを使うようにできています.
固定IPアドレスを指定する場合は,以下のように 5行目にある「EthernetNetIf」の宣言に変更を加えます.

EthernetNetIf eth;  // 変更前: DHCPを使う設定
EthernetNetIf  eth(    //  変更を加えた: 固定IPを使った例 
          IpAddr(192,168,0,101), //IP Address
          IpAddr(255,255,255,0), //Network Mask
          IpAddr(192,168,0,1), //Gateway
          IpAddr(192,168,0,1)  //DNS
);

参考:

インターネット/イーサネットの動作が上手くいかない場合は,Cookbookに掲載されている「HTTP Server」のサンプルで,Webサーバ・アプリケーションを試してみることもできます.これならインターネットのサーバに接続しなくても,PCとmbedをクロスケーブルで直接繋いだり,ローカルネットワーク内でその動作を確認することができます.

mbedをサーバにして,webブラウザからmbedストレージ内に保存したhtmlやJPEGファイルにアクセスすることができます.


参考:

DHCPで与えられたIPアドレスや通信の状態などは「USBシリアル」機能を使って確認することができます.参考日本語ページ


参考:

Yuan Dean Scientific製の46F-1211は,PulseJack製 J0011D21Bとピン配列は同じですがその順番が180度回転した配置になっています(Ethernetケーブルのコネクタの爪の向く方向もちょうど逆になります).

ピン番号 信号名
1 TD+
2 TD-
3 RD+
6 RD-

結線の例を下の写真に示します.各線の色は先に示したPulseJackの例と同じにしてあり,茶色を1番ピン(TD+)に,赤を2番(TD-),橙を3番(RD+),黄を6番(RD-)に接続しています.

mbed側に接続するヘッダピンの接続はコチラを参照してください

 


参考:

テキストファイルの文字コードをUTF-8で保存する方法: MacやWindowsではOSに用意されているアプリケーションでこれが可能です.

下の図を参考に保存時のオプションを指定してください.







更新履歴:

2010/06/02 日本語版Twitterガイド・リリース
2010/06/09 Yuan Dean Scientific製 46F-1211 コネクタ接続法を参考ページに追加
2010/06/10 新Cookbook公開に伴い,内容が古いCookbookを参照している注記を追加
2010/06/12 新Cookbookに対応するため更新.旧ガイドページはこちらへ引越し
2010/06/13 日本語でつぶやく方法を追加
2010/06/15 サンプルコード名変更「NetTwitterExample」-->「TwitterExample」に対応
2010/06/24 Twitter APIプロキシ対応のサンプルコード公開に合わせ,内容を更新
2010/06/25 昨日(24日),暫定更新した内容を見直し,日本語をつぶやくところまで改めて動作を検証,その内容を反映させた
2010/08/13 2010年8月末販売開始予定の☆ボード・オレンジの案内を掲載
TwitterBasic認証の終了時期を修正
古くなっていたリンクを修正
「このページは,まだ書きかけです」の注意書きを削除
2010/09/10 ☆ボード・オレンジのページの引っ越しに伴いリンクを更新
2010/09/12 tomot tomotさんのご指摘を元に「全く同じツイートは1日1回しか投稿できない」注釈を追加
日本語をつぶやくサンプルコードを公開,それをインポートするためのリンクを追加
サンプルコードのインポートを行う説明部分の画像を,最新の環境で表示されるものに更新
Mac/WindowsのOS付属のアプリケーションで,文字コードをUTF-8としてテキストファイルを保存する方法を追加
mbed回路図へのリンクを更新
2010/09/13 注記を追加.RJ45コネクタの誤接続-->PCから正しく認識できない
2011/03/25 スイッチサイエンスさん販売の「mbed用イーサネット接続キット」の紹介を追加.
2012/08/31 古いサンプルコードがそのままではコンパイルできなくなっているので,新しいコードを公開(TwitterExample,TwitterExample_Japaese).
本文中にその点についての言及と各サンプルコードのページヘのリンクを追加・変更


7 comments

13 Jun 2010 . Edited: 13 Jun 2010

Oh! Thanks a lot for connecting Ethernet adapter.

私もイーサにつなげるかな。この記事を参考にさせてもらいます。

12 Sep 2010

こんにちは。詳細な説明をありがとうございます。

さて、現在のtwitterは全く同じ文面は一日一度しか投稿できない仕組みになっているようです(http://www.eleki-jack.com/arm/2010/09/mbed-4.html#more)。このサンプルコードのままでは二度目以降のつぶやきができないのではないでしょうか?原因がわからずしばらく放置していたのですが、今日一日真面目に調べてようやく気がつきました。エレキジャックさんの記事を参考に、文章の最後に時間を入れるよう改造したところ無事連投できましたので報告します。以上ご参考まで。

ありがとうございます.

ご指摘いただいた点を本文に反映しました.確かに私も最初はこれで「?」 になったことを思い出しました.

28 Aug 2012
こんにちは。説明ありがとうございます。 上記のようなやり方でやったのですがなかなかコンパイルできません。 当方は☆board orenge
29 Aug 2012 . Edited: 31 Aug 2012
ご指摘ありがとうございます.

新しいコンパイラの環境では,古いライブラリでコンパイルできなかったようです.
現在の環境でコンパイルできるものを用意しました.お試しください.
http://mbed.org/users/nxpfan/code/TwitterExample/

日本語をツイートするものも,あとで更新したものをpublishし,本文を更新しておきます

オリジナルのサンプルコードの代替を公開,日本語ツイートの サンプルを更新.さらにこのページの本文を更新しました
02 Sep 2012
ありがとうございました. 無事につぶやくことができました。
よかったです! (^^)

Please log in to post a comment.