0

mbedにEthernetを接続しtwitterにpostする

@1VQ9の助力を得てmbedがethernetにつながった。1VQ9はパルストランスも通さず、分解したLANケーブルをmbedに直接差し込んで動かしてたけど、俺はmbed Ethernet Testingに従ってパルストランス入りのEthernet jackを使った。



ethernetにつないだところ
mbed + ethernet
mbedとethernet jackは
  • mbed p1 = Ethernet RD+
  • p2 = RD-
  • p7 = TD-
  • p8 = TD+
という風に接続した。こっちでは別のつなぎ方をしているが、この配置だと動かなかったのでjack毎に違うのかもしれない。よくわからない。


配線はこっちの方が見やすいかも
mbed + ethernet


裏のピン配置がブレッドボードに刺せるピッチ幅ではなかったので、秋月で100円で売ってる両面ガラススルーホール基盤の切れ端とピンヘッダを駆使してピン配置を変更した。
ethernet jack for breadboard
ethernet jack for breadboard


mbedにはHTTPClientというDNSやDHCPやHTTPを適当に解決してくれるモジュールがある。
ほぼmbed EMAC/HTTPClientのまま動いた。
HTTPClientを使うために、
http://mbed.org/projects/cookbook/svn/EMAC/lwip/trunk
をprojectにimportする必要があった。mbedのエディタのGUIからimportできた。

tweet_test | mbed
#include "mbed.h"
#include "HTTPClient.h"
using namespace std;

DigitalOut led(LED1);

HTTPClient http; // use DHCP

/* // use static IP
HTTPClient http("mbed", // hostname.
                IPv4(192,168,1,39), // IPv4 address
                IPv4(255,255,255,0), // netmask
                IPv4(192,168,1,1), // default gateway
                IPv4(192,168,1,1)); // dns server
/**/

const char msg[] = "status=mbed test";

int main(void) {
    http.auth("username", "password");
    http.post("http://twitter.com/statuses/update.xml", msg);
  
    while(1) {
        led = !led;
        wait(0.2);
    }
}
twitter APIにbasic認証を通ってhttp-postし、成功するとLED点滅のループに入る。

twitter APIは同じtweetを連続で受け取らないようになっているので、このプログラムだと一度tweetした後はmsgを別の文字列に変えないと再確認できない。後ろに乱数とか時刻とかをつける必要がある。

0

ArduinoがEthernet対応しそう

Bluetooth版のArduinoが少しずつ研究室にも届き始めているわけだが、

イタリアでArduinoを作っているtinker.itより。今度はLANにつながるぞ。

tinker.it Blog Archive The Arduino Ethernet board

ENC28J60とuIPを使ったのでXPortよりコストを抑えられるとのこと。(コメント欄)

確かにENC28J60+uIP+ATmega8系マイコンのサンプルは結構あって、日本でもENC28J60-SPI変換キットがオプティマイズで2300円買える

Arduinoぐらい安い基盤でTCP/IP使えると、HTTPでいろいろfeed持ってきて単体で動作するwidgetが安く大量に作れて楽しそう。

誰かArduino用のhashと正規表現ライブラリ実装してくれればな。各feed用のパーサーとか言わないのでせめて。

2か月前にこんなの作ったんだけど

明日の天気を色で教えてくれるてるてる坊主 – 奥出研2007年春合宿 XPort班

現実的にはArduinoにはhashや正規表現や可変長の文字列が無いので、LANにつながってもUSBケーブルが長くなった程度でしかない。

PC無しで動くambient widget系と電子工作をmashupするなら、こういう風にPCを裏方のゲートウェイにしてしまって、そのPC上で天気のフィードを解析するとか、GoogleCalendarやdiggに認証するとか、の方が楽なので、Arduino部分がEthernetだろうがBluetoothだろうがUSBだろうが設置性以外はあまり変わらないんだけどね。

でもArduinoがEther対応はワクワクする。