ArduinoでtwitterにPOSTする
ArduinoでtwitterにPOSTする
前回はArduinoでHello, World!的LED点滅をするところまで準備したのだが、この程度じゃなにも面白くない。もう少し使い方を広げたい…というわけで、私が参加してきたセミナーでも使われていた「ArduionからtwitterにPOST」というのをやってみよう。
固定IPでの接続テスト
こちらのサンプルコードを使うと、とりあえずの動作確認ができる。
- イーサネットシールドと合体
- 新しいスケッチを作成し、サンプルコードをペースト
- MACアドレスとIPアドレスを書き換える
- コンパイル→転送→リセット
- ブラウザからさっき設定したIPアドレスにアクセス
- 画面が出ればOK
MACアドレスとIPアドレス
MACアドレス
ネットワークアダプタを一意に識別するアドレス。2桁の16進数を6セット(6オクテット)であらわされる。
通常イーサネットシールド底面に貼られたラベルに書いてある、らしい。私が購入したものは貼られていなかったので、仕方なく「ローカルMACアドレス」を設定した。
先頭オクテットの0x02ビットがグローバルアドレスとローカルアドレスを識別するビットであり、OFFであればグローバルアドレス、ONであればローカルアドレスであることを示している。
●MACアドレス – Wikipedia
http://ja.wikipedia.org/wiki/MAC%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9
ということなので、最初の16進数を確認して、0x02ビット(右から3番目)が1であればOKなはず。あとは、LAN内でぶつからないような値を設定すればいい。念のため「arp -a」あたりで既存のMACアドレスと重複しないか調べよう。
IPアドレス
添付のライブラリだとIPアドレスを固定する必要がある。家庭であればだいたいLAN内だろうから、開発マシンのIPアドレスを調べ、それに近い値を設定すればいいだろう。設定予定のIPにpingコマンドを発行したりして、重複が起こらないように注意すること。
ツッコミ歓迎
この辺あまり詳しくないので、間違いがあればご指摘いただきたい次第である。
DHCPサーバから動的にIPアドレスを取得する
IPアドレスの重複など人間が気にすべきことじゃない、ということで、DHCPサーバが動いている環境なら動的に割り当てを受けよう。
こちらからライブラリをダウンロード、\path\to\arduino\hardware\libraries\Ethernetに解凍する。examples/WSegbClientWithDHCP\WebClientWithDHCP.pdeにMACアドレスを設定してを実行すると、シリアルモニタにGoogleから取得したコンテンツがだーっと流れてくる。
twitterにPOST
ここまでの準備ができていれば、セミナーでもデモっていたtwitter投稿ライブラリを使うとあっという間にtwitterへのPOSTが可能になる。
こちらのライブラリに付属のサンプルでは普通にEthernetライブラリを使っているが、さっき紹介したDHCPライブラリを使うとさらに簡単。
おまけ
今回はPOSTするトリガとして、SHARPの測距センサユニット「GP2D12[PDF]」を使った。
GP2D12 |
---|
Vo |
GND |
Vcc |
このように配線し、analogRead(0)で読み取った値が500を超えたらPOST処理を呼び出すようにした。
ソースコード
#include <Ethernet.h>
#include <Dhcp.h>
#include <Twitter.h>
byte mac[] = { xDE, xAD, xBE, xEF, xFE, xED } ;
Twitter twitter("{USERNAME}:{PASSWORD}") ;
char msg[] = "夏休み満喫してますか?";
void setup()
{
Dhcp.beginWithDHCP(mac) ;
Serial.begin(9600) ;
delay(1000) ;
}
void loop()
{
// ポート0のアナログ入力値が500を超えたらPOSTして終了 int dist = analogRead() ;
Serial.println(dist) ;
if (dist > 500)
{
post(msg) ;
while(true) ;
}
delay(200) ;
}
void post(char* msg)
{
Serial.println("connecting ...") ;
// twitterにPOST if (twitter.post(msg))
{
// HTTPステータスが返ってくるのを待つ int status = twitter.wait() ;
if (status == 200) // 成功 { Serial.println("OK.") ;
}
else // 失敗 { Serial.print("failed : code ") ;
Serial.println(status) ;
}
}
else { Serial.println("connection failed.") ;
}
}
まとめ
前回・今回と「Arduinoが何か出力する」という作例を紹介した。しかし、フィジカル・コンピューティングの魅力は「現実世界からArduinoへ入力する」というインタラクションあってこそ。何かのセンサと今回のtwitterライブラリを組み合わせることで、現実世界で起きた何かをtwitterにPOSTすることができる。
Links
●Arduino DHCP Library: Version 0.3
http://blog.jordanterrell.com/post/Arduino-DHCP-Library-Version-03.aspx
●Arduino DHCP Libraryを使ってみる : blog.loadlimit – digital matter –
●Arduino DHCP Library: Version 0.4
http://blog.jordanterrell.com/post/Arduino-DHCP-Library-Version-04.aspx
●建築発明工作ゼミ2008: Arduino Ethernet Shield
http://kousaku-kousaku.blogspot.com/2008/11/arduinoethernet-shield.html
http://ja.wikipedia.org/wiki/MAC%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9
●ArduinoからTwitterにPOSTするライブラリ – Okiraku Programming