Arduinoの状態をim.kayac.comに送信してiPod touchで確認する
iPhone OS 3.0以降に搭載されているApple Push Notification Service機能について、日本語版ヘルプには書かれていないが、英語版の方に、TCP Portの5223番を解放しろ、と書いてある。
- iPhone、iPad、iPod touch で通知機能を使う - Apple サポート
- Use notifications on your iPhone, iPad, and iPod touch - Apple Support
im.kayac.comを使いたくて、ちょっとテストしてみたら上手くPushされず、ヘルプの存在を知らずに、Twitterで出来ないなあとつぶやいたところ、すぐに中の人が教えてくれた。心から感謝。
さて。
PythonスクリプトでWebにある情報をPush出来ても面白くないので、現実世界の情報を自分のiPod touchにPushすることを考えた。そこで、Arduinoを用いる。
適当なセンサが無かったので、可変抵抗器を使って、電流の値が一定値以上になったら、im.kayac.comを通して、iPod touchにメッセージをPush配信する。
こんな感じで繋いで、Arduinoの0番ピンに電流を送る。
ArduinoとPCをUSBで繋いでおく。
int value = 0; void setup() { Serial.begin(9600); } void loop() { value = analogRead(0); Serial.println(value); delay(100); }
Arduinoプログラムも単純明快。0番ピンの値を読んで、シリアルに流す。
#!/usr/bin/python # -*- coding: utf-8 -*- """ im.kayac.com """ import hashlib # for SHA-1 import urllib def send_message(message): user = "laclefyoshi" secret_key = "ORE_NO_HIMITSUKEY" url = "http://im.kayac.com/api/post/" + user signature = hashlib.sha1(message + secret_key).hexdigest() opt = urllib.urlencode({ "message": message, "sig":signature, }) res = urllib.urlopen(url, opt) print res.read() """ Arduino Observer """ import serial # pySerial import sys arduino = serial.Serial(3, 9600) while(True): value = arduino.readline().strip() if(int(value) > 512): send_message((u"イクーッ: %s" % value).encode("UTF-8")) sys.exit()
Arduinoを繋いだPCで、Pythonスクリプトを動かす。シリアルポート(ここではCOM4)に流れてくる値(0から1024の範囲)を読み、512以上であればim.kayac.comにメッセージを送信して終了する。
確認はしていないが、http://pyserial.sourceforge.net/pyserial.html#requirementsによるとpySerialはJython(with Java Communications API)でも使えるらしいので、このプログラムも大きな変更無しでJython 2.5以降(hashlibを使っているから)で動作する筈。
適当に可変抵抗器を回すと、im.kayac.comに送信したメッセージがiPod touchにPush配信されてくる。
こんなサービスを無料(アプリ含めて)で公開しているim.kayac.comは素晴らしい。
iPhoneと違い3Gネットワークに繋がらなくて、いちいち無線LAN環境を探す羽目になるiPod touchにもやもやしていた時期もあったが、D25HWを買い、Push配信の手段を得、どんどん夢が広がる。