mbedですが、ピンにEthernetがあるのが気になっていました。だって、Arduino Duemilanove 328 (3,200円くらい)とイーサネットシールド (4,200円くらい)を足した値段より、mbed (6,000円くらい)のほうが安いのですよ。ちょいちょいとTCP/IPを喋らせられるとなると、放ってはおけません。
調べてみたところ、パルストランスを接続してやればEthernetケーブルに接続できるらしいということが分かりました。秋月で売ってないかなーと調べてみたところ、300円でパルストランス内蔵のRJ-45モジュラージャックがありました。( 通販コード P-00819 )
早速秋月で買ってくると、秋月で売っていたのは、Pulse Jackという会社のJ0011D21Bという製品でした。
こいつのTD+, TD-, RD+, RD-を接続してやれば良いはずなのだけれども、ピンが千鳥配列なために、2.54mmピッチの基板では使えない。1.27mmピッチのユニバーサル基板を買いに行くのが面倒だったので、基板を加工してみました。
で、加工した基板にパーツを合わせてみると、こんな感じです。ちょっと削りすぎましたが、まぁいいでしょう。
はんだ付けして、配線も済ませました。2列x4の8ピンのピンヘッダを使っていますが、ブレッドボードに刺したときに安定させたかっただけで、4pin(1列)しか使っていません。ピン配置はmbedと合わせてあります。
ここで、使った基板が両面じゃないことに気付いたのですが、表側からピンヘッダのピンを押し込んで、できるだけブレッドボードに刺す長さを確保しつつ、裏面ではんだ付けをしてあります。
パルストランス側からは8pin出ているのでどうしようかと思いましたが、どうやら前記の4本の信号線だけ接続すれば良いみたいです。(GNDとかCTをどうすればいいのだろう、と思ったのですが特に接続しなくても良いみたいです。)
で、mbedと共にブレッドボードに刺して、こんな感じに組んでみました。
あとはソフトウェアですが、例によってmbedのサイトでテストコードを書いてコンパイルしてやればOKです。
mbedのサイトにあったサンプルコードをそのままいただいてきただけなのですが、DHCPでのIPアドレス取得がうまくいかなかった様なので、とりあえずIPアドレスを固定で指定するようにしてあります。
まず、コードはHTTPClientというライブラリを使うので、ProgramにLibraryをImportしてやります。Programの名前のところを右クリックすると、”Import Library…”というメニューがあるので、そいつを選んでやって、次のように指定をします。
するとライブラリをインポートしてくるので、あとはコードをmain.cppに書き込んでやるだけです。
こんなコードを書きました。
main.cpp
#include "mbed.h" // import Library from http://mbed.org/projects/cookbook/svn/EMAC/lwip/trunk // Name: HTTPClient #include "HTTPClient.h" DigitalOut led(LED1); // see http://mbed.org/projects/cookbook/api/EMAC/lwip/trunk/HTTPClient/HTTPClient#HTTPClient.HTTPClientd HTTPClient http("mbed", // Brings up the device with static IP address and domain name. IPv4(192,168,1,100), // IPv4 address IPv4(255,255,255,0), // netmask IPv4(192,168,1,1), // default gateway IPv4(192,168,1,1)); // dns server LocalFileSystem local("local"); int main(void) { char url[256]; // Open a file to write. FILE *fd = fopen("/local/hello.htm", "w"); // Insert the search term into the URL sprintf(url, "http://www.google.co.jp/search?hl=en&q=%s&btnG=Search&meta=", "HelloWorld"); // Request a page and store it into a file. http.get(url, fd); // Close the file. fclose(fd); // The file is written on the local disk. // "/hello.htm" Have a look. // Work is done! while(1) { led = !led; wait(0.2); } }
これだけのコードを書くだけで、googleにhttpでアクセスをして、結果をローカルのファイルに書き出してくれます。素晴らしい。
Compileボタンを押して、バイナリをダウンロード、それをUSBでmbedにコピーしてやるだけで実行されます。
実行が終わるとLEDがチカチカするので、USBマスストレージでmbedを除いてやると、ファイルができているではありませんか。
こんな感じでmbedでの開発は完了です。
あ、mbedのサイトというか開発環境には、自分が書いたコードをpublishする機能があります。
ここで、今回のコードを落としてくることができます。 http://mbed.org/users/ytsuboi/programs/HTTP_Client/5ydty/
なかなか素晴らしい機能で、開発者コミュニティを作ることを考えてるなーと思いましたが、mbedしたこと無い人に雰囲気を知ってもらうためにも、とりあえず↑にコードを貼っておきますね。
とりあえずTCP/IPが簡単に使えることが分かったので、また何か試作してみたいと思います。
すごい!
ちょっとトライしてみようと思います!